Команды shell для новичка

Материал из Belgorod Linux User Group - Белгород

Перейти к: навигация, поиск

Команды shell для новичка

Статья о базовых командах в Linux для новичка. Понятие "команды" конечно расплывчато, потому как практически каждая "команда" в Linux - это исполняемый файл, это программа. По этому те или иные "команды" могут у вас и не быть, т.к. не установлены соответствующие пакеты. Но их всегда можно будет установить вашим пакетным менеджером (Suse: yast, Mandriva: yum, Debian: apt-get, RedHat: up2date, Gentoo: emerge и т.п.).

Существует мнение, что средний пользователь линукс знает порядка 100-200 команд, которыми чаще всего пользуется, а их существовать в системе может тысячами. То есть это вроде словарного запаса. В принципе, зная базовый набор команд - можно обходиться успешно ими, т.е. как и в речи - заменять синонимами или другими похожими словами.

Само собой команды эти могут комбинироваться и взаимодействовать (через пайп, через пул, через сокет, через перенаправление вывода и т.п.), плюс командные процессоры shell (bash, zsh и т.п.) имеют встроенный интерпретируемый язык. Что в результате дает вам удивительно гибкий механизм для вашей работы. Комбинируя команды и их параметры, в купе с языком shell вы конструируете то что вам надо из этих кубиков.

Содержание

Справка

man - мануал

man <имя команды>
man cp

встроенная в систему документация. Выведет информацию по использованию указанной команды. Тут как правило будут перечислены все параметры команды и примеры их использования. Выход из man как правило клавишей q, но это зависит от того какой программой просмотра man-а она отображается. Как правило это программа less (устанавливается в переменной окружения PAGER).

info - расширенный мануал

info <имя команды>
info cp

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

Навигация: вперед - ] или n, назад - [ или p

-h --help - краткая помощь

<имя команды> -h
<имя команды> --help
cp --help

встроенная справка программы. Выводит информацию о ней. Как правило не так полно как в man,

На данную опции действует переменная окружения LANG. Подробнее о переменных окружения

Работа с файлами и директориями

ls - листинг

ls 

показать листинг (содержание) текущей директории (краткий формат по умолчанию)

ls -la 

показать в более полном формате

ls <имя директории>
ls /home

показать листинг директории с указанным именем

cd - смена директории

cd <имя директории>
cd /usr
cd ~/

смена текущей директории на новую, с указанным именем. Имя ~/ означает домашнюю директорию пользователя (как правило это /home/имя_пользователя, а у root-а это /root)

cd -

вернется в предыдущий каталог

cd /us<TAB>/incl<TAB>

по клавише TAB происходит автодополнение или вывод возможных вариантов

touch - тронуть файл

touch <имя файла>
touch ~/test.txt

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

mkdir - создание директории

mkdir <имя директории>
mkdir ~/newdir
mkdir -p ~/newdir2/subdir

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

cp - копирование

cp <что> <куда>
cp ~/test.txt ~/newdir/
cp ./test.txt ./newdir2/
cp -R ~/newdir ~/newdir2/subdir
cp -a ~/newdir ~/newdir2/subdir

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

rm - удаление

rm <имя>
rm ~/test.txt
rm -r ~/newdir2/subdir

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

find - поиск

find ~/ -name "test*"

найти все совпадения имени с переданным параметром.

echo - напечатать строку

echo "Hello"

напечатает слово Hello на консоль.

echo "Hello world" > ~/test.txt

напечатает слова "Hello world", но далее следует знак > - это перенаправление вывода, в данном случаи в файл test.txt в домашней директории пользователя. Таким образом результатом такой команды будет то, что слова "Hello world" окажутся в файле ~/test.txt

echo "Hello again" >> ~/test.txt

команда похожа на предыдущую, но уже два знака "больше" >> - означает перенаправление вывода с добавлением к уже существующему. В результате выполнения такой команды строка "Hello again" будет дописана в конец файла ~/test.txt

grep - выборка

grep -rnH "world" ~/

найдет все файлы содержащие слово "world" в домашней директории пользователя, используя рекурсивный поиск (-r) по поддиректориям, и выведет имя файла (-n) и номер строки где было это совпадение (-H), ну и саму строку. grep как правило используется для выборки из передаваемых пайпом ему входных данных (см. ниже пример с ps)

cat file | grep stroka_v_file

выборка из входного потока (прочитать файл)

ps ax | grep -v root

напечатать все процессы(команда ps) и удалить из них строки где есть слово root

cat - прочитать файл

cat ~/newdir/test.txt

выведет содержимое файла test.txt

less - чтение

less ~/test.txt

"читалка". Для удобного чтения файла или вывода. Навигация - стрелками, выход по клавише q.

ls -la /usr | less

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

tail - вывод последних строк файла

tail ~/test.txt

По умолчанию выведет последние 10 строк файла.

tail -f ~/test.txt

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

tac - перевернуть файл

tac file.in | sed -n '108,207p' | tac > file.out

Выберет со 108 по 207 строку с конца файла file.in перевернёт полученное обратно и запишет их в file.out

Работа с процессами

ps - список процессов

ps -ax

показать список всех процессов

ps ax | grep <что-то>
ps ax | grep bash

тут grep - это другая программа, т.е. произошло комбинирование команд через пайп (вертикальная черта |), и то что вернула ps - пошло на вход grep - программы выборки, и grep выбрал то что вы передали (в данном примере - все что совпало со словом bash )

kill - завершить процесс

kill 1354

Передает сигнал процессу (указывать нужно pid - process identification). Узнать pid можно с помощью команды ps. Подробнее про сигналы читать здесь.

killall - завершить процессы

killall <имя процесса>
killall sim
killall -9 sim

Точнее говоря конечно это команда передачи сигнала процессу. Сигналы процессу могут быть разные, не только для завершения процесса, но как правило используется как "убить процесс". Параметр -9 применяется если по простому killall (по умолчанию -15) процесс не снимается.

pkill и pgrep

Хорошая замена ps/kill/killall (идет в пакете sys-process/procps на новых системах стоит по умолчанию) Получить список пидов какого-либо процесса:

pgrep <имя процесса>

То же самое, но с фильтрацией по пользователю (в примере поиск всех bash - процессов)

pgrep -u root bash

Послать сигнал SIGHUP (обычно используемый для перечетывания конфигурационных файлов) с помощью pkill

pkill -HUP sshd

Аварийно (SIGKILL) завершить процесс php

pkill -9 php

Остальные примеры и опции:

man pkill
man pgrep
Личные инструменты