Основы Linux От Основателя Gentoo. Часть 1 (2/4): Управление Файлами И Каталогами

Продолжение перевода первой части руководства.

Начинать здесь .

В этом отрывке рассматриваются команды для работы с файловой системой и файлами, такие как ls, mkdir, touch, mv, cp, а также использование echo и cat. Говорили об инодах файловой системы.



Использование команд Linux



Введение в лс

Теперь мы быстро рассмотрим команду ls. Скорее всего, вы уже хорошо знакомы с этой командой и знаете, что набрав ls вы получите список содержимого текущего рабочего каталога:
  
  
  
  
  
  
  


$ cd /usr $ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src

Указав опцию -a, вы сможете увидеть полный список, включая скрытые файлы и каталоги, начинающиеся с «.

».

Как вы можете видеть в следующем примере, ls -a также перечисляет специальные каталоги ссылок ".

" И ".

":

$ ls -a .

bin gentoo-x86 include libexec portage share tmp .

distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl



Расширенные списки каталогов

Вы также можете указать один или несколько каталогов или файлов в командной строке с помощью ls. Если вы укажете файл, ls покажет вам только этот файл.

А если указать каталог, то ls отобразит его содержимое.

Опция -l очень полезна, когда вам нужно просмотреть разрешения, владельца, время последнего изменения и размер в списке содержимого каталога.

В следующем примере мы использовали опцию -l для отображения содержимого моего каталога.

/usr :

$ ls -l /usr drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6 drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86 drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 root root 5992 Dec 24 22:30 include lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec drwxr-xr-x 8 root root 240 Dec 22 20:57 local lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86/ drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin drwxr-xr-x 46 root root 1144 Dec 24 15:32 share drwxr-xr-x 8 root root 328 Dec 26 00:07 src drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> .

/var/tmp

В первом столбце отображается информация о разрешениях для каждого элемента.

Чуть позже я объясню, как это интерпретировать.

В следующем столбце указано количество ссылок на каждый элемент файловой системы, к этому мы вернемся позже.

Третий и четвертый столбцы представляют собой список владельцев и групп соответственно.

Пятый столбец — размер объекта.

Шестое — время последнего изменения (mtime) объекта.

И, наконец, последний столбец с названиями объектов.

Если файлы являются символическими ссылками, вы увидите стрелку -> и путь, на который указывает символическая ссылка.



Глядя на каталоги

Иногда вам захочется просмотреть каталог, а не внутри него.

В этом случае вы можете указать опцию -d, которая укажет ls рассматривать любой каталог как внутренний:

$ ls -dl /usr /usr/bin /usr/X11R6/bin .

/share drwxr-xr-x 4 root root 96 Dec 18 18:17 .

/share drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin



Рекурсивные и индексные списки

Таким образом, вы можете использовать -d для просмотра каталога, но вы также можете использовать -R, чтобы сделать обратное: не только просмотреть каталог, но и рекурсивно просмотреть все каталоги с файлами внутри него! Мы не будем включать в руководство примеры вывода для этой опции (поскольку они обычно очень длинные), но вы можете попробовать несколько команд ls -R и ls -Rl, чтобы понять, как это работает. Наконец, опцию -i можно использовать для отображения номеров индексных дескрипторов объектов в списке файловой системы:

$ ls -i /usr 1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp



Концепция индексного дескриптора

Каждому объекту файловой системы присваивается уникальный индекс, называемый номером индексного дескриптора.

Это может показаться тривиальным, но концепция индексных дескрипторов очень важна для понимания большинства операций файловой системы.

Рассмотрим, например, ссылки ".

" и «.

», которые появляются в каждом каталоге.

Чтобы полностью понять, что на самом деле представляет собой каталог «.

», мы сначала посмотрим на номер индексного дескриптора /usr/локальный :

$ ls -id /usr/local 5120 /usr/local

В каталоге /usr/локальный номер инода — 5120. Теперь посмотрим на номер инода /usr/локальный/bin/.

:

$ ls -id /usr/local/bin/.

5120 /usr/local/bin/.



Как видите, каталог /usr/локальный/bin/.

имеет тот же номер, что и /usr/локальный ! Давайте посмотрим, как нам справиться с этим шокирующим откровением.

Раньше мы верили, что /usr/локальный сам по себе является каталогом.

Теперь мы обнаружили, что каталог на самом деле имеет индексный дескриптор 5120, и мы нашли как минимум два элемента (называемых «ссылками»), которые указывают на этот индексный дескриптор.

И /usr/локальный , И /usr/локальный/bin/.

— ссылки на 5120-й инод. Хотя этот индексный дескриптор существует только в одном месте на диске, на него все равно может быть много ссылок.

Фактически, мы даже можем увидеть общее количество ссылок, ведущих к этому индексу 5120, с помощью команды ls -dl:

$ ls -dl /usr/local drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local

Если вы посмотрите на второй столбец слева, то увидите, что каталог /usr/локальный (инод 5120) упоминается восемь раз.

В моей системе к этому индексному дескриптору ведут следующие пути:

/usr/local /usr/local/.

/usr/local/bin/.

/usr/local/games/.

/usr/local/lib/.

/usr/local/sbin/.

/usr/local/share/.

/usr/local/src/.





мкдир

Давайте быстро пройдемся по команде mkdir, которая используется для создания новых каталогов.

В следующем примере создаются три новых каталога: тик , такт , И палец на ноге , все внутри /tmp :

$ cd /tmp $ mkdir tic tac toe

По умолчанию команда mkdir не создает для вас родительские каталоги; должен существовать весь путь до последнего (созданного) элемента.

Итак, если вы хотите создавать вложенные каталоги замечательный , вам придется запустить три отдельные команды mkdir:

$ mkdir won/der/ful mkdir: cannot create directory `won/der/ful': No such file or directory $ mkdir won $ mkdir won/der $ mkdir won/der/ful

Однако у mkdir есть очень удобная опция -p, которая указывает mkdir создать недостающие родительские каталоги, как вы можете видеть здесь:

$ mkdir -p easy/as/pie

В целом очень просто.

Чтобы узнать больше о команде mkdir, введите man mkdir и прочитайте инструкции.

То же самое относится почти ко всем обсуждаемым здесь командам (например, man ls), за исключением cd, встроенного в bash.

трогать

Теперь мы рассмотрим команды cp и mv, которые используются для копирования, переименования и перемещения файлов и каталогов.

Но давайте начнем обзор с использования сенсорной команды для создания файла в /tmp :

$ cd /tmp $ touch copyme

Команда touch обновляет «mtime» файла, если он существует (помните шестой столбец в выводе ls -l).

Если файл не существует, будет создан новый пустой файл.

Теперь у вас должен быть файл /tmp/копировать меня с нулевым размером.



эхо

Теперь, когда файл существует, давайте добавим в него некоторые данные.

Вы можете сделать это с помощью команды echo, которая принимает аргументы и выводит их на стандартный вывод. Во-первых, сама команда echo:

$ echo "firstfile" firstfile

А теперь та же команда echo, но с перенаправлением вывода:

$ echo "firstfile" > copyme

Знак «больше» указывает оболочке записать вывод echo в файл с именем копируй .

Этот файл будет создан, если он не существовал, или перезаписан, если он существует. Набрав ls -l, мы видим, что размер файла copyme составляет 10 байт, поскольку он содержит слово firstfile и символ новой строки:

$ ls -l copyme -rw-r--r-- 1 root root 10 Dec 28 14:13 copyme



кот и КП

Чтобы вывести содержимое файла на терминал, используйте команду cat:

$ cat copyme firstfile

Теперь мы можем использовать основной вызов команды cp для создания файла.

скопировал меня из оригинала копируй :

$ cp copyme copiedme

Ниже мы проверим, что это действительно разные файлы; у них разные номера индексных дескрипторов:

$ ls -i copyme copiedme 648284 copiedme 650704 copyme



МВ

Теперь давайте воспользуемся командой mv для переименования скопировал меня В тронул меня .

Номер индексного дескриптора останется прежним; однако имя файла, указывающее на индексный дескриптор, изменится.



$ mv copiedme movedme $ ls -i movedme 648284 movedme

Номер индексного дескриптора перемещаемого файла остается неизменным, пока целевой файл находится в той же файловой системе, что и исходный файл.

Мы подробнее рассмотрим файловую систему в третьей части нашего руководства.

Раз уж мы заговорили о mv, давайте посмотрим, как еще можно использовать эту команду.

mv, помимо возможности переименовывать файлы, позволяет перемещать один или несколько файлов в другое место в иерархии каталогов.

Например, чтобы переместить /var/tmp/myfile.txt в каталог /дома/дробинс (это мой дом), я наберу (а можно ~ - прим.

пер):

$ mv /var/tmp/myfile.txt /home/drobbins

После этого мойфайл.

txt будет перенесен в /home/drobbins/myfile.txt .

И если /дома/дробинс находится в другой файловой системе, чем /вар/тмп , команда mv скопирует мойфайл.

txt в новую файловую систему и удалите ее из старой.

Как вы могли догадаться, когда мойфайл.

txt перемещается между файловыми системами, затем мойфайл.

txt в новом месте получает новый номер индексного дескриптора.

Это все потому, что каждая файловая система имеет свой собственный независимый набор номеров индексных дескрипторов.

Мы также можем использовать mv для перемещения нескольких файлов в один каталог.

Например, чтобы переместить мойфайл1.txt И моя статья3.txt В /дома/дробинс , вам нужно будет ввести:

$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins

Продолжение.






Об авторах



Дэниел Роббинс

Дэниел Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниел проживает в Нью-Мексико со своей женой Мэри и двумя энергичными дочерьми.

Он также является основателем и главой Funtoo написал множество технических статей для IBM DeveloperWorks , Службы разработчиков Intel и журнал пользователей C/C++.



Крис Хаузер

Крис Хаузер является сторонником UNIX с 1994 года, когда он присоединился к административной команде Университета Тейлора (Индиана, США), где получил степень бакалавра в области компьютерных наук и математики.

С тех пор он работал в различных областях, включая веб-приложения, редактирование видео, драйверы UNIX и криптографическую безопасность.

В настоящее время работает в Sentry Data Systems. Крис также участвовал во многих бесплатных проектах, таких как Gentoo Linux и Clojure, и был соавтором книги.

Радость Clojure .



Арон Гриффис

Айрон Гриффис живет в Бостоне, где последние десять лет он работал в Hewlett-Packard над такими проектами, как сетевые драйверы UNIX для Tru64, сертификация безопасности Linux, виртуализация Xen и KVM, а в последнее время — над платформой.

HP ePrint .

Когда он не занимается программированием, Айрон любит думать о проблемах программирования, катаясь на велосипеде, жонглируя битами или болеея за профессиональную бейсбольную команду Boston Red Sox. Теги: #linux #консоль #настройка Linux #bash #cp #mv #основы #начинающие #touch #ls #для чайников #inode #mkdir #inodes

Вместе с данным постом часто просматривают: