Текущее положение в файловой системе можно просмотреть командой
Продолжение перевода первой части руководства. Начало тут.
В данном отрывке рассмотрены команды работы с файловой системой и файлами, такие как ls, mkdir, touch, mv, cp, затронуто использование echo и cat. Рассказано про иноды файловой системы.
Использование команд Linux
Общий обзор структуры файловой системы Linux
Первое, что вам нужно знать при просмотре файловой системы Linux, – это то, что файловая система содержится в одном дереве независимо от того, сколько подключено устройств.
Это означает, что в основной файловой системе представлены все компоненты, доступные в операционной системе. Если вы используете Windows в качестве основной операционной системы, для вас это будет непривычно. В Windows каждый жесткий диск или пространство для хранения представлены в виде собственной файловой системы, которая обозначается буквенно (C: является стандартным каталогом верхнего уровня иерархии системных файлов, а дополнительные диски или пространства хранения получают другие буквенные обозначения).
В Linux каждый файл или устройство в системе находится в корневом каталоге, который отмечен символом /.
Таким образом, чтобы перейти в каталог верхнего уровня всей операционной системы и посмотреть, что там есть, можно ввести:
cd /
ls
bin etc lib mnt root selinux tmp vmlinuz
boot home lost+found opt run srv usr
dev initrd.img media proc sbin sys var
Каждый файл, устройство, каталог или приложение находится в этом каталоге. Здесь вы можете увидеть начало остальной структуры каталогов. Ниже мы рассмотрим эти каталоги подробнее.
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Требования
Поскольку данное руководство учит основам работы с командной строкой, оно не предполагает глубоких предварительных знаний. Тем не менее, для выполнения описанных дествий необходимо иметь доступ к VPS. Текущие параметры во многом зависят от используемой операционной системы.
Необходимые для входа на новый сервер пароль и IP-адрес будут получены по электронной почте.
ssh root@ IP_адрес
Войти на сервер можно также через консоль, используя клавишу «Console Access». Это создаст виртуальную терминальную сессию непосредственно в окне веб-браузера.
Для выполнения данного руководства входить в систему как root не обязательно.
Команды rm и rmdir: удаление файлов и каталогов
Команда rm удаляет файлы.
Примечание: Будьте предельно внимательны при работе с rm. Система не может отменить её действия, потому вы можете навсегда утратить важные данные.
Чтобы удалить обычный файл, просто укажите его имя:
Команда rmdir удаляет пустые каталоги. На будет выполнена только тогда, когда указанный в ней каталог пуст. Например, чтобы удалить каталог example, можно ввести:
Чтобы удалить каталог, в котором находятся какие-либо элементы, нужно использовать команду rm с опцией –r, которая удалит все содержимое каталога, а затем и сам каталог.
К примеру, чтобы удалить каталог again, нужно ввести:
Каталог /proc
/proc на самом деле больше, чем обычный каталог. В этом каталоге фактически установлена псевдо-файловая система. Файловая система proc не содержит реальных файлов, но динамически генерируется для отражения внутреннего состояния ядра Linux.
Это означает, что вы можете проверять и изменять различные данные из самого ядра в реальном времени. Например, вы можете получить подробную информацию об использовании памяти с помощью команды:
Просмотр файлов системы
Команда pwd показывает текущий каталог. Но как же узнать, что находится в текущем каталоге?
Чтобы просмотреть файлы и каталоги, находящиеся в текущем каталоге, нужно использовать команду ls:
Иногда эта команда возвращает пользователя в командную строку, не выведя никакого результата. Но это не значит, что она была выполнена неверно – просто текущий каталог пуст, и никаких файлов или каталогов в нем нет.
Чтобы увидеть поведение команды ls в случае обнаружения файлов или каталогов, создайте несколько тестовых файлов. Для создания новых файлов введите:
Это действие создаст в текущем каталоге 5 файлов с названием file1, …, file5.
Снова введите команду ls:
ls
file1 file2 file3 file4 file5
Теперь команда обнаружила файлы, которые находятся в текущем каталоге.
Большинству команд задано поведение по умолчанию – действие, которое запускается на выполнение при вводе команды без аргументов. Но поведение большей части команд можно расширить, задав им дополнительные аргументы (также они называются опциями, флагами или параметрами).
Иногда они активируют дополнительные функции команды, иногда указывают объект, на который нужно выполнить команду.
Каталог /boot
Этот каталог хранит файлы, изображения и ядра, необходимые для загрузки системы. В то время как каталог /bin содержит базовые компоненты, /boot содержит основные утилиты, которые фактически позволяют системе загружаться.
Здесь вы найдете текущие файлы ядра.
Знакомство с ls
А сейчас, мы быстренько пройдемся по команде ls. Скорее всего вы уже хорошо знакомы с этой командой, и знаете, что набрав ls получите список содержимого текущей рабочей директории:
Указав опцию -a, вы можете увидеть полный список, включая скрытые файлы и директории, начинающиеся с ".". Как видно в следующем примере, ls -a выводит также особые связывающие директории "." и "..":
Заключение
Конечно, каждый дистрибутив имеет свои нюансы, но в общем цели всех перечисленных каталогов будут везде одинаковыми.
Попробуйте поработать с файловой системой самостоятельно – переместите пару каталогов, выясните, для чего нужны те или иные файлы.
Со временем вы начнете связывать разные каталоги с различными функциями и догадываться, куда идти для решения конкретной задачи. Если вам нужна краткая справка по какому-либо каталогу, вы можете использовать мануал:
Пользователи Linux, у которых нет большого опыта работы с подобными системами, сталкиваются с трудностями при управлении операционной системой из командной строки. В этой статье мы попытаемся помочь вам разобраться с основами навигации и управления файлами в дистрибутивах Linux.
К сожалению, одно руководство может охватить все, что вам нужно знать для работы с Linux. Тем не менее, здесь вы найдёте всю необходимую информацию для получения базовых навыков.
Понятие инода
Каждому объекту файловой системы назначен уникальный индекс, называемый номером инода. Это может показаться банальным, но понятие инодов очень важно для понимания большинства операций в файловой системе. Рассмотрим например ссылки "." и "..", которые появляются в каждой директории. Чтобы полностью понять, чем на самом деле является директория "..", мы сперва взглянем на номер инода у /usr/local:
$ ls -id /usr/local
5120 /usr/local
У директории /usr/local номер инода равен 5120. А теперь посмотрим номер инода у /usr/local/bin/..:
$ ls -id /usr/local/bin/..
5120 /usr/local/bin/..
На самом деле, мы даже можем увидеть общее количество ссылок ведущих на этот, 5120 инод, используя команду ls -dl:
Если взглянуть на вторую колонку слева, то видно, что на директорию /usr/local (инод 5120) ссылаются восемь раз. На моей системе на этот инод ведут следующие пути:
/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..
Краткая история развития файловой системы Linux
Linux наследует многие принципы организации файловой системы от Unix. Еще в 1979 году Unix установила стандарты для контроля того, как совместимые системы будут организовывать свои файлы.
Стандарт иерархии файловых систем Linux (Filesystem Hierarchy Standard, сокращенно FHS) – это базовый стандарт, поддерживаемый Linux Foundation, он определяет организационную структуру, которую должны поддерживать дистрибутивы Linux для операционной совместимости, простоты администрирования и обеспечения надежной работы межсетевых приложений.
При использовании этих систем важно отметить, что практически все Linux реализует через файлы: текстовый файл – это файл, каталог – это тоже файл (просто список других файлов), принтер представлен файлом (драйверы устройства могут отправлять все, что записано в файл принтера, на физический принтер) и т.д.
Конечно, не всегда все так просто, но такой пример позволяет продемонстрировать подход, который выбрали разработчики системы – это передача текста и байтов и возможность применять аналогичные стратегии для редактирования и доступа к различным компонентам.
В этой статье мы не будем точно следовать спецификации, потому что дистрибутивы часто отклоняются от реального стандарта. Вместо этого мы рассмотрим фактическую структуру каталогов сервера Ubuntu,. Это намного более полезно.
Каталог /run
Этот каталог предназначен для того, чтобы операционная система записывала информацию о времени выполнения на ранних этапах загрузки. В общем, большая часть информации в этом каталоге вам не понадобится.
Использование ls на другие каталоги
По умолчанию ls выводит содержимое текущего каталога. Но таким же способом можно просмотреть содержимое любого каталога, указав его имя после команды (подобно флагам).
К примеру, просмотреть содержимое каталога /etc, существующего во всех системах Linux, можно, набрав:
ls /etc
acpi fstab magic rc.local
adduser.conf fstab.d magic.mime rc.local.orig
aliases fuse.conf mailcap rcS.d
aliases.db gai.conf mailcap.order reportbug.conf
alternatives groff mailname resolvconf
anacrontab group mail.rc resolv.conf
apm group- manpath.config rmt
. . .
Как видно, в данном каталоге достаточно много файлов.
Любой путь к каталогу, который начинается с косой черты (/), называется абсолютным (или полным), поскольку он ссылается на путь к каталогу из самого «высокого» в данной иерархии каталога, root, на что указывает слеш.
Еще один способ сослаться на каталог – использовать его относительный путь. Он представляет собой путь по отношению к текущему каталогу и нен ачинается со слеша.
Поскольку в текущем каталоге явных каталогов нет, для выполнения следующего действия нужно создать несколько каталогов и добавить в них файлы. Для этого просто наберите следующие команды как в примере ниже:
mkdir dir
touch dir/test
Это создаст несколько каталогов с файлами. Чтобы ппросмотреть их, используйте команду ls без аргументов:
ls
dir1 dir2 dir3 file1 file2 file3 file4 file5
Чтобы просмотреть содержимое каталога dir1, можно использовать абсолютный путь, как было показано выше. Чтобы узнать текущий каталог:
Затем введите имя каталога в конце строки:
ls /root/dir1
testA testB testC
Но проделывать данную операцию каждый раз необязательно, так как можно просто указать имя текущего каталога, чтобы сослаться на него:
ls dir1
testA testB testC
Если путь не начинается со слеша, операционная система ищет путь к каталогу, начиная с текущего каталога.
2: Просмотр файлов
В предыдущем разделе вы научились перемещаться по файловой системе. При этом вы могли обратить внимание на файлы, которые хранятся в разных каталогах. В этом разделе вы научитесь работать с файлами. В отличие от некоторых других операционных систем, Linux и другие Unix-подобные операционные системы во многом зависят от обычных текстовых файлов.
Основной способ просмотра файлов – это команда less (также она называется программой постраничного вывода). Все предыдущие команды выполнялись сразу и возвращали вас в командную строку, но приложение less будет продолжать работу и занимать экран, пока вы не остановите его.
Откройте /etc/services (этот конфигурационный файл хранит данные о сервисах системы).
Команда less откроет файл. Вы увидите отрывок документа, который помещается в окно терминала.
Для прокрутки можно использовать клавиши со стрелками вверх и вниз на клавиатуре. Чтобы вывести на экран следующий отрывок файла, вы можете использовать пробел, кнопку Page Down или сочетание клавиш CTRL-f.
Чтобы вернуться к предыдущему экрану, нажмите Page Up или CTRL-b.
Чтобы найти в документе какой-либо текст, введите слеш, после которого укажите искомое слово. Например, чтобы найти «mail», нужно ввести:
Команда выполнит поиск по файлу и остановится на первом найденном слове, которое соответствует запросу. Чтобы перейти к следующему слову, введите n в нижнем регистре:
Чтобы вернуться к предыдущему результату, нужно ввести N в верхнем регистре:
Чтобы закрыть less, введите:
Кроме less существует ещё много других способов просмотра файлов. Команда cat отображает содержимое файла и немедленно возвращает вас в командную строку. Команда head по умолчанию показывает первые 10 строк файла. Аналогично, команда tail выводит последние 10 строк. Такой вывод удобно использовать в конвейеризации данных для других команд.
Примечание: Ознакомьтесь с работой вышеперечисленных команд самостоятельно (можно на примере файла /etc/services).
Команда cd: перемещение по файловой системе
В предыдущем разделе вы уже дважды переходили в другой каталог с помощью команды cd. Теперь мы рассмотрим эту команды подробнее.
Для начала вернитесь в каталог /usr/share.
В этом примере для перехода в каталог используется абсолютный путь. В Linux каждый файл и каталог относится к каталогу высшего уровня, который называется корневым каталогом (или root). Ссылаться на него можно с помощью одного слеша «/». Абсолютный путь указывает расположение каталога по отношению к корневому каталогу. Это позволяет однозначно ссылаться на каталоги из любого места файловой системы. Каждый абсолютный путь должен начинаться со слеша.
Альтернативой является относительный путь. Относительные пути определяют место каталога относительно текущего каталога. Если каталог находится близко к текущему каталогу в иерархии, путь будет проще и короче. На любой каталог в текущем каталоге можно ссылаться по имени и без слеша. Например, чтобы перейти в каталог locale в /usr/share из текущего местоположения, можно ввести:
Аналогичным образом с помощью относительного пути можно убрать несколько уровней каталогов, предоставляя только ту часть пути, которая идет после пути текущего каталога. К примеру, чтобы перейти в каталог LC_MESSAGES внутри каталога en, можно ввести:
Чтобы вернуться к родительскому каталогу текущего каталога, используйте две точки (речь об этом уже шла в предыдущем разделе). Например, чтобы из каталога /usr/share/locale/en/LC_MESSAGES перейти к каталогу предыдущего уровня, можно ввести:
Команда переведёт вас в каталог /usr/share/locale/en.
Команда cd без аргументов всегда будет возвращать вас в ваш домашний каталог:
Каталог /media
Этот каталог обычно пуст при загрузке. Его реальная цель – предоставить место для установки съемных носителей. В серверной среде этот каталог в большинстве случаев не будет использоваться. Но если в вашей операционной системе Linux когда-либо будет монтироваться мультимедийный диск, и вы не знаете, где он находится, обязательно проверьте этот каталог.
Развернутые списки директорий
Вы также можете задать одну и более директорий или файлов в командной строке с ls. Если вы укажите файл, то ls покажет вам только этот файл. А если зададите директорию, то ls выдаст ее содержимое. Опция -l очень удобна, когда необходимо посмотреть права доступа, владельца, время последнего изменения и размер в списке содержимого директории.
В следующем примере мы использовали опцию -l чтобы отобразить содержимое моей директории /usr:
Первая колонка показывает информацию о правах доступа для каждого элемента. Чуть позже я объясню, как её интерпретировать. Следующая колонка содержит числа ссылок на каждый элемент файловой системы, позже мы вернемся к этому. Третья и четвертая колонки — это список владельцев и групп, соответственно. Пятая колонка — размер объекта. Шестая — время последнего изменения (mtime) объекта. И наконец, последняя колонка с именами объектов. Если файлы являются символическими ссылками, то вы увидите стрелку -> и путь, куда указывает эта символическая ссылка.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Если вы новичок в Linux и Unix-подобных операционных системах, основные способы взаимодействия с операционной системой и навигации по ней могут показаться вам сложными и запутанными. Также сначала не совсем понятно, как структурирована файловая система.
Данная статья поможет разобраться с основными аспектами стандартной файловой системы Linux, ознакомит с некоторыми из наиболее интересных каталогов и подскажет, где искать важные компоненты в серверной среде.
Об авторах
Каталог /root
Это домашний каталог администратора (это пользователь root). Он функционирует точно так же, как и обычные домашние каталоги.
1: Навигация и просмотр системы
Перемещение по файловой системе и просмотр данных – одни из самых базовых навыков, которыми должен обладать пользователь Linux.
cat и cp
Чтобы вывести содержимое файла на терминал, используйте команду cat:
$ cat copyme
firstfile
Сейчас, мы можем воспользоваться основным вызовом команды cp для создания файла copiedme из оригинального copyme:
$ cp copyme copiedme
Ниже проверим, что это действительно разные файлы; у них отличаются номера инодов:
А сейчас давайте воспользуемся командой mv для переименования copiedme в movedme. Номер иноды останется прежний; однако, имя файла, указывающее на инод, изменится.
Номер инода у перемещаемого файла остается прежним до тех пор, пока файл назначения находится в той же файловой системе, что и исходный файл. Мы подробнее рассмотрим файловую систему в третьей части нашего руководства.
Пока мы рассказываем об mv, давайте посмотрим, как еще можно использовать эту команду. mv, помимо возможности переименовать файлы, позволяет перемещать один или более файлов в другое место в иерархии директорий. Например, чтобы переместить /var/tmp/myfile.txt в директорию /home/drobbins (которая является моей домашней), я наберу (а мог бы воспользоваться ~ — прим. пер.):
$ mv /var/tmp/myfile.txt /home/drobbins
После этого myfile.txt будет перемещен в /home/drobbins/myfile.txt. И если /home/drobbins располагается в другой файловой системе, нежели /var/tmp, команда mv скопирует myfile.txt в новую файловую систему и удалит его из старой. Как вы уже могли догадаться, когда myfile.txt перемещается между файловыми системами, то myfile.txt на новом месте получает новый номер инода. Это все потому, что у каждой файловой системы свой независимый набор номеров инодов.
Мы также можем воспользоваться mv для перемещения нескольких файлов в одну директорию. К примеру, чтобы переместить myfile1.txt и myarticle3.txt в /home/drobbins, потребуется набрать:
$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins
Каталог /tmp
Этот каталог используется для хранения временных файлов в системе. Он доступен для записи любому пользователю на компьютере и не сохраняется при перезагрузке. Это означает, что все файлы, которые вам нужны только для временной работы, можно поместить здесь. Они будут автоматически удалены, как только система выключится.
Каталог /selinux
В этом каталоге содержится информация о безопасности Linux. Это модуль ядра, который используется для обеспечения контроля доступа к операционной системе. По большей части вы можете игнорировать этот каталог.
Простая навигация
Прежде чем приступить к работе со структурой файловой системы, нужно ознакомиться с базовой навигацией по файловой системе.
Для начала нужно понимать, в какой точке системы вы находитесь. Существует несколько способов узнать это. Один из простейших – команда pwd:
Она просто выводит текущий каталог.
Затем нужно осмотреться вокруг и узнать, какие файлы находятся в текущем каталоге. Для этого существует команда ls:
ls
bin etc lib mnt root selinux tmp vmlinuz
boot home lost+found opt run srv usr
dev initrd.img media proc sbin sys var
Эта команда выводит файлы и каталоги, которые вы можете найти в текущем каталоге.
Команда ls принимает дополнительные флаги. Флаги изменяют стандартное поведение команды или отображают данные другим способом.
К примеру, чтобы было легче различать файлы и каталоги, вы можете отобразить символ / после имени каталога с помощью флага –F.
ls -F
bin/ home/ media/ root/ srv/ var/
boot/ initrd.img@ mnt/ run/ sys/ vmlinuz@
dev/ lib/ opt/ sbin/ tmp/
etc/ lost+found/ proc/ selinux/ usr/
Наиболее популярными являются флаги -l и –a. Первый выводит расширенный результат:
ls -l
total 76
drwxr-xr-x 2 root root 4096 Apr 26 2012 bin
drwxr-xr-x 3 root root 4096 Apr 26 2012 boot
drwxr-xr-x 13 root root 3900 Dec 4 18:03 dev
drwxr-xr-x 78 root root 4096 Dec 4 19:29 etc
drwxr-xr-x 3 root root 4096 Dec 4 19:28 home
lrwxrwxrwx 1 root root 33 Apr 26 2012 initrd.img -> /boot/initrd.img-3.2.0-24-virtual
drwxr-xr-x 16 root root 4096 Apr 26 2012 lib
. . .
Это создает вывод, где каждый файл или каталог помещен в отдельную строку (имя находится справа). Здесь есть много информации, которая сейчас вам не понадобится. В первую очередь сейчас важен самый первый символ – он указывает на тип файла. Три наиболее распространенных типа:
- -: обычный файл.
- d: каталог (файл определенного формата, в котором перечислены другие файлы).
- l: жесткая или гибкая ссылка (в основном это ярлык для другого файла в системе).
Флаг –а выводит все файлы, включая скрытые. Linux автоматически скрывает файлы, чье имя начинается с точки.
ls -a
. .. .bash_logout .bashrc .profile
В этом примере все файлы скрыты. Первые две записи (. и ..) очень важны. Каталог . – это сокращение, которое означает текущий каталог. Каталог .. – это сокращение, которое означает родительский каталог текущего каталога.
Чтобы перейти в другой каталог, используйте команду cd :
Вы можете указать в команде абсолютный или относительный путь.
Абсолютным путем является путь к файлу, определяющий расположение каталога в верхней части дерева каталогов. Абсолютные пути начинаются с «/», как вы видите выше.
Относительный путь – это путь к файлу, который относится к текущему рабочему каталогу. То есть, вместо того чтобы определять местоположение файла относительно верхушки структуры каталога, вы можете определить его по отношению к тому, где вы находитесь сейчас.
Например, чтобы перейти в каталог, который находится в текущем каталоге и называется documents, нужно выполнить эту команду:
Если перед именем каталога нет символа /, команда использует текущий каталог как отправную точку поиска пути.
Тут будут полезны сокращения, о которых говорилось выше: чтобы перейти в родительский каталог текущего каталога, достаточно ввести:
Опции ls
Встроенную функцию справки имеют далеко не все команды. В большинстве случаев ее можно вызвать, добавив флаги –help или -h в конце команды. Попробуйте вызвать справку при помощи ls:
ls --help
Usage: ls [OPTION]. [FILE].
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print C-style escapes for nongraphic characters
--block-size=SIZE scale sizes by SIZE before printing them. E.g.,
. . .
Это действие выводит некоторые рекомендации по правильному использованию команды и список опций, доступных для изменения поведения команды по умолчанию. В столбце слева представлены символы для расширения команды, а в столбце справа описан каждый флаг.
Использование флага –help – отличный пример работы аргументов.
Также узнать о параметрах, доступных для определенной команды, можно из руководства. Чтобы открыть руководство, введите команду man, а после нее укажите команду, аргументы которой нужно найти. Например:
Для прокрутки страницы используйте клавиши со стрелками: чтобы покинуть руководство, введите «q».
Как видите, команда ls имеет немало опций, меняющих и расширяющих ее действия. Например:
ls -l
-rw-r--r-- 1 root root 0 Feb 28 19:45 file1
-rw-r--r-- 1 root root 0 Feb 28 19:45 file2
-rw-r--r-- 1 root root 0 Feb 28 19:45 file3
-rw-r--r-- 1 root root 0 Feb 28 19:45 file4
-rw-r--r-- 1 root root 0 Feb 28 19:45 file5
Данное действие показывает нам те же пять тестовых файлов, но в длинном формате. Так можно получить больше информации о файлах: узнать владельца файла (первый столбец со значением «root»), группу файла (второй столбец со значением «root»), его размер (0), дату его последнего изменения, и т.д.
Теперь используйте другую опцию команды:
ls -a
. .aptitude .bashrc file2 file4 .profile .ssh
.. .bash_history file1 file3 file5 .rnd .viminfo
Данный результат показывает несколько файлов, которые ранее выведены не были. Флаг –a является синонимом флага –all. Он показывает все файлы текущего каталога, в том числе скрытые.
В системе Linux все файлы, имя которых начинается с символа точки, являются скрытыми по умолчанию. Данные файлы не засекречены, и любой может найти их; они скрыты для более удобного управления файлами. С помощью флага –a команда ls выводит эти файлы.
Также можно использовать сразу несколько флагов, указав их последовательно:
ls -l -a
drwx------ 4 root root 4096 Feb 28 19:45 .
drwxr-xr-x 23 root root 4096 May 3 2013 ..
drwx------ 2 root root 4096 Feb 28 17:19 .aptitude
-rw------- 1 root root 2036 Feb 28 18:20 .bash_history
-rw-r--r-- 1 root root 570 Jan 31 2010 .bashrc
-rw-r--r-- 1 root root 0 Feb 28 19:45 file1
. . .
Можно также «свернуть» флаги в один флаг:
Это работает точно таким же образом, при этом занимая меньше времени на набор.
Ещё одна полезная опция – флаг –R, который перечисляет файлы рекурсивно. Поскольку все каталоги, находящиеся в текущем каталоге, скрыты, нужно также использовать флаг –a:
ls -Ra
.:
. .aptitude .bashrc file2 file4 .profile .ssh
.. .bash_history file1 file3 file5 .rnd .viminfo
./.aptitude:
. .. cache config
./.ssh:
. .. authorized_keys
Теперь, ознакомившись со способами изменения действий команды ls, попробуйте изменить объект ее действия.
Каталог /etc
Это одна из точек файловой системы, где вы будете проводит много времени, если работаете системным администратором. Этот каталог в основном хранит конфигурации для различных общесистемных сервисов.
По умолчанию этот каталог содержит много файлов и подкаталогов. Он содержит файлы конфигурации для большинства задач в системе, независимо от их функции. Если приложению нужно несколько конфигурационных файлов, для него создается подкаталог. Если вы хотите настроить сервис или программу для всей системы, скорее всего, здесь вы найдете необходимый конфигурационный файл.
Рекурсивный и инодный списки
Так вы можете использовать -d чтобы смотреть на директорию, но также можно использовать -R для противоположного: не только лишь глянуть внутрь директории, но и рекурсивно посмотреть все директории с файлами внутри нее! Мы не включим в руководство никакого примера вывода для этой опции (поскольку обычно он очень объемный), но возможно вы захотите попробовать несколько команд ls -R и ls -Rl, чтобы почувствовать как это работает.
Наконец, опция -i может использоваться для отображения номеров инодов для объектов в списке файловой системы:
Требования
- Чтобы следовать данному руководству, нужно иметь доступ к серверу Linux. Узнать, как впервые подключиться к серверу, можно в статье SSH-подключение к серверу.
- Также нужно иметь базовые навыки работы с терминалом и знать основные команды Linux. Больше информации по этой теме вы найдёте в руководстве Основы работы с терминалом Linux.
- Все действия, описанные в этом руководстве, можно выполнить с помощью обычной учетной записи пользователя (не root). Узнать, как настроить такого пользователя, можно в руководствах по начальной настройке сервера (Ubuntu 14.04, CentOS 7).
Для начала подключитесь к серверу Linux по SSH.
3: Управление файлами и каталогами
Каталог /sbin
Этот каталог очень похож на каталог /bin, поскольку он содержит программы, которые считаются необходимыми для работы операционной системы. Различие состоит в том, что /sbin содержит команды, доступные только системному администратору, а /bin содержит программы для всех пользователей системы.
Команда touch: создание файла
Многие команды и программы могут создавать файлы. Самый простой метод создания файла – это команда touch. Она создаст пустой файл, используя указанное имя и местоположение.
Для начала убедитесь, что находитесь в домашнем каталоге (здесь у пользователя есть права на сохранение файлов). Затем попробуйте создать файл file1, набрав:
Теперь запросите содержимое каталога, и вы увидите новый файл:
Если указать в команде touch уже существующий файл, команда просто обновит данные, хранящиеся в этом файле с момента последнего изменения (на данный момент эта функция не нужна).
Также команда touch может создавать несколько файлов одновременно и использовать абсолютные пути. Например, если пользователь называется demo, можно ввести:
touch /home/demo/file2 /home/demo/file3
ls
file1 file2 file3
Заключение
Теперь у вас есть общее представление о том, как работает и выглядит сервер Linux.
Знакомство с командной строкой – первый и очень важный шаг на пути к продуктивному использованию мощной серверной платформы Linux. Также это важнейшее условие для выполнения практически всех доступных в данной среде задач, связанных с сервером.
Сегодня для многих инструментов существуют графические альтернативы; но умение использовать командную строку – это дополнительный уровень продуктивности, скорости и гибкости серверной среды, достичь который при помощи большинства графических интерфейсов невозможно.
Данная статья описывает основы перемещения по системе и извлечения всей необходимой информации о ней.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Каталог /var
Этот каталог должен содержать переменные данные. На практике это означает, что он используется для хранения информации или каталогов, которые будут расти по мере использования системы.
Например, здесь хранятся системные логи и резервные копии. Также в этом каталоге хранится контент, обслуживаемый веб-сервером.
Каталог /dev
В этом каталоге хранятся файлы, которые представляют собой устройства в системе. Каждый жесткий диск, терминал, устройство ввода или вывода, доступное в системе, представлено здесь. В зависимости от устройства вы можете работать здесь по-разному.
Каталог /srv
Этот каталог используется для хранения файлов данных для сервисов, предоставляемых компьютером. Этот каталог используется редко, поскольку его функциональность можно реализовать в других точках файловой системы.
4: Редактирование файлов
Теперь вы можете управлять файлами и каталогами сервера. В этом разделе вы научитесь редактировать содержимое файлов.
Команда nano – один из самых простых текстовых редакторов командной строки Linux. Редактор nano использует less и занимает терминал в течение всего времени работы.
Редактор nano может открыть существующие файлы или создать файл. Если вы хотите создать новый файл, вы можете присвоить ему имя при вызове редактора nano или во время сохранения файла.
Чтобы отредактировать file1, введите:
Приложение nano откроет файл (который на данный момент пуст). Интерфейс выглядит так:
GNU nano 2.2.6 File: file1
[ Read 0 lines ] ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell
Вверху указывается имя приложения и имя редактируемого файла. В центре находится содержимое файла (в данном случае там нет ничего, поскольку файл пуст). В конце перечислены комбинации клавиш для управления редактором (символ ^ везде означает клавишу CTRL).
Чтобы запросить справку в редакторе, введите:
Чтобы закрыть справку, введите:
В редакторе можно вводить или изменять любой текст. Например, можно добавить в файл:
Hello there.
Here is some text.
Чтобы сохранить изменения, нажмите CTRL-O. Программа попросит подтвердить имя файла, который вы хотите сохранить.
File Name to Write: file1
^G Get Help M-D DOS Format M-A Append M-B Backup File
^C Cancel M-M Mac Format M-P Prepend
Как видите, внизу уже указаны другие опции. Редактор выводит их в зависимости от контекста (это означает, что они будут меняться в зависимости от того, что вы пытаетесь сделать). Если вы хотите сохранить изменения в file1, просто нажмите Enter.
Внесите в файл некоторые дополнительные изменения, попробуйте сохранить его и выйти из программы. После этого вы увидите:
Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?
Y Yes
N No ^C Cancel
Чтобы сохранить изменения, введите Y. Чтобы не сохранять, нажмите N. Чтобы не закрывать файл, нажмите CTRL-C. Если вы захотите сохранить изменения, программа предложит снова выбрать имя файла для сохранения. Чтобы сохранить в текущий файл и закрыть редактор, нажмите Enter.
Чтобы просмотреть содержимое файла, используйте cat или less.
less file1
Hello there.
Here is some text.
Another line.
В некоторых системах используется редактор vim или vi. Это более продвинутый и производительный редактор, но с ним сложно работать. Вместо vim или vi всегда можно использовать nano.
Каталог /home
Этот каталог содержит домашние каталоги всех пользователей в системе (кроме административного пользователя, root). При создании других пользователей в этом каталоге обычно создается одноименный каталог.
Каждый пользователь имеет право на запись в своем домашнем каталоге. Как правило, у обычных пользователей есть только право на запись в их собственном домашнем каталоге. Это помогает сохранить файловую систему в чистоте и защищает конфигурации от посторонних пользователей.
В домашнем каталоге часто встречаются скрытые файлы и каталоги (их имена начинаются с точки), которые позволяют настраивать инструменты конкретных пользователей. Установить общесистемные значения по умолчанию можно в каталоге /etc; затем каждый пользователь может переопределить их по мере необходимости в своем домашнем каталоге.
Каталог /usr
Этот каталог является одним из крупнейших каталогов в системе. В основном это набор папок, которые похожи на файлы в корневом каталоге / (типа /usr/bin и /usr/lib). Это место в основном используется для хранения всех несущественных программ, их документации, библиотек и других данных, которые не требуются в базовой среде системы.
Здесь будет храниться большинство файлов в системе. Здесь есть важный подкаталог /usr/local (альтернатива каталогу /opt для хранения локально скомпилированных программ). Еще одна интересная точка – каталог /usr/share, который содержит документацию, файлы конфигурации и другие полезные файлы.
Как выяснить свое местонахождение в системе
После подключения к машине Linux на экране появится что-то вроде:
Это и есть командная строка, в которую нужно вводить команды.
Но это еще не все. На данный момент вы также находитесь в определенном месте в файловой системе сервера. Местонахождение пользователя в файловой иерархии сервера влияет на выполнение введенных команд.
Это похоже на запуск браузера файлов на локальном компьютере. Кликая по разным папкам, можно перемещаться в разные места файловой системы. Открывая меню редактирования браузера файлов, можно установить параметры, которые будут применяться к элементам текущей папки.
Командная строка – текстовое представление тех же действий.
Домашний каталог – это место, где хранятся файлы данного пользователя. Символ «~» – условное обозначение этого каталога.
Другой способ определить свое местонахождение в файловой системе – использовать команду «pwd».
Введите данную команду в терминал и нажмите Enter:
Каталог /root – это домашний каталог root-пользователя (администратора). Если вход в систему был выполнен с помощью другого пользователя, результат будет выглядеть примерно так:
pwd
/home/ имя_пользователя
Как было сказано выше, для выполнения действий данного руководства входить в систему как root не обязательно.
Каталог /opt
Роль этого каталога довольно неоднозначна. Он используется некоторыми дистрибутивами, но игнорируется другими. Как правило, он используется для хранения дополнительных пакетов. В мире Linux это обычно пакеты и приложения, которые не были установлены из репозиториев.
Например, если ваш дистрибутив предоставляет пакеты через диспетчер пакетов, но вы установили одну программу из исходного кода, этот каталог будет хорошим местом для хранения такой программы. Еще один каталог для хранения программного обеспечения такого рода – /usr/local.
mkdir
Давайте быстренько пройдемся по команде mkdir, которая используется для создания новых директорий. Следующий пример создает три новых директории, tic, tac, и toe, все внутри /tmp:
$ cd /tmp
$ mkdir tic tac toe
По умолчанию, команда mkdir не создает для вас родительские директории; весь путь вплоть до последнего (создаваемого) элемента должен существовать. Так, если вы захотите создать вложенные директории won/der/ful, вам придется выполнить три отдельные команды 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.
Смотрим на директории
Иногда вы захотите взглянуть на директорию, а не внутрь нее. В этом случае вы можете указать опцию -d, которая скажет ls рассматривать любую директорию, как внутреннюю:
Каталог /lib
Этот каталог используется для хранения всех общесистемных библиотек, которые нужны каталогам /bin и /sbin. Эти файлы в основном обеспечивают функциональность других программ в системе. Это один из каталогов, к которым вам не придется часто обращаться.
Каталог /lost+found
Это специальный каталог, содержащий файлы, восстановленные /fsck, программой восстановления файловой системы Linux. Если файловая система повреждена и требует восстановления, иногда система может обнаружить файлы, но потерять ссылку на их местоположение. В этом случае система разместит их в этом каталоге.
В большинстве случаев этот каталог остается пустым. Если ваша система была взломана или случилось что-либо подобное, после восстановления всегда полезно проверить этот каталог.
Команда mv: перемещение и переименование файлов и каталогов
Чтобы переместить файл в новое место, используйте mv. К примеру, чтобы переместить файл file1 в каталог test, нужно ввести:
В команде указываются элементы, которые нужно переместить, а затем точка в системе, в которую их нужно переместить. Чтобы вернуть файл в предыдущее место (в домашний каталог), поставьте после пути к файлу точку. Перейдите в домашний каталог и введите:
cd
mv test/file1 .
Команда mv также используется для переименования файлов и каталогов (хотя интуитивно это понять сложно). По сути, перемещение и переименование – это всего лишь настройка местоположения и имени существующего элемента.
Чтобы переименовать каталог test в testing, введите:
mv test testing
Примечание. Важно понимать, что система Linux не предотвращает некоторые разрушительные по отношению к ней действия. Например, если вы переименовываете файл и выбираете уже существующее имя, предыдущий файл будет перезаписан файлом, который вы в него перемещаете. Восстановить предыдущий файл невозможно.
Перемещение по файловой системе
Предыдущие главы руководства рассказывают, как выяснить свое местоположение в файловой системе и как получить некоторые сведения о файлах в определенных каталогах.
Но как изменить рабочий каталог? Изменив рабочий каталог, пользователь получает возможность использовать относительные пути из другого места. Как правило, с файлами легче работать из каталога, в котором они содержатся.
Для перемещения по файловой иерархии используется команда cd, которая расшифровывается как «change directories».
Простейший вариант ее использования:
Данная команда без дополнительной информации перейдет в домашний каталог. Если пользователь уже находится в домашнем каталоге, команда не выполнит никаких действий.
Чаще команда используется следующим образом:
В данном случае фразу /путь/к/каталогу нужно заменить реальным путем к каталогу, в который нужно перейти. К примеру, чтобы перейти в root-каталог, который обозначается слешем (/) и является вершиной иерархии, наберите:
Примечание: root-каталог (/) не является домашним каталогом root-пользователя (/root). Сначала их можно очень легко спутать.
Обратите внимание, командная строка изменилась.
Чтобы убедиться, что текущим теперь является root-каталог файловой системы, используйте команду pwd:
Можно также проверить файлы данного каталога:
ls
bin etc lib media proc sbin sys var
boot home lib64 mnt root selinux tmp vmlinuz
dev initrd.img lost+found opt run srv usr
Теперь попробуйте перейти в другой каталог при помощи относительного пути. Найдите в данном каталоге каталог с именем usr и перейдите в него, введя:
Обратите внимание, с командой cd также можно использовать относительный путь. Как вернуться в root-каталог? Можно использовать уже знакомую команду «cd /», но есть еще один способ сделать это.
Попробуйте подняться вверх по дереву каталогов, используя относительные пути. Как сослаться на каталог, в котором находится текущий каталог, пи помощи относительных путей?
Для этого используется специальный синтаксис. Каталог, содержащий текущий каталог, называется «родительским». Чтобы сослаться на родительский каталог, используются две точки (..).
То есть, чтобы подняться на уровень выше, нужно использовать:
Как видите, root-каталог снова стал текущим. Чтобы просмотреть содержимое текущего каталога, можно использовать символ точки вместо имени:
ls .
bin etc lib media proc sbin sys var
boot home lib64 mnt root selinux tmp vmlinuz
dev initrd.img lost+found opt run srv usr
Это очень полезно в дальнейшей работе с командной строкой, так как позже может возникнуть множество ситуаций, в которых нужно быстро сослаться на текущий каталог.
Как было сказано ранее, символ «~» ссылается на домашний каталог. Используйте его как начало другого пути к каталогу, чтобы перейти к каталогу dir1 домашнего каталога:
cd ~/dir1
pwd
/root/dir1
Итак, используя символ «~» вместо первой части пути, можно без труда перейти в каталог, который находится в текущем каталоге.
Но что, если при переходе произошла ошибка и теперь нужно вернуться в последний каталог? Чтобы перейти назад в предыдущий каталог, введя:
В завершение вернитесь в домашний каталог. Это делается при помощи символа тильды, который используется как путь к каталогу. Но также можно просто использовать команду cd без аргументов, так как ее поведение по умолчанию – возвращать домашний каталог. Это выглядит так:
Как видите, теперь домашний каталог стал текущим.
Каталог /mnt
Этот каталог похож на каталог /media, поскольку он существует только для того, чтобы служить точкой подключения для устройств. Этот каталог обычно используется для монтирования файловых систем, таких как внешние жесткие диски и т. д.
Этот каталог часто используется в среде VPS для установки сетевых дисков. Если у вас в удаленной системе есть файловая система, которую вы хотите установить на свой сервер, этот каталог отлично подходит для этого.
Итоги
Это самые простые инструменты изучения файловой системы, при помощи которых можно быстро перемещаться по системе, отслеживать свое местоположение и просматривать содержимое каталогов.
Каталог /bin
Этот каталог содержит основные команды и программы, которые необходимы для получения минимальной рабочей среды при загрузке. Они хранятся отдельно от других программ в системе, чтобы вы могли поддерживать систему, даже если другие части файловой системы повреждены или недоступны.
В этом каталоге находятся ls и pwd. Команда cd фактически встроена в оболочку (bash), которая также находится в этом каталоге.
Команда mkdir: создание каталогов
Подобно команде touch, команда mkdir позволяет создавать пустые каталоги.
Например, чтобы создать каталог test в домашнем каталоге, нужно ввести:
Чтобы добавить каталог example в каталог test, введите:
Чтобы эта команда сработала, каталог верхнего уровня (в данном случае это test) должен уже существовать в системе. Чтобы команда mkdir создала все каталоги, указанные в пути, используйте опцию –р. Она создаёт вложенные каталоги. К примеру, чтобы создать все каталоги в пути some/other/directories, нужно ввести:
mkdir -p some/other/directories
Команда создаст каталоги some, other и directories в порядке их перечисления.
touch
Сейчас мы собираемся окинуть взглядом команды cp и mv, используемые для копирования, переименования и перемещения файлов и директорий. Но начнем обзор воспользовавшись командой touch, чтобы создать файл в /tmp:
$ cd /tmp
$ touch copyme
Команда touch обновляет «mtime» (время последней модификации — прим. пер.) файла, если тот существует (вспомните шестую колонку в выводе ls -l). Если файл не существует, то новый, пустой файл будет создан. Сейчас у вас должен быть файл /tmp/copyme с нулевым размером.
Теперь, когда файл существует, давайте добавим немного данных в него. Можно сделать это с помощью команды echo, которая принимает аргументы и печатает их на стандартный вывод. Сперва, команда echo сама по себе:
$ echo "firstfile"
firstfile
А сейчас, та же команда echo, но с перенаправлением вывода:
$ echo "firstfile" > copyme
Знак «больше» сообщает оболочке записывать вывод echo в файл по имени copyme. Этот файл будет создан, если не существовал, или перезаписан, если существует. Набрав ls -l, увидим, что файл copyme имеет размер в 10 байт, так как содержит слово firstfile и символ новой строки:
Команда pwd: вывод текущего каталога
Как правило, при входе на сервер вы попадаете в домашний каталог текущего пользователя.
Домашний каталог – это каталог, зарезервированный для хранения файлов и создания каталогов пользователя. Это место в файловой системе, где текущий пользователь имеет полные права.
Чтобы узнать, где находится домашний каталог по отношению к остальной файловой системе, используйте команду pwd. Эта команда отображает каталог, в котором вы сейчас находитесь:
Название домашнего каталога совпадает с именем пользователя, которому он принадлежит (например, в данном случае пользователь называется demo). Этот каталог хранится в каталоге /home, который в свою очередь находится в каталоге высшего уровня root (представлен символом слеша /).
Команда ls: просмотр содержимого каталога
Теперь вы знаете, как определить каталог, в котором вы находитесь, вы можете посмотреть содержимое этого каталога.
В настоящее время просматривать домашний каталог не имеет особого смысла (он содержит мало файлов). Для примера перейдите в другой каталог, в котором храниться больше файлов.
Чтобы перейти в другой каталог, введите в терминал (команда pwd подтвердит, что вы перешли в новый каталог):
cd /usr/share
pwd
/usr/share
Примечание: Подробнее перемещение по каталогам рассматривается в следующем разделе.
Теперь попробуйте запросить содержимое каталога:
ls
adduser groff pam-configs
applications grub perl
apport grub-gfxpayload-lists perl5
apps hal pixmaps
apt i18n pkgconfig
aptitude icons polkit-1
apt-xapian-index info popularity-contest
. . .
Как видите, в этом каталоге много различных элементов. В команду можно добавлять дополнительные флаги, чтобы изменить её поведение по умолчанию. Например, чтобы получить расширенный вывод, нужно использовать флаг –l:
ls -l
total 440
drwxr-xr-x 2 root root 4096 Apr 17 2014 adduser
drwxr-xr-x 2 root root 4096 Sep 24 19:11 applications
drwxr-xr-x 6 root root 4096 Oct 9 18:16 apport
drwxr-xr-x 3 root root 4096 Apr 17 2014 apps
drwxr-xr-x 2 root root 4096 Oct 9 18:15 apt
drwxr-xr-x 2 root root 4096 Apr 17 2014 aptitude
drwxr-xr-x 4 root root 4096 Apr 17 2014 apt-xapian-index
drwxr-xr-x 2 root root 4096 Apr 17 2014 awk
. . .
Это выведет множество информации, большая часть которой выглядит непривычно. Первый блок описывает тип файла (d указывает на каталог, символ «-» – на обычный файл) и права на него. Каждый последующий столбец, разделенный пробелами, определяет количество жестких ссылок, владельца файла, группу, размер элемента, время последнего изменения и имя элемента.
Чтобы получить список всех файлов, включая скрытые, добавьте флаг –а. Поскольку в каталоге /usr/share нет скрытых файлов, вернитесь в домашний каталог:
Затем запросите список файлов:
ls -a
. .. .bash_logout .bashrc .profile
Как вы можете видеть, в этом каталоге есть три скрытых файла. Символы . и .. являются специальными индикаторами. В дальнейшем вы заметите, что конфигурационные файлы часто хранятся как скрытые.
Записи с одной и двумя точками – это не каталоги, а встроенные методы обращения к каталогам. Одна точка указывает текущий каталог, а две точки определяют родительский каталог этого каталога.
Команда cp: копирование файлов и каталогов
Команда cp может создать копию существующего элемента.
К примеру, можно скопировать файл file3 в новый файл file4.
Теперь у вас есть два файла: file3 и file4.
Примечание: Как и в случае с командой mv, вы можете случайно перезаписать файл, если укажете имя существующего файла в качестве целевого. Например, если file4 уже существует, его содержимое будет полностью заменено содержимым file3 и восстановить его не получится.
Чтобы скопировать каталог, добавьте опцию –r. Она копирует каталог и всё его содержимое. Её нужно использовать даже тогда, когда вы копируете пустой каталог.
Например, скопируйте структуру каталогов some в новую структуру again:
cp -r some again
В отличие от файлов, которые перезаписывают целевой файл, если такой существует, каталоги будут просто скопированы в целевой каталог.
Эта команда создаст копию файла file1 в каталоге again.
Читайте также: