Перейти к содержанию

Основы Linux. Изучение структуры и базовых команд Linux

Цель: Первичное знакомство с командным интерпретатором. Изучение базовых команд операционной системы Linux.

Теоретическая часть:

При работе с ОС необходимо знать то, как она работает, в каком виде хранятся файлы, и какие команды существуют для управления системой. Такой подход позволяет разрабатывать различные системы, в том числе для экологического и метеорологического мониторинга, с соблюдением стандартов качества и организацией их бесперебойной работы

При работе ОС активно использует устройства хранения данных, в том числе жесткие или твердотельные диски. Чтобы на каждом разделе этих дисков можно было работать с файлами и каталогами, необходимо наличие файловой системы. Кроме записи содержимого файлов на диск нужно еще хранить данные о папках, имена файлов, их размер, адрес на жестком диске, атрибуты доступа. Всем этим занимается файловая система.

Файловая система (ФС) - предоставляет пользователям (и процессам) ресурсы долговременной памяти компьютера. Операционная система Windows может быть установлена на файловую систему NTFS, поэтому обычно у пользователей не возникает вопросов какую ФС лучше использовать. ОС Linux имеет значительные отличия. Так, в ядро системы встроены и могут использоваться несколько файловых систем, каждая из которых оптимизирована для решения определенных задач.

От файловой системы зависит очень многое: скорость работы с файлами, скорость записи и даже размер файлов. Также от стабильности файловой системы будет зависеть сохранность файлов. Файловые системы в Linux используются не только для работы с файлами на диске, но и для хранения данных в оперативной памяти или доступа к конфигурации ядра во время работы системы. В каждом дистрибутиве Linux есть возможность использовать одну из следующих файловых систем: Ext2, Ext3, Ext4, JFS, ReiserFS, XFS, Btrfs, ZFS. Все они включены в ядро и могут использоваться в качестве корневой файловой системы.

Иерархия файловой системы в Linux

Для каждого дистрибутива Linux существуют свои различия в иерархиях файловых систем. - / - Корневая директория, структуры директорий всех систем Linux начинаются с корневой директории. Все файлы, которые существуют в вашей системе Linux, находится ниже данной корневой директории в дереве директорий. Ниже приведено содержимое этой корневой директории.

debia@debian:~$ ls / 
bin   home            lib32       media  root  sys  vmlinuz
boot  initrd.img      lib64       mnt    run   tmp  vmlinuz.old
dev   initrd.img.old  libx32      opt    sbin  usr
etc   lib             lost+found  proc   srv   var
  • /boot - директория, которая содержит все файлы, необходимые для загрузки компьютера. Эти файлы не изменяются очень часто.
  • /etc - директория, где хранятся, все специфичные для машины конфигурационные файлы. Во многих случаях имена конфигурационных файлов совпадают с именами приложений или протоколов, а в качестве расширений этих файлов используется строка .conf.
debia@debian:~$ ls /etc/*.conf
/etc/adduser.conf            /etc/host.conf        /etc/reportbug.conf
/etc/apg.conf                /etc/kernel-img.conf  /etc/resolv.conf
/etc/appstream.conf          /etc/ld.so.conf       /etc/rygel.conf
/etc/ca-certificates.conf    /etc/libao.conf       /etc/sensors3.conf
/etc/debconf.conf            /etc/libaudit.conf    /etc/sudo.conf
/etc/deluser.conf            /etc/logrotate.conf   /etc/sudo_logsrvd.conf
/etc/discover-modprobe.conf  /etc/mke2fs.conf      /etc/sysctl.conf
/etc/e2scrub.conf            /etc/nftables.conf    /etc/ucf.conf
/etc/fuse.conf               /etc/nsswitch.conf    /etc/usb_modeswitch.conf
/etc/gai.conf                /etc/pam.conf         /etc/xattr.conf
  • /proc - (proccess) информация о процессах. Это тоже необычная файловая система, а подсистема, динамически создаваемая ядром. Здесь содержится вся информация о запущенных процессах в реальном времени. По сути это псевдофайловая система, содержащая подробную информацию о каждом процессе, его PID, имени исполняемого файла, параметрах запуска, доступе к оперативной памяти и так далее. Также в этом каталоге можно найти информацию об использовании системных ресурсов, например, /proc/cpuinfo, /proc/meminfo или /proc/uptime
  • /home - пользователи могут хранить персональные данные и данные проектов в данной директории. Обычно имя домашней директории пользователя устанавливается в соответствии с полным именем пользователя в формате /home/$имя_пользователя. Например:
debia@debian:~$ ls /home
geert  annik  sandra  paul  tom
  • /root - стандартная директория для хранения персональных данных и данных профиля пользователя root.
  • /mnt (mount) - монтирование в каталог. В данный каталог можно подключать внешние или дополнительные файловые системы.
  • /media - данная директория служит точкой монтирования для таких устройств для работы со съемными носителями, как приводы CD-ROM, цифровые камеры, а также различные устройства, подключаемые по шине USB. Большинство дистрибутивов Linux на сегодняшний день монтирует все съемные носители в директорию /media.
debia@debian:~$ ls /media/
cdrom  cdrom0  usbdisk
  • /dev - файлы устройств из директории /dev выглядят как обычные файлы, но на самом деле не являются обычными файлами, размещенными на жестком диске. Директория /dev заполняется файлами в процессе определения устройств средствами ядра операционной системы. Стандартные устройства, такие, как жесткие диски, представлены файлами устройств в директории /dev.
debia@debian:~$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sdb  /dev/sdb1  /dev/sdb2
  • /tmp (temp) - временные файлы. В этом каталоге содержатся временные файлы, созданные системой, любыми программами или пользователями. Все пользователи имеют право записи в эту директорию. Файлы удаляются при каждой перезагрузке.
  • /var - директория для изменяемых данных, файлы заранее неизвестного размера, такие, как файлы журналов, файлы кэша и файлы очереди печати.
  • /var/log - файлы логов (файлы журналов). В этой директории содержится большинство файлов логов всех программ, установленных в операционной системе.
  • /var/lib - базы данных В этой директории находятся файлы баз данных, пакеты, сохраненные пакетным менеджером и т д
  • /usr - (user applications) программы пользователя. Каталог с большим количеством функций. Здесь находятся исполняемые файлы, исходники программ, различные ресурсы приложений и документация.
  • /srv (server) - сервер. В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-сервера apache.

Файлы и ничего кроме файлов

Среди всех элементов операционной системы Linux самым важным, является командная строка (Терминал). Оболочка во многом определяет богатые возможности и гибкость операционной системы Linux. Все, с чем Вы встретитесь в операционной системе Linux, - это файлы. Очевидно, что текстовый документ - это файл. Изображения, аудиоданные в формате МР3 и видеофрагменты - это несомненно файлы. Каталоги - это тоже файлы, содержащие информацию о других файлах. Дисковые устройства - это большие файлы. Сетевые соединения тоже файлы. Даже исполняемый процесс - это файл. С точки зрения операционной системы Linux файл представляет собой поток битов или байтов. Система не интересуется тем, что означает каждый байт. Это забота конкретных программ, выполняющихся в операционной системе Linux. Для операционной системы Linux и документ, и сетевое соединение всего лишь файлы. Как обрабатывать текстовый документ, знает редактор, а сетевое приложение умеет работать с сетевым соединением.

В отличие от Windows и МасOS в операционной системе Linux имена файлов чувствительны к регистру символов. В частности, Вы можете встретить в одном каталоге все три файла которые приведены ниже в качестве примера:

Sit.txt 
sIt.txt 
SIT.txt

С точки зрения файловой операционной системы Linux - это различные имена файлов. Если вы попытаетесь создать файлы с этими же именами в Windows или МасOS, то вероятнее всего попытка увенчается провалом, и система предложит Вам выбрать другое имя для файла.

Чувствительность к регистру символов также означает, что при вводе команд они должны в точности совпадать с именами файлов, поддерживающих их. Так, например, удаляя файл с помощью команды rm, нельзя вводить RM, Rm или rM. Надо также следить за написанием имен, задаваемых в качестве параметров. Если вы захотите удалить файл «SIT.txt», а укажете имя Sit.txt, вы лишитесь совсем не того файла, с которым предполагали расстаться.

Список специальных символов которые не рекомендуется использовать в названиях файлов:

/   - Нельзя использовать ни при каких обстоятельствах
\   - Должен быть предварен таким же символом. Применять не рекомендуется
-   - Нельзя использовать в начале имени файла или каталога
[]  - Каждый из этих символов должен быть предварен обратной косой чертой. Применять не рекомендуется
{}  - Каждый из этих символов должен быть предварен обратной косой чертой. Применять не рекомендуется
*   - Должен быть предварен обратной косой чертой. Применять не рекомендуется
?   - Должен быть предварен обратной косой чертой. Применять не рекомендуется
'   - Должен быть предварен обратной косой чертой. Применять не рекомендуется
"   - Должен быть предварен обратной косой чертой. Применять не рекомендуется

Групповые операции:

Предположим, что в одном из каталогов на вашем компьютере содержатся сто файлов с изображениями и два текстовых файла. Ваша задача удалить все файлы с изображениями за исключением двух текстовых файлов. Удалять файлы по одному - это утомительное занятие. В операционных системах Linux для автоматизации данного процесса можно применять символы групповых операций. Групповые операции задаются посредством звездочки (*), знака вопроса (?) и квадратных скобок ( [\ ] ).

Пример использования групповых операций:

Групповая операция с применение "*" - отмечает любое (в том числе нулевое) количество любых символов.

rm sit1*.*    # Удаляться файлы : sit1.txt, sit1.jpg, sit11.jpg, sit123123.txt 
rm sit*.jpg   # Удаляться файлы : sit1.jpg, sit11.jpg 
rm *txt       # Удаляться файлы : sit1.txt, sit123123.txt
rm sit*       # Удаляться файлы : sit1.txt, sit1.jpg, sit11.jpg, sit123123.txt
rm *          # Удалятся все файлы в каталоге

Групповая операция с применение "?". Символ » ? » - соответствует одному произвольному символу.

rm sit1?.jpg  # Удалится файл: sit11.jpg, но не sit1.txt, sit1.jpg, sit123123.txt
rm sit?.jpg   # Удалится файл: sit1.jpg, но не sit1.txt, sit11.jpg, sit123123.txt
rm sit?.*     # Удаляться файлы: sit1.txt, sit1.jpg, но не sit11.jpg, sit123123.txt

Групповая операция с применение "[ ]" . Квадратные скобки позволяют задавать один символ из набора или символ, принадлежащий определенному диапазону.

rm sit[0-1].txt    # Удалится файл: sit1.txt, но не sit1.jpg, sit11.jpg, sit123123.txt
rm sit1[0-2].jpg   # Удалится файл: sit11.jpg, но не sit1.jpg, sit123123.txt   sit1.jpg

Основные консольные команды:

pwd — определить текущий каталог
cd [имя каталога] — осуществить переход в заданный каталог.
ls [имя каталога] — просмотреть список файлов и подкаталогов.
mkdir [имя каталога] — создать каталог с заданным именем.
cp <имя файла 1> <имя файла 2> — скопировать файл «имя файла 1» в файл «имя файла 2», например: cp first.txt copy1.txt.
mv <имя файла 1> <имя файла 2> — переименовать файл «имя файла 1» в файл «имя файла 2», например: mv first.txt orig.txt.
ln «имя файла» «имя ссылки» — создать жёсткую ссылку «имя ссылки» на файл «имя файла». Пример: ln orig.txt copy2.txt. 
ln -s «имя файла» «имя ссылки» — создать символическую ссылку «имя ссылки» на файл «имя файла». Пример: ln -s orig.txt copy2.txt.
rm <имя файла> — удалить файл.
touch <имя файла> — создание файла.
man <название команды> — получение справочной документации о выбранной команде.

Изучение базовых команд Linux

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

Кроме того, в данной главе обсуждаются понятия абсолютных и относительных путей, а также описывается методика использования механизма завершения путей командной оболочки bash.

Команда man

Вы можете ввести команду man с последующим именем интересующей команды (для которой вам хотелось бы получить справочную информацию) и начать чтение страницы руководства. Нажмите q для выхода из режима чтения страницы руководства

debia@debian:~$ man passwd      # открывает первую найденную страницу руководства

Команда whatis

Для ознакомления с описанием страницы руководства следует использовать команду whatis с именем интересующей страницы руководства.

debia@debian:~$ whatis route
route (8)            - show / manipulate the IP routing table

Команда pwd

С помощью команды pwd (расшифровывается как Print Working Directory - вывести информацию о рабочей директории) может быть получена информация о вашем текущем местонахождении в рамках файловой системы.

debia@debian:~$ pwd
/home/paul

Команда cd

Вы можете изменить вашу текущую директорию с помощью команды cd (расшифровывается как Change Directory - изменить директорию).

debia@debian:/$ cd /etc/
debia@debian:/etc$ pwd
/etc
debia@debian:/etc$ cd /bin
debia@debian:/bin$ pwd
/bin
debia@debian:/bin$ cd /home
debia@debian:/home$ pwd
/home
  • cd или cd ~ для быстрого перехода назад в вашу домашнюю директорию (/home/$<ваша_директория>)
  • cd .. для перехода в директорию, которая находится над вашей текущей директорией

В Linux существуют абсолютные и относительные пути в рамках дерева директорий файловой системы. Если вы вводите путь, начинающийся с символа слэша (/), подразумевается, что путь будет указан относительно корневой директории файловой системы. Если же вы не начинаете ввод пути с символа слэша, подразумевается, что точкой отсчета будет текущая директория. В примере ниже показано, что текущей директорией является директория /home/paul. Для перехода из этой директории в директорию /home вам придется ввести команду cd /home вместо команды cd home.

debia@debian:~$ pwd
/home/paul
debia@debian:~$ cd home
bash: cd: home: Нет такого файла или каталога
debia@debian:~$ cd /home
debia@debian:~$ pwd
/home

При нахождении в директории /home вам придется ввести команду cd paul вместо команды cd /paul для перехода в поддиректорию paul текущей директории /home.

paul@debian8$ pwd
/home
paul@debian8$ cd /paul
bash: cd: /paul: Нет такого файла или каталога
paul@debian8$ cd paul
paul@debian8$ pwd
/home/paul

Утилита ls

Вы можете вывести список содержимого директории с помощью утилиты ls.

debia@debian:~$ ls
allfiles.txt  dmesg.txt  services   stuff  summer.txt
  • ls -a - часто используемым параметром утилиты ls является параметр -a, который предназначен для вывода информации обо всех файлах. Под выводом информации обо всех файлах подразумевается вывод информации в том числе и о скрытых файлах.
debia@debian:~$ ls
allfiles.txt  dmesg.txt  services  stuff  summer.txt
debia@debian:~$ ls -a
.   allfiles.txt   .bash_profile  dmesg.txt   .lesshst  stuff
..  .bash_history  .bashrc        services    .ssh      summer.txt 
  • ls -l - (в качестве параметра использована строчная буква L, а не число 1) позволяет получить более подробный список файлов.
debia@debian:~$ ls -l
итого 17296
-rw-r--r-- 1 paul paul 17584442 сен 17 00:03 allfiles.txt
-rw-r--r-- 1 paul paul    96650 сен 17 00:03 dmesg.txt
-rw-r--r-- 1 paul paul    19558 сен 17 00:04 services
drwxr-xr-x 2 paul paul     4096 сен 17 00:04 stuff
-rw-r--r-- 1 paul paul        0 сен 17 00:04 summer.txt
  • ls -lh - позволяет выводить числовые значения (соответствующие размерам файлов) в формате, лучше читаемом человеком.
debia@debian:~$ ls -l -h
итого 17M
-rw-r--r-- 1 paul paul  17M сен 17 00:03 allfiles.txt
-rw-r--r-- 1 paul paul  95K сен 17 00:03 dmesg.txt
-rw-r--r-- 1 paul paul  20K сен 17 00:04 services
drwxr-xr-x 2 paul paul 4.0K сен 17 00:04 stuff
-rw-r--r-- 1 paul paul    0 сен 17 00:04 summer.txt

Утилита mkdir

Обход дерева директорий файловой системы Unix является интересным занятием, но еще больший интерес представляет создание ваших собственных директорий с помощью утилиты mkdir. Вам придется передавать как минимум один параметр утилите mkdir, а именно, имя новой директории, которая должна быть создана. При этом следует серьезно задумываться перед использованием начального символа / в именах директорий.

debia@debian:~/NewFolder$ ls -a
.  ..
debia@debian:~/NewFolder$ mkdir NewPapka
debia@debian:~/NewFolder$ ls -a
.  ..  NewPapka
  • mkdir -p - в случае использования параметра -p утилиты mkdir при необходимости будут создаваться родительские директории.

Утилита rmdir

В том случае, если директория пуста, вы можете использовать утилиту rmdir для удаления этой директории.

Утилита touch

Один из простых способов создания пустого файла заключается в использовании утилиты touch.

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

debia@debian:~$ ls -l
итого 0
debia@debian:~$ touch file42
debia@debian:~$ touch file33
debia@debian:~$ ls -l
итого 0
-rw-r--r-- 1 paul paul 0 окт 15 08:57 file33
-rw-r--r-- 1 paul paul 0 окт 15 08:56 file42

Утилита rm

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

debia@debian:~$ ls
BigBattle.txt  file33  file42  SinkoDeMayo
debia@debian:~$ rm BigBattle.txt
debia@debian:~$ ls
file33  file42  SinkoDeMayo
  • rm -i - для того, чтобы застраховаться от случайного удаления файла, вы можете использовать команду rm -i.
  • rm -r - по умолчанию с помощью команды rm -r невозможно удалить непустые директории. Однако, утилита rm принимает параметры, которые позволят вам удалять любую директорию.
  • rm -rf - позволяет удалять все элементы файловой системы (конечно же, в том случае, если вы имеете достаточные права для выполнения этой операции). Параметр f расшифровывается как force (принудительное выполнение операции), а параметр r - как recursive (рекурсивный обход директорий)

Утилита cp

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

debia@debian:~$ ls
file42  SinkoDeMayo
debia@debian:~$ cp file42 file42.copy
debia@debian:~$ ls
file42  file42.copy  SinkoDeMayo
  • cp -r - для копирования директорий целиком (параметр -r позволяет осуществлять рекурсивное копирование всех файлов из всех поддиректорий).
  • cp -i - для предотвращения перезаписи существующих файлов в ходе использования утилиты cp следует использовать параметр -i (для активации интерактивного режима копирования).

Утилита mv

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

debia@debian:~$ ls
dir33  dir42  file42  file42.copy  SinkoDeMayo
debia@debian:~$ mv file42 file33
debia@debian:~$ ls
dir33  dir42  file33  file42.copy  SinkoDeMayo

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

debia@debian:~$ ls -l
итого 8
drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir33
drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir42
-rw-r--r-- 1 paul paul    0 окт 15 09:38 file33
-rw-r--r-- 1 paul paul    0 окт 15 09:16 file42.copy
-rw-r--r-- 1 paul paul    0 май  5  2005 SinkoDeMayo
debia@debian:~$ mv dir33 backup
debia@debian:~$ ls -l
итого 8
drwxr-xr-x 2 paul paul 4096 окт 15 09:36 backup
drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir42
-rw-r--r-- 1 paul paul    0 окт 15 09:38 file33
-rw-r--r-- 1 paul paul    0 окт 15 09:16 file42.copy
-rw-r--r-- 1 paul paul    0 май  5  2005 SinkoDeMayo
  • mv -i - утилита mv поддерживает параметр -i по аналогии с утилитами cp и rm.

Задание

  • Откройте терминал.
  • Ознакомьтесь с возможностями команды pwd c помощью команды man:
  • Определите текущий каталог, в котором вы находитесь командой pwd:
  • Ознакомьтесь с возможностями команды cd c помощью команды man:
  • Перейдите в корневой каталог командой cd
  • Ознакомьтесь с возможностями команды ls c помощью команды man:
  • Просмотрите содержимое корневого каталога командой ls:
  • Сделайте копию экрана для использования в отчете.
  • Вернитесь в домашний каталог, используя команду cd без параметров:
  • Ознакомьтесь с возможностями команды mkdir c помощью команды man:
  • Создайте каталог «test», используя команду mkdir:
  • Перейдите в каталог «test», используя команду cd:
  • Просмотрите содержимое каталога, используя команду ls:
  • Создайте каталог «test2», используя команду mkdir:
  • Ознакомьтесь с возможностями команды touch c помощью команды man:
  • Создайте файл «text» в каталоге «test2» используя команду touch:
  • Ознакомьтесь с возможностями команды mv c помощью команды man:
  • Переименуйте файл «text» в «textSIT» используя команду mv
  • Ознакомьтесь с возможностями команды cp c помощью команды man:
  • Скопируйте файл «textSIT» в каталог «test2» под именем «copy.txt», используя команду cp:
  • Ознакомьтесь с возможностями команды ln c помощью команды man:
  • Создайте жесткую ссылку «link» на файл «copy.txt» используя команду ln:
  • Создайте символическую ссылку «simlink» на файл «copy.txt» используя команду ln:
  • Просмотрите результаты в текущем каталоге при помощи команды ls с аргументами la:
  • Удалите созданные вами файлы и ссылки используя команду rm