Subsections

Навигация във файловата система

Когато разгледахме командата ls(1) видяхме част от файловата структура на Debian. Тя е организирана в дървовидно -- концепция позната от множество операционни системи. Преди да видим как можем да се придвижвам из различните части на структурата (директориите), нека се запознаем с една друга команда - pwd(1). Тя е изключително лесна и предназначението й е да покаже името на директорията, в която се намираме. Да опитаме:

manchev@shodan:~$ pwd
/home/manchev
manchev@shodan:~$

В случая, командата показва директорията на потребителя като текуща, понеже до сега не сме навигирали извън нея.

Ако погледнем описанието на man(1) за pwd(1) ще видим, че командата има две опции -- "--version" и "--help". Нека опитаме някоя от тях:

manchev@shodan:~$ pwd --help
-bash: pwd: --: invalid option
pwd: usage: pwd [-PL]
manchev@shodan:~$

Изглежда "--help" не е валидна опция за pwd(1). Същото ще се случи, ако опитаме и с "--version". Това е така, понеже повечето shell-ове като bash(1) имат собствена имплементация на pwd(1), която се различава от описанията на man.

В случая с bash, man няма да ни даде информация за реализацията на командата. За сметка на това, ако погледнем в info (info bash) ще видим описание на pwd. От там ще разберем, че pwd на bash има две валидни опции: "-P" и "-L", които контролират дали извежданото име на директория да съдържа или не символни линкове.

След като веднъж знаем къде се намираме, нека опитаме да сменим текущата си директория. Това можем да постигнем чрез командата cd.

cd

cd променя текущата директория и приема един аргумент -- име на директорията, в която да се преместим (и тя да стане текуща). Ако извикаме cd без аргументи, тя по подразбиране ни връща в нашата home директория.

Да опитаме да се преместим в основната директория и после да се върнем в нашата собствена.

manchev@shodan:~$ cd /
manchev@shodan:/$ pwd
/
manchev@shodan:/$ cd
manchev@shodan:~$ pwd
/home/manchev
manchev@shodan:~$

Видяхме как заедно се използват cd и pwd. При втората промяна на директория не използвахме параметър. В този случай:

manchev@shodan:/$ cd

и

manchev@shodan:/$ cd /home/manchev

се държат еквивалентно, така че съкратихме писането на аргумента. Командата cd е изключително проста. Всъщност, освен аргумента за директория, тя приема само още два параметъра -- "-P" и "-L", които са аналогични на тези от pwd(1). Не трябва да забравяме, че ако все пак търсим помощна информация за cd трябва да погледнем чрез man bash или info bash, защото cd е също вградена команда за shell-а.

Докато се "разхождаме" из директориите виждаме, че при смяната на текущата директория bash prompt-ът се променя, отразявайки новата директория в която се намираме. Ако бяхме изпълнили cd /home, той щеше да добие видa:

manchev@shodan:/home$

В този случай бихме могли да се запитаме, дали тази функционалност не прави pwd(1) излишна. Е, определено не е така. Първо, командата може вместо да бъде веведена от нас, да бъде изпълнена в някакъв script (вътрешния език на shell-а) и тогавата нещата стоят малко по-различно. Освен това, дадена Debian система може да е така конфигурирана, че да не извежда подобна информация на prompt-а си, а ние трябва винаги лесно да можем да разберем къде се намираме.

Друго, което следва да се запитаме, защо тогава, когато сме в собствената си директория (/home/manchev) prompt-ът изглежда по друг начин, вместо да ни показва името на директорията. В този случай знакът " " има специално значение и то е да отговаря на собствената директория на конкретния потребител. Смисълът на тази функционалност ще видим след малко.

Има още една особеност на cd, която принципно важи и за много други команди : тя позволява подаваната чрез аргумент директория да бъде описана абсолютно или относително. Какъв е смисълът? Идеята е, че ако навигираме до директория /home, след което пожелаем да се озовем в /home/manchev имаме два подхода:

manchev@shodan:/home$ cd /home/manchev

и

manchev@shodan:/home$ cd manchev

Във втория случай, когато аргументът не започва със знака "/" (който обозначава основната директория на дървото) командата предполага, че директорията която указваме е относителна спрямо текущото ни местоположение. Това предимство не е толкова явно в този случай, но ако си представим, че се намираме например в /usr/X11R6/lib/modules/drivers и искаме да се озовем в /usr/X11R6/lib/modules/drivers/linux спестява доста писане. Нещо повече -- cd разрешава да указваме не само име на директория, а и цялостен път, който също може да бъде абсолютен (от основната директория) или относителен (от текущото ни местоположение). В нашия пример ако в директория manchev имаше да кажем директория backup, вместо:

manchev@shodan:/home$ cd manchev
manchev@shodan:~$ cd backup

можем да използваме:

manchev@shodan:/home$ cd manchev/backup

Тук идва реда да се върнем към знака " " и да видим колко полезен може да ни бъде, когато навигирме из файловата система на Debian.

Да предположим, че се намираме в директория /etc и искаме да достигнем до поддиректория на нашата собствена (пак ще използваме измислената backup). От казаното до сега следва, че имаме два похода:

manchev@shodan:/etc$ cd
manchev@shodan:~$ cd backup

или:

manchev@shodan:/etc$ cd /home/manchev/backup

А ето как можем да използваме " " и да си съкратим дългото писане или двете последователни изпълнения на cd:

manchev@shodan:/etc$ cd ~/backup

Сега, нека приключим с cd и да видим как може да направим измислената директория backup съвсем реална.


Nikola Antonov 2004-10-31