Разглеждане на файлове с ls

Първото нещо, което веднага ни идва на ум е да видим какво има в системата, след като веднъж сме се идентифицирали в нея и притежаваме определни права. Тук е моментът да се запознаем с командата ls(1). Това е една от основните команди на Linux. Това, което тя прави е да покаже списък (list -- ls, връзката е ясна) от файлове. Когато изпълняваме ls(1) без параметри по подразбиране се показва списъка с файловете от текущата директория. Нека опитаме:

manchev@shodan:~$ls
manchev@shodan:~$

Малко неочаквано, но разбираемо. Като нов потребител на системата в моята директория все още няма никакви файлове. Все пак, за да проверим дали ls(1) върши изобщо нещо, нека я изпълним с параметър "/".

manchev@shodan:~$ls /
bin   cdrom  etc     home    lib         mnt  proc  root-n  tmp  var
boot  dev    floppy  initrd  lost+found  opt  root  sbin    usr

Така нещата изглеждат по-нормални. Това което накарахме ls(1) да ни покаже е основната директория на нашата система. Основната директория е пределно позната концепция от множество операционни системи. Тя е коренът, от който дървовидно се разраства цялата файлова система на Debian.

Видяхме, че можем да предаваме като параметър на ls(1) коя част от файловата струткура искаме да разгледаме. Можем например да опитме да видим директориите на регистрираните в системата потребители. Всеки акаунт на потребител който добавяме към системата автоматично получава и собствена директория в нея, където той може да държи файловете си. Тези директории по подразбиране се създават в /home. Да погледнем:

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

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

Ако все пак сте любопитни, къде е директорията на потребителя root, в който се превърнахме за да изключим системата, отговорът е, че root има собствена директория извън home, която е разположена в основната директория. Можете да я видите под името root на изхода от изпълнението на командата ls / по-горе.

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

Освен простото изписване на имената, ls(1) може да показва още много допълнителна информация. Командата е изключително мощна и богата на параметри, както междувпрочем и повечето команди на Debian.

Нека вземем за пример параметъра "-F". Да изпълним:

manchev@shodan:~$ls -F /
bin/   cdrom/  etc/     home/    lib/        mnt/  proc/  root-n*  tmp/  var/
boot/  dev/    floppy/  initrd/  lost+found  opt/  root/  sbin/  usr/

Сега получаваме повече информация за отделните файлове в основната директория. Параметърът "-F" кара ls(1) да постави допълнителен идентификатор до всеки запис, който ни показва какъв е неговия тип. Знакът "/" е указател за директория, "*" показва че записът е изпълним файл, "@" обозначава символни линкове (FIXME: За symlinks/hard links да се каже) , "=" се прикрепя към сокети и "|" за FIFO (FIXME: За FIFO да се каже).

Има още няколко основни параметъра, които е добре да разгледаме. Един много важен и често използван параметър на ls(е) "-l", който кара командата да изведе списъка в по-разширен формат. Да опитаме:

manchev@shodan:~$ls -l /

total 100
drwxr-xr-x    2 root     root         4096 Aug 17 18:19 bin
drwxr-xr-x    2 root     root         4096 Aug 19 08:53 boot
drwxr-xr-x    2 root     root         4096 Aug 17 17:37 cdrom
drwxr-xr-x    9 root     root        24576 Aug 19 18:25 dev
drwxr-xr-x   49 root     root         4096 Aug 19 19:38 etc
drwxr-xr-x    2 root     root         4096 Aug 17 17:37 floppy
drwxrwsr-x    3 root     staff        4096 Aug 19 19:38 home
drwxr-xr-x    2 root     root         4096 Aug 17 17:37 initrd
drwxr-xr-x    5 root     root         4096 Aug 17 22:14 lib
drwx------    2 root     root        16384 Aug 17 16:32 lost+found
drwxr-xr-x    2 root     root         4096 Feb  8  2002 mnt
drwxr-xr-x    2 root     root         4096 Aug 17 17:37 opt
dr-xr-xr-x   34 root     root            0 Aug 19 18:25 proc
drwxr-xr-x    9 root     root         4096 Aug 19 20:12 root
-rwxr-xr-x    1 root     root            0 Aug 18 19:18 root-n
drwxr-xr-x    2 root     root         4096 Aug 17 18:19 sbin
drwxrwxrwt    5 root     root         4096 Aug 19 20:11 tmp
drwxr-xr-x   12 root     root         4096 Aug 18 00:07 usr
drwxr-xr-x   13 root     root         4096 Aug 17 17:37 var

Изходът от изпълнението започва с реда "total <блокове>". Стойността на тези блокове показва размера на дисковото пространство, което заемат файловете в директорията. По подразбиране един блок се равнява на 1024 байта, но тази стойност може да се променя с подхящи параметри на ls(1).

По-нататък за всеки отделен запис се извежда информация както следва: права, брой на твърдите връзки на файла или ако е директория -- броя на твърдите връзки на файловете в нея, име на притежателя на файла, име на групата, размер и времето на последна модификация. Смисълът на тези данни ще разгледаме по-късно, когато видим употребата на различните команди по раздаване на права, смяна на собственост на файлове и т.н.

Последното, което ще споменем за ls(1) e параметъра "-h". Той предоставя същата информация но във вид, който е удобен за четене от потребителя. Разбира се, чудесно е да знаем размера на всеки файл до байт, но е къде по-лесно за възприемане, ако той се конвертира автоматично до KB, MB или GB (в зависимост от размера си), защото така е по-удобен за възприемане.

Като последен пример за ls(1), нека изпълним командата с два параметъра -- "-l" и "-h". Ето как изглежда изхода от изпълнението:

manchev@shodan:~$ls -l -h

total 100K
drwxr-xr-x    2 root     root         4.0K Aug 17 18:19 bin
drwxr-xr-x    2 root     root         4.0K Aug 19 08:53 boot
drwxr-xr-x    2 root     root         4.0K Aug 17 17:37 cdrom
drwxr-xr-x    9 root     root          24K Aug 19 18:25 dev
drwxr-xr-x   49 root     root         4.0K Aug 19 19:38 etc
drwxr-xr-x    2 root     root         4.0K Aug 17 17:37 floppy
drwxrwsr-x    3 root     staff        4.0K Aug 19 19:38 home
drwxr-xr-x    2 root     root         4.0K Aug 17 17:37 initrd
drwxr-xr-x    5 root     root         4.0K Aug 17 22:14 lib
drwx------    2 root     root          16K Aug 17 16:32 lost+found
drwxr-xr-x    2 root     root         4.0K Feb  8  2002 mnt
drwxr-xr-x    2 root     root         4.0K Aug 17 17:37 opt
dr-xr-xr-x   34 root     root            0 Aug 19 18:25 proc
drwxr-xr-x    9 root     root         4.0K Aug 19 20:12 root
-rwxr-xr-x    1 root     root            0 Aug 18 19:18 root-n
drwxr-xr-x    2 root     root         4.0K Aug 17 18:19 sbin
drwxrwxrwt    5 root     root         4.0K Aug 19 20:11 tmp
drwxr-xr-x   12 root     root         4.0K Aug 18 00:07 usr
drwxr-xr-x   13 root     root         4.0K Aug 17 17:37 var

Нека обърнем внимание на още един факт. В ls(1), както и в повечето Debian команди може да комбинирате параметри и да ги подавате заедно към командата, за която се отнасят. Например, вместо "ls -l -h" можехме да напишем "ls -lh".

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

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

Преди това, нека споменем и още една команда, с аналогични функции на ls(1). Това е командата dir(1). Когато говорим за системата за помощ на Debian ще разберете как да получите повече информация за нея (ако разбира се ви интересува). Така или иначе, ls(1) и dir(1) вършат едно и също, въпреки че имат някои разлики. По-голямата част от потребителите на Debian, които познавам се придържат твърдо към ls(1). Както и аз самият. Моят личен е избор е продиктуван от две неща :

  1. свикнал съм с ls, защото в първия Linux който ползвах нямше dir
  2. dir изгражда лошия навик да се стряскам когато по инерция в DOS конзола напиша "dir -la" и видя празна диркетория.



George Danchev 2004-12-25