Bash: основы обитания в командной строке

Вполне вероятна ситуация, при которой вам придется сталкиваться с командным режимом. Как правило, это является результатом неправильной конфигурации системы или вам просто нужно выполнить какие-либо сервисные процедуры. Хотя, возможно, вы просто хотите как можно лучше разобраться с Linux. Многие удобные (и мощные) инструменты есть только в текстовом виде.


Необходимые примечания

При написании примеров команд очень часто в начале ставится специальный символ "$", показывающий, что набранное выполняется от имени простого пользователя. Если же необходимы привилегии суперпользователя, то ставится "#". В принципе, "#" можно заменить командой sudo (если она настроена для запуска от вашего имени).

Очень часто домашний каталог обозначается как "~". То есть, если имя пользователя joe, то ~ эквивалентно пути /home/joe.

ПРОПИСНЫЕ и строчные буквы - это различные символы, и имена Name и name - это различные имена. То есть возможно одновременное существование файлов aaa и ААА в одной папке.

Имя файла - всего лишь ссылка на него. То есть у файла может быть несколько имен. Это называется "жёсткая ссылка", также есть "символическая ссылка", для которой создаётся специальный файл, указывающий на исходный объект. Символическую ссылку можно создавать для папок и файлов на любых разделах и носителях (даже съёмных).

Исполняемые файлы не имеют расширения (конечно, могут и иметь, но "выполнимость" определяется не по нему). Право на выполнение - такой же атрибут, как право на запись/чтение. При желании можно разрешить/запретить любому пользователю выполнять любую команду.


Командные интерпретаторы

За "общение" пользователя с системой отвечает так называемая "оболочка", она же командный интерпретатор (вспомните DOS и его COMMAND.COM). Только важным отличием от того же DOS и Windows с их скудными инструментами являются большие возможности, предоставляемые текстовыми инструментами. Так вот, bash - это стандартный линуксовский командный интерпретатор. Кроме того, под linux существуют крайне различные его заменители (ash, fish, csh и другие). Используемая оболочка прописана в опциях пользователя.

По умолчанию, bash загружается сразу, как вы вошли в систему или запустили какой-нибудь эмулятор терминала (Konsole, xterm, gnome-terminal и другие). Собственно, он и обрабатывает всё, что вы вводите.


База

Обычно команды имеют следующий вид:

команда параметры аргументы

например, rm -rf /

команда rm предназначена для удаления;

ключ r показывает, что нужно удалять рекурсивно, то есть будут удалена папка и все файлы/подпапки этого каталога (вообще, для удаления каталогов применяется rmdir);

ключ f указывает, что ничего при выполнении выводить не надо;

аргумент / означает, что удалять мы будем корневой каталог, то есть в результате выполнения у нас удалится всё, что подмонтировано в системе (уточняю: всё, что можно удалить).

Вот пара команд, которые наиболее часто используются при работе, и их стоит запомнить:

man - показ справки по команде;

$ man rm - руководство, как пользоваться rm;

cd - сменить каталог на указанный;

$ cd /home/oni

cp - копировать файл/каталог;

$ cp /home/oni/temp/aaaa /home/oni/work/

ls - показать содержимое указанного каталога (если ничего не указано, то отображается содержимое текущей папки);

$ ls /home

Очень полезным является ключ -а, про добавлении которого показываются скрытые файлы и папки (имя которых начинается с точки, например, .config).

mv - переместить файл (если каталог, то нужно указывать ключ -r). Также применяется при переименовании, ведь, по сути, между переименованием и перемещением нету разницы.

$ mv ~/somefile ~/somedirectory/

$ mv ~/somefile ~/newname

ln - создает жёсткую ссылку, если добавить ключ -s, то создаётся символическая ссылка.

$ ln ~/myfile ~/directory/file - редактирование любого из этих фалов приведёт к изменению исходного файла.

find - поиск, имеет несколько нестандартный вид. Имеет много параметров, позволяет искать по имени, размеру и т. п.;

$ find ~/work -name document - ищет в ~/work файл с именем document;

top - отображает таблицу активных процессов в реальном времени;

ps - отображает моментальный "снимок" процесса;

$ ps aux - выведутся все текущие процессы;

grep - поиск текстовой строки в файлах.

$ grep line /home/

Можно воспользоваться перехватом вывода и подключить grep к выводу ps.

$ ps aux | grep bash выводит информацию о процессах, которые содержат "bash" в выводимом тексте.

Ну раз заговорили о процессах, то стоит упомянуть следующие.

kill - убивает процесс по его идентификатору (PID);

killall - убивает все процессы с указанным именем;

# kill 1 - убивает процесс init (у него всегда PID=1);

$ killall opera

eject - открывает устройство чтения компакт-дисков;

$ eject -T - открыть, если закрыт, и наборот;

shutdown - позволяет перезагружать (-r), выключать компьютер (-h);

# shutdown -h now - выключает компьютер незамедлительно;

также для перезагрузки используется команда reboot, а для выключения - halt;

# reboot

# halt

Это некоторые из команд, позволяющих чувствовать себя в консоли уже не таким ничего не понимающим чайником. А вообще, для файловых операций можно установить консольный файловый менеджер midnight commander и выполнять им очень многое.

# aptitude install mc


Дополнительные советы

При выполнении команды (наборе пути) не нужно полностью всё писать. Есть великая клавиша "Tab", которая заведует функцией автоматического завершения.

Например, вместо того, чтобы набирать

cd /media/win_d/Program\ Files/ProcessExplorer/

можно набрать:

cd /me{TAB}/w{TAB}d/P{TAB}/Pr{TAB}

Так как пробел является специальным символом, разделяющим аргументы, то при указании имени, содержащего пробел, нужно перед ним ставить бэкслэш (\ ). Аналогично с символами типа *, ? и другими. Хотя можно путь взять в одиночные или двойные кавычки. Зато это позволяет создавать файлы с именами, которые невозможны в Windows/DOS.

Для большего удобства сначала стоит отредактировать файл ~/.bashrc, который представляет собой файл настроек bash. Если вам надо, чтобы какие-либо команды выполнялись каждый раз при вашем запуске bash, то их тоже можно указать здесь. Также стоит раскомментировать эти строчки:

if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls="ls -F --color --file-type"
alias dir='ls --color=auto --format=vertical'
alias vdir='ls --color=auto --format=long'
fi

Это приведет к тому, что при выполнении ls список будет разноцветным.

Также стоит включить функцию автозавершения.

if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

Это несколько ускорит работу, так как теперь при указании аргументов не надо их писать полностью. Например, вместо sudo aptitude install bb можно сделать так: in{TAB}. Аналогично и для других случаев.

Антон "Oni" ЛИПАРИН,
oni-ddr.livejournal.com

Версия для печатиВерсия для печати

Номер: 

28 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя mike
Статья нужная, но галопирующая. Совсем чайник (вроде меня) после неё, чтобы получить коренные права, будет вводить решётку.
Аватар пользователя Инкогнито
да уж, галопам по Европам...

Особенно радует пример для bash

rm -rf /

Ведь найдётся кто-нибудь, который это попробует на рабочей системе. Мозги есть у автора?