Skryté soubory jsou velmi zásadní vlastností moderních operačních systémů. Platí pravidlo “Co oči nevidí, to srdce nebolí” a pravděpodobnost páchání škod uživatelem ve filesystému zásadně klesá. Nejinak je tomu u Mac OS X. Co když ale skryté soubory vidět chceme?
Schovávací metody
- dot-files: Tradiční metoda unixových systémů. Všechny soubory, jejichž název začíná tečkou, jsou považovány za nevidtelné.
- FinderInfo – extended attributes: filesystém HFS+ umožňuje skladovat metadata spojená s konkrétním souborem . Těmto metadatům se říká rozšířené atributy (extended attributes = téma na samostatný článek). Jedním z takových atributů je bitové pole, které přidává souborům speciální flagy používané převážně Finderem. Mezi nimi je i neviditelnost.
Finder
Marně byste hledali zobrazení nevidelných souborů v předvolbách Finderu či snad ve view options…
Je třeba nastavit proměnnou AppleShowAllFiles v konfiguračním plist souboru Finderu – ~/Library/Preferences/com.apple.finder.plist – pomocí terminálu.
defaults write com.apple.finder AppleShowAllFiles TRUE; killall Finder
Finder nyní ukazuje všechny soubory. Dočasně to může být výhodná situace, ale dlouhodobě? Najednou všude nepořádek. Zpět do původního stavu.
defaults write com.apple.finder AppleShowAllFiles FALSE; killall Finder
Go
Často stačí vlézt do nevidelného adresáře jako /etc, /var nebo ~/Library. Ve Finderu použijte funkci Go to Folder (⇧ + ⌘ + G) pod nabídkou Go, kde zadáte požadovanou cestu. Dopňování názvu pomocí tabu funguje, ale vždy se vybere jen první možnost a nelze přepnout na další.
Open/Save dialog
Systémový dialog pro otevření v souboru nerespektuje TRUE/FALSE hodnotu AppleShowAllFiles proměnné. Neviditelné soubory zobrazíte klávesovou zkratkou
⇧ + ⌘ + . (shift + command + tečka)
Pryč s nevidelností – chflags
V Terminálu vylistujte kořenový adresář pomocí ls -lO
. Přepínač -O
ukáže pátý sloupeček se seznamem všech flags (více v man chflags
), mezi kterými je i nevidelnost.
Vypnout -> chflags nohidden CESTA_K_SOUBORU
Zapnout -> chflags hidden CESTA_K_SOUBORU
Pryč s nevidelností – SetFile
Zobrazíte-li si kořenový adresář ls -l /
, povšimněte si zavináče za přístupovými právy u některých položek. Takový soubor má nějaká metadata. Jejich seznam lze zobrazit přepínačem @ -> ls -l@
. Ve většině případů najdeme atribut com.apple.FinderInfo, kterých ukládá mimo jiné i hodnotu flagu nevidelnosti soubor.
S tímto atributem lze přímo manipulovat pomocí nástrojů GetFileInfo a SetFile. Oba jsou součástí balíčku vývojářských nástrojů Command Line Tools. Ke stažení na developer.apple.com/downloads v rámci free developer účtu.
GetFileInfo -P /etc vrací informace o adresáři, mezi kterými je i seznam aktivních atributů vypadající takto -> attributes: aVbstclinmedz
Malá písmena znamenají vynuté flagy, velká zapnuté. Seznam najdete v man stránkách (man GetFileInfo
, man SetFile
).
# Přepínač -P je potřeba, protože /etc odkazuje (symlink) na /private/etc
Neviditelnost odstraníme takto: sudo SetFile -P -a v /etc
# Symlink /etc -> /private/etc patří rootovi, proto sudo
.
Bonusy
Přehled souvisejících přepínačů pro příkaz ls
- -a = ukaž dot-files
- -@ = ukaž extended-attributes
- -O = ukaž flags
- -e = ukaž ACL
Závěrem přikládám velmi jednoduchý skript prohazující nastavení neviditelnosti skrytých souborů ve Finderu.
#!/bin/bash app_uti="com.apple.finder" app_name="Finder" plistbool="AppleShowAllFiles" [ ! -e ~/Library/Preferences/${app_uti}.plist ] && { killall $app_name; exit 1; } invisibility_switch=`defaults read $app_uti $plistbool 2> /dev/null` if [ -z $invisibility_switch ] then invisibility_switch="FALSE" fi if [ $invisibility_switch = "TRUE" ] then defaults write $app_uti $plistbool FALSE else defaults write $app_uti $plistbool TRUE fi killall $app_name
Když se skript zabalí v Automatoru do systémové služby (Service), lze na to nastavit klávesovou zkratku v System Preferences -> Keyboard -> Keyboard Shortcuts.
Ke stažení: Switch Finder Invisibility.workflow