Skryté soubory


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

  1. 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é.
  2. 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