Несмотря на то, что на каждом шагу нас преследует графический интерфейс и красивые окна, командная строка не теряет своей актуальности. Даже в ОС Windows командная строка иногда позволяет сделать очень интересные действия. А в Windows 2008 появилась даже отдельная конфигурация, которая позволяет запустить сервер без графического режима и выполнять все действия с помощью текстовых команд.
ОС Linux наоборот, последние годы все больше движется в сторону настольных систем, где пользователи любят красивые окошки и сверкающие бирюлички. Но если вы используете ОС как сервер, то без командной строки никуда не деться. Они реально помогают, даже локально, не говоря уже об удаленном подключении к серверу.
Выполнение текстовой команды происходит намного быстрее, чем движение мышкой, запуск графической программы и последующее управление графическими элементами управления. С другой стороны, команд и их параметров просто очень много. Помнить их все очень сложно, если не сказать невозможно. Я думаю, что никто и не знает абсолютно всех команд. Это просто нереально. Все знают только те команды, которыми пользуются чаще всего. А в если нужно сделать редкую задачу или что-то оригинальное, то тут на помощь приходят книги и Интернет.
Я надеюсь, что данный документ станет тем справочником, с помощью которого вы сможете освоить те команды, которые помогут вам в повседневной жизни. А если понадобиться выполнить что-то оригинальное, то и в этом случае, данный мануал поможет найти нужно решение.
Я не претендую на полноту изложения, потому что не знаю всего и не могу знать, но я постарался максимально полно собрать для вас информацию о командах и их параметрах. Если есть какие-то вопросы или пожелания, я всегда открыт для общения и буду рад увидеть тебя на своем сайте www.flenov.info.
Запуск терминала зависит от графической оболочки и от ее версии. Например, в GNOME нужно выбрать меню Приложения/Утилиты/Терминал, как показано на следующем экране:
Рабочий стол GNOME и запуск консоли в GNOME
Чтобы выполнить команду выполнить команду в окне терминала, достаточно ввести ее и на жать Enter. Чтобы запустить программу, нужно ввести путь к ней и потом имя самой команды. Например:
> /usr/local/program/filename.sh
Эта команда запустит на выполнение программу filename.sh из каталога /usr/local/program. Если программа запускается из текущей директории, то достаточно ввести команду так:
> ./filename.sh
Точка указывает на текущий каталог, а значит, система ищет файл filename.sh в текущей папке.
В данном мануале, когда нужно показать команду, вводимую в окно терминала, вначале я буду указывать символ >. Этот символ означает приглашение для ввода команд. Сам этот символ вводить в окно терминала не нужно. Вы должны вводить все, что находиться после него. Например:
> ls
Из всех этих символов вы должны ввести только два и это ls. Символ приглашения вводить не нужно, и пробел тоже указан только для того, чтобы отделить символ приглашения от команды. Надеюсь, что это поможет вам лучше понимать, где находятся команды, вводимые в окно терминала.
Примечание
Если нужно ввести в командную строку имя файла, содержащие пробелы, то это имя нужно заключить в двойные кавычки. Иначе, система не сможет понять, какое из слов, разделенных пробелами, является файлом и является ли пробел разделителем команд или это одно имя файла.
shutdown
Эта команда используется для завершения работы ОС. В общем виде она выглядит следующим образом:
shutdown опции время сообщение
Рассмотрим опции, которые вы можете указывать:
•-k - реально не перегружать систему, а только направить всем активным приложениям сообщение о завершении;
•-r - перезагрузить систему;
•-h – выключить компьютер ваабще.
•-f – пропустить проверку файловой системы при перезагрузке.
•-F – запустить проверку файловой системы при перезагрузке.
•-с – отменить уже запущенную команду завершения работы.
Следующая команда заставит систему перезагрузиться через 10 минут, при этом, все пользователи получат сообщение шухер, чичас перезагрузимся!
shutdown -r +10 "шухер, чичас перезагрузимся"
Можно указать и реальное время. Например, следующая команда выключит компьютер в 6 часов вечера с тем же сообщением:
shutdown -h 18:00 "шухер, чичас перезагрузимся"
Если нужно выполнить операцию немедленно, то вместо времени укажите now. Следующая команда выключит компьютер немедленно:
shutdown –h now
startx
Если вы загрузились в текстовом режиме, то переключиться графическую оболочку можно, выполнив команду startx. Никаких параметров указывать не нужно. Если конфигурационные файлы графической оболочки настроены корректно, то она загрузиться.
echo
Самая простая команда – echo. Она выглядит следующим образом:
echo текст
Эта команда банально выводит на экран текст, указанный в качестве параметра. Например, выполните следующую команду:
> echo This is a test
В результате на экране будет просто отображен текст:
This is a test
$HOME или ~
Это не команды, это что-то типа переменных, и обе они указывают на домашний каталог текущего пользователя. Например, мой домашний каталог это /home/flenov. Если выполнить команду echo и указать в качестве параметра любую из этих переменных, то в результате я увижу свой каталог.
Тут очень важным является регистр. $HOME нужно писать именно в верхнем регистре.
$LOGNAME
Эта переменная содержит имя пользователя, под которым вы вошли в систему. Попробуйте выполнить следующую команду и убедитесь, что будет отображено то же имя, которое вы вводили при авторизации:
> echo $LOGNAME
Эта переменная содержит путь к вашей домашней директории.
$PWD
В этой переменной находиться путь к текущей директории. Выполнение команды echo $PWD идентично выполнению команды pwd.
$OLDPWD
Путь к директории, в которой вы были только что. Например, если вы были в своей домашней директории, а потом перешли на уровень выше (выполнили команду cd ..), то текущей директорией будет /home, а в переменной $OLDPWD будет домашний каталог (для меня /home/flenov).
Если вы хотите вернуться в директорию, в которой были ранее (как бы нажать кнопку «назад»), выполните команду
> cd $OLDPWD
$SHELL
В этой переменной храниться путь к вашему командному процессору. В Linux есть несколько командных процессоров, но самый популярный bash, а в переменной вы увидите путь /bin/bash.
$USER
Переменная содержит имя текущего пользователя.
Помимо системных переменных, вы можете использовать и собственные переменные, определенные пользователем. Допустим, что мы хотим создать переменную, которая будет равна значению числа Пи. Я точно не помню это число, но допустим, что оно равно 3.14. Мы не математики, поэтому погрешность в трамвайную остановку не повлияет на создание самой переменной. Короче, создадим переменную с именем TESTVAR и со значением 3.14. Для этого просто выполняем команду:
> TESTVAR=3.14
Обратите внимание, что при объявлении переменной не нужно перед именем ставить знак доллара. Выполните Следующую команду, дабы убедиться, что все на месте и корректно:
> echo $TESTVAR
Теперь уже символ доллара в начале имени необходим.
При создании строковой переменной, строку нужно заключать в двойные кавычки:
> TESTVARSTR="Test"
> echo $TESTVARSTR
Переменные пользователей видны только в командном процессоре, в котором их объявили. Чтобы их увидели и другие программу, необходимо экспортировать переменную с помощью команды export:
> export TESTVARSTR
Вы можете одновременно создавать и тут же экспортировать переменную:
> export TESTVARSTR=777
Команды работы с файловой системой наиболее часто используемые не только администратором, но и простым пользователем.
PWD
Эта команда возвращает текущую директорию. Например, если вы находитесь в директории /home/root, то результат работы команды будет:
> pwd
/home/root
CD
Первая команда наверно самая популярная – cd. Она позволяет перемещаться по файловой системе, а именно, изменять текущий каталог. Команда расшифровывается как change directory (наверно, я точно не уверен, но мне так кажется). Итак, если вы хотите изменить директорию и перейти в каталог /etc, то нужно набрать:
> cd /etc
Судя по снимку, после выполнения команды cd /etc мы оказываемся в соответствующей директории. Это подтверждает и команда pwd.
Имя точка, указывает на текущий каталог. Если выполнить команду cd и указать точку, то ничего не произойдет, потому что переход в текущий каталог не имеет смысла. Имя из двух точек указывает на каталог уровня выше. Это значит, что если выполнить следующую команду, то вы перейдете в родительский каталог:
> cd ..
На рисунке выше, находясь в директории /etc, мы выполняем переход в родительскую папку. Для /etc родительским каталогом является корень /. Именно в него мы и попадаем и это тоже подтверждает команда pwd.
Путь команде cd можно указывать как полностью, так и относительно текущего каталога. Например, если вы находитесь в /home, то для перехода в каталог /home/root можно выполнить одну из двух команд:
> cd /home/root
> cd root
Обе команды идентичны, но только если текущий каталог это /home. В первом случае система видит полный путь. Поэтому, где бы вы не находились в данный момент, следующим вашим местоположением будет /home/root. Конечно, если этот путь существует.
Во второй команде указано только имя папки без слешей. Такое имя система будет искать внутри текущего каталога. Если он есть, то вы окажитесь в нем, иначе увидите сообщение об ошибке.
Ранее я вам уже показал переменные $HOME и ~. Обе они указывают на домашний каталог текущего пользователя. Если вы хотите перейти в свой каталог, то нет смысла писать его полный путь. Достаточно просто выполнить одну из команд:
> cd $HOME
> cd ~
LS
Команда ls выводит список файлов и подкаталогов указанной директории. Если имя каталога (файла) отсутствует в параметрах команды, то отображается содержимое текущего каталога. По умолчанию все настроечные файлы (имена начинаются с точки) являются скрытыми. Чтобы их вывести, нужно указать ключ –a:
ls -a
Если мы кроме этого хотим увидеть не только имена (сжатый формат), но и полную информацию о каталоге, нужно добавить ключ –l. В результате мы должны выполнить команду:
ls –al
Но такая команда отобразит файлы текущего каталога, и не факт, что мы сейчас находимся, например, в каталоге /etc, который надо просмотреть. Чтобы увидеть именно его, после ключей (можно и до них) нужно указать требуемую папку:
ls –al /etc
Примечание
Более подробную информацию о команде ls можно получить из справочной системы. Для этого выполните команду man ls.
Рассмотрим результат вывода команды ls –al:
drwx------ 3 Flenov FlenovG 4096 Nov 26 16:10 .
drwxr-xr-x 5 root root 4096 Nov 26 16:21 ..
-rw-r--r-- 1 Flenov FlenovG 124 Nov 26 16:10 .bashrc
-rw-r--r-- 1 Flenov FlenovG 2247 Nov 26 16:10 .emacs
-rw-r--r-- 1 Flenov FlenovG 118 Nov 26 16:10 .gtkrc
drwxr-xr-x 4 Flenov FlenovG 4096 Nov 26 16:10 .kde
По умолчанию список файлов выводится в несколько колонок. Разберем них на примере первой строки:
drwx------ — права доступа. Их мы подробно разберем в главе 4. Сейчас вам главное знать, что если первая буква "d", то это директория;
цифра 3 — указывает количество жестких ссылок;
Flenov — имя пользователя, являющегося владельцем файла;
FlenovG — группа, которой принадлежит файл;
4096 — размер файла.
Примечание
На первый взгляд, директория не файл и не имеет размера, но не стоит удивляться, что размер директории не равен нулю. На самом деле, директории похожи на файлы, в которых находится список файлов директории. Размер тоже не случаен – четыре кило (4*1024), что равно блоку памяти (странице), выделяемому для работы с данными. Это лирическое отступление, которое может и не пригодиться в реальной жизни.
дата и время последних изменений файла;
имя файла.
cat
Команда позволяет вывести на экран содержимое указанного в качестве аргумента файла. Например, вы хотите просмотреть текстовый файл need.txt. Для этого нужно выполнить команду:
cat need.txt
Но это справедливо, если файл находится в текущей директории. А если нет? В этом случае можно указать полный путь:
cat /home/root/need.txt
tac
Эта команда обратная для cat (даже название команды — это слово cat наоборот), т. е. выводит на экран файл в обратном порядке, начиная с последней строки до первой.
cp
Команда копирования файла. С ее помощью можно выполнять несколько различных действий:
1.Копирования содержимого файла в другой документ той же папки:
cp /home/root/need.txt /home/root/need22.txt
Здесь содержимое файла /home/root/need.txt (источник) будет скопировано в файл /home/root/need22.txt (назначение).
2.Копирования файла в другой каталог:
cp /home/root/need.txt /home/flenov/need.txt
или
cp /home/root/need.txt /home/flenov/need22.txt
Обратите внимание, что в этом случае в папке назначения файл может быть как с новым, так и со старым именем.
3.Копирование несколько файлов в новый каталог. Для этого нужно перечислить все файлы в источнике и последним параметром указать папку:
cp /home/root/need.txt /home/root/need22.txt /home/new/
В этом примере файлы /home/root/need.txt и /home/root/need22.txt будут скопированы в директорию /home/new. Можно копировать файлы и из разных каталогов в один:
cp /home/root/need.txt /home/flenov/need22.txt /home/new/
В этом примере файлы /home/root/need.txt и /home/flenov/need22.txt будут скопированы в директорию /home/new.
4.Копирование группы (всех) файлов каталога.
А что если надо скопировать все файлы, начинающиеся на букву "n" из одной директории в другую? Неужели придется их все перечислять? Нет, достаточно указать маску n*, где звездочка :заменяет любые символы, начиная со второго:
cp /home/root/n* /home/new/
Если нужно скопировать все файлы, имена которых начинаются символами "ra" и заканчиваются буквой "t", то маска будет выглядеть как ra*t.
Это далеко не полный список возможностей команды копирования. Она достаточно сложная и мощная, что позволяет выполнить в один присест любую задачу копирования.
mkdir
Создание новой директории. Например, если вы хотите создать подкаталог newdir в текущей директории, то нужно выполнить команду:
mkdir newdir
rm
Команда позволяет удалить файл или директорию (должна быть пустая):
rm /home/flenov/need22.txt
В качестве имен файлов можно использовать и маски, как в команде cp. Для удаления директории может понадобиться указание следующих ключей:
-d — удалить директорию.
-r — рекурсивно удалять содержимое директорий.
-f — не запрашивать подтверждение удаляемых файлов. Будьте внимательны при использовании этого параметра, потому что файлы будут удаляться без каких-либо предупреждений. Вы должны быть уверены, что команда написана правильно, иначе можно удалить что-то лишнее, особенно, если вы работаете под учетной записью root.
Пример удаления директории рекурсивно и без запроса на подтверждение:
rm –rf /home/flenov/dir
df
Эта команда позволяет узнать свободное место на жестком диске или разделе. Если устройство не указано, то на экран выводится информация о смонтированных файловых системах.
Пример результата выполнения команды:
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda2 16002200 2275552 12913760 15% /
none 127940 0 127940 0% /dev/shm
Результирующая таблица состоит из следующих колонок:
Filesystem — диск, файловая система которого смонтирована;
1k-blocks — количество логических блоков;
Used — количество использованных блоков;
Available — количество доступных блоков;
Use% — процент использованного дискового пространства;
Mounted on — как смонтирована файловая система.
mount
Команда предназначена для монтирования файловых систем. Она достаточно сложна, и ее используют системные администраторы.
Если вы работали с ОС Windows, то скорей всего привыкли к тому, что дискеты, CD-диски и другие съемные носители становятся доступными сразу же, как только вы поместили их в устройство чтения. В Linux это не так, по крайней мере в текстовом режиме, и многие не могут сжиться с этой особенностью. Графические оболочки прекрасно научились монтировать диски автоматом, но все же желательно помнить и хоть немного уметь пользоваться утилитой.
Итак, чтобы CD-ROM стал доступным, надо выполнить команду mount, указав в качестве параметра устройство /dev/cdrom:
mount /dev/cdrom
После этого содержимое CD можно посмотреть в директории /mnt/cdrom. Получается, что файлы и директории диска как бы сливаются с файловой системой.
umount
Когда вы подключили к файловой системе CD-ROM, то это устройство блокируется, и диск нельзя вытащить, пока он не будет размонтирован. Для этого используется команда umount.
Например, следующая команда позволяет размонтировать CD-ROM:
umount /dev/cdrom
Конечно, вытащить нельзя CD-ROM диск, ноесли была смонтирована флешка, то ее всегда можно выдернуть физически, и тут ничего не спасет.
fdformat
Перед использованием дискет их нужно отформатировать. В ОС Linux для этого используется команда fdformat. Конечно, дискеты уже почти не используются, но вдруг вам не повезло с работой и техникой.
tar
По ходу изложения данной книги мы иногда будем устанавливать различные программы, часть из них поставляется в виде архивов tar.gz. Чаще всего это программы, хранимые в исходных кодах. Для развертывания такого файла нужно выполнить команду:
tar xzvf имяфайла.tar.gz
Как правило, после выполнения команды в текущей директории будет создан каталог с таким же именем, как у архива (только без расширения). В нем вы сможете найти все распакованные файлы.
rpm
В настоящее время большинство программ поставляются уже не в исходных кодах, а в виде rpm-пакетов. Их установка намного проще, т. к. программы в них уже скомпилированы. Если вы используете MC, то выберите rpm-пакет и нажмите клавишу <Enter>. Таким образом, вы войдете в него как в директорию и увидите содержимое.
Каждый пакет обязательно содержит исполняемый файл install. Запустите его для установки пакета. Или запустите upgrade для обновления уже установленного пакета.
Если вы не используете MC, то для установки нового пакета можно выполнить команду:
rpm –i пакет
Для обновления уже установленного пакета можно выполнить команду с параметром –U:
rpm –U пакет
Для того чтобы видеть ход инсталляции, можно указать еще и ключ –v. Таким образом, команда установки будет выглядеть следующим образом:
rpm –iv пакет
which
Иногда необходимо знать каталог, в котором расположена программа. Для этого используется команда which с именем программы в качестве параметра, которая проверит основные каталоги, содержащие исполняемые файлы. Например, чтобы определить, где находится программа просмотра содержимого каталогов ls, выполните следующую команду:
which ls
В результате вы увидите путь /bin/ls. Если ваша ОС поддерживает псевдонимы (alias) команд, то можно будет увидеть и его. Таким образом, после выполнения команды на экране выведется:
alias ls='ls –color=tty'
/bin/ls
Журнал позволяет администратору узнать об активности внутри системы, и в случае непредвиденной ситуации узнать причину и как хакер проник в систему. Эта информация поможет исправить ошибку в конфигурации или найти программу/сервис, требующую обновления.
Помимо этого, журнал может помочь вам узнать, кто именно сейчас подключен к серверу и что делает. Это так же может быть полезным при мониторинге сервера.
В этом разделе мы рассмотрим команды, которые помогут вам в нелегкой работе с журналом.
who
Команда who позволяет узнать, кто сейчас зарегистрирован в системе и сколько времени в ней находится. Информация достается из файла /var/run/utmp. Введите эту команду, и на экране появится список примерно следующего вида:
robert tty1 Dec 8 10:15
root tty2 Dec 8 11:07
Из этого списка становится ясно, что пользователь robert работает за первым терминалом (tty1) и вошел в систему 8 декабря в 10 часов 15 минут.
Большинство хакеров при входе в систему выполняют эту команду, чтобы выяснить, есть ли сейчас в системе администратор. Если пользователь root присутствует, то начинающие хакеры стараются уйти, т. к. опасаются, что их знаний не хватит, чтобы остаться незамеченными.
Это еще одна причина, по которой администратор не должен входить в систему под учетной записью root. Лучше всего работать как простой пользователь, а когда не хватает прав, то переключаться на привилегированного. На такой случай я создал учетную запись, для которой установил UID равный нулю. Она позволяет получить доступ ко всей системе, и при этом имеет имя отличное от root, и не вызовет подозрений, когда я буду работать. Так что, в моем случае никогда нельзя увидеть пользователя root.
users
Эта команда позволяет вытащить из журнала /var/run/utmp список всех пользователей, которые сейчас зарегистрированы в системе.
В журнале /var/run/utmp информация хранится временно, только на момент присутствия пользователя. Когда он выходит из системы, соответствующая запись удаляется. После этого выяснить, кто и когда работал можно только по журналу /var/log/wtmp. Это также бинарный файл, поэтому его содержимое можно увидеть с помощью специализированных программ.
last
Команда позволяет выяснить, когда и сколько времени определенный пользователь находился в системе. В качестве параметра передается интересующее имя. Например, следующая директива отображает время входа и продолжительность нахождения в системе пользователя robert:
last robert
Выполнив команду, вы увидите на экране примерно следующий список:
robert tty1 Thu Dec 2 12:17 — 12:50 (00:33)
По этой записи можно понять, что robert находился за терминалом (tty1), зашел в систему 2 декабря на 33 минуты (с 12:17 до 12:50). Если пользователь работал не локально, а через сеть, то будет отображена информация о хосте, с которого входили в систему.
Если выполнить эту команду для себя, то может вывалиться такой список, что читать его будет невозможно, потому что вы достаточно часто работаете в системе. Чтобы ограничить выводимые данные, можно указать ключ –n и количество отображаемых строк. Например, следующая команда выдаст информацию о последних пяти входах:
last –n 5 robert
На рисунке выше я попытался выполнить команду last под правами простого смертного, на что система на меня неплохо выругалась. Пришлось переключиться на root, после чего команда выполнилась без проблем.
lastlog
Если выполнить команду lastlog, то она выведет на экран перечень всех пользователей с датами их последнего подключения к системе. Пример списка:
Username Port From Latest
root ftpd2022 192.168.77.10 Mon Feb 21 12:05:06 +0300 2005
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
vcsa **Never logged in**
mailnull **Never logged in**
rpm **Never logged in**
xfs **Never logged in**
apache **Never logged in**
ntp **Never logged in**
rpc **Never logged in**
gdm **Never logged in**
rpcuser **Never logged in**
nscd **Never logged in**
ident **Never logged in**
radvd **Never logged in**
squid **Never logged in**
mysql **Never logged in**
flenov ftpd2022 192.168.77.10 Mon Feb 21 12:05:06 +0300 2005
named **Never logged in**
robert tty1 Mon Feb 21 12:10:47 +0300 2005
Список состоит из четырех колонок:
имя пользователя из файла /etc/passwd;
порт или терминал, на который происходило подключение;
адрес компьютера, если вход был по сети;
время входа.
С помощью lastlog удобно контролировать системные записи. У них дата последнего входа должна быть **Never logged in**, потому что под ними нельзя войти в систему (в качестве командной оболочки установлены /bin/false, /dev/null, /sbin/nologin и др.). Если вы заметили, что кто-либо проник в систему через одну из этих учетных записей, то это значит, что хакер использует ее, изменив настройки.
Простая замена командной оболочки в файле /etc/passwd может открыть хакеру потайную дверь, и администратор не заметит этой трансформации. Но после выполнения команды lastlog все неявное становится явным.
Обращайте внимание на тип подключения и адрес. Если что-то вызывает подозрение, то можно выявить атаку на этапе ее созревания.
lsof
С помощью этой команды можно определить, какие файлы и какими пользователями открыты в данный момент. Результат выполнения команды:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 3,2 4096 2 /
init 1 root rtd DIR 3,2 4096 2 /
init 1 root txt REG 3,2 26920 635256 /sbin/init
init 1 root mem REG 3,2 89547 553856 /lib/ld-2.2.5.so
init 1 root 10u FIFO 3,2 195499 /dev/initctl
keventd 2 root cwd DIR 3,2 4096 2 /
keventd 2 root rtd DIR 3,2 4096 2 /
kapmd 3 root 10u FIFO 3,2 195499 /dev/initctl
Это далеко не полный результат. Даже если в данный момент вы один работаете с системой, количество открытых файлов может исчисляться парой десятков, и число их заметно растет, если в системе несколько пользователей, ведь один файл может открываться несколько раз каждым из них. Это касается в основном системных конфигурационных файлов.
ОС Linux многозадачная система, а это значит, что в ней одновременно может выполняться сразу несколько задач. Несколько задач может работать даже в одном терминале. Как запустить команду в фоне?
Если команда работает очень долго, то вы можете запустить ее на выполнение в фоновом режиме. Для этого используется символ & который нужно поставить в конце команды. Например, у меня на работе есть программа сервер OLAP отчетности, которая написана на Java и при запуске захватывает консоль. Это значит, что консоль блокируется программой, и пока программа не будет завершена, я не могу закрыть консоль или выполнить в ней какую-либо команду. Если таким образом запустить несколько серверов, то на рабочем столе количество консолей начинает расти. Чтобы избавиться от этого, достаточно после команды поставить символ &:
> start-olap-server.sh &
Теперь программа запускается на выполнение, но не блокирует консоль. Да, вы видите вывод на экране, но в любой момент может забрать консоль себе, нажав Enter. Вы можете закрывать консоль, и стартующая программа не прервет свою работу.
В книге Linux глазами хакера я подробно рассказывал о работе с командами, выполняемыми в фоновом режиме. Здесь же мы немного пробежимся по этой теме еще раз, но более быстрыми шагами.
Чтобы просмотреть список программ, уже работающих в фоне, выполните команду jobs.
Число, которое вы видите в квадратных скобках – это номер выполняемой задачи. В фон можно отправить команду нажатием Ctrl+Z. В этом случае команда уходит в фон, но перестает выполняться.
Знак плюса слева от имени программы – показывает активную запись. Если выполнить команду fg, то именно эта команда станет активной. Да, если команду нужно перевести из фона на передний план, нужно выполнить fg. Если нужно вывести на передний план не активную, а определенную задачу, то после команды fg укажите номер нужной программы.
В этом разделе мы поговорим об общих командах и просто командной оболочке. Эта информация поможет вам лучше понять и эффективнее использовать командную строку в ОС Linux.
С помощью команды alias можно создавать псевдонимы для команд. Например, если вы часто выполняете какое-то действие с длинной командой и кучей параметров, то вы можете создать для нее псевдоним. Например, команда для просмотра текущего каталога используется команда ls, но она показывает короткое содержимое, без прав доступа, что иногда бывает очень нужным. Каждый раз писать ls и параметр –I нудно, поэтому можно создать псевдоним ll:
alias ll="ls -I"
Теперь, выполняя команду ll будет идентично выполнению ls –I. Но не торопитесь делать именно этот псевдоним в своей системе. Вполне возможно, что она уже есть у вас, по крайней мере, у меня в дистрибутиве есть.
Теперь поговорим о том, как можно направлять выходные данные команды не на экран, а, например, в файл. Для этого используем символ >. Например, выполните команду:
> ls > outfile.txt
В результате выполнения этой команды, результат (т.е. содержимое каталога) не будет выведено на экран, а будет сохранено в файл.
Если отобразить содержимое файла:
> cat outfile.txt
То вы увидите то, что должно было быть на экране еще после выполнения той команды.
Мы можем не только выводить результат в файл, но и получать параметры из файла. Например, можно выполнить команду:
> cat < infile.txt
Команде cat в качестве параметров будут передано содержимое infile.txt.
С помощью символа вертикальной черты | вы можете изменять стандартный поток ввода вывода. Допустим, что вы хотите узнать, когда в систему последний раз входил пользователь по имени flenov. Для этого можно выполнить команду lastlog. Но если в системе зарегистрировано 1000 пользователей, то найти нужного будет проблематично. Он может находиться в любом месте, ведь результат не отсортирован. Представьте себе, если бы телефонная книга не содержала всех абонентов в отсортированном виде! Это была бы катастрофа.
Как отсортирован вывод команды? Да очень просто, нужно направить список пользователей команде sort, которая сортирует входящие данные и выводит их в отсортированном виде. А это можно сделать с помощью символа вертикальной черты:
> lastlog | sort
А что если вам нужно просто выполнить последовательность команд? В этом случае вы пишете эти команды через точку с запятой. Например:
> ls > ~/outfile.txt; cat ~/outfile.txt; ls –al ~/outfile.txt
Эта команда идентична вводу трех отдельных команд:
> ls > ~/outfile.txt
> cat ~/outfile.txt
> ls –al ~/outfile.txt
В первой строке я запрашиваю отображение файлов текущей директории и сохранение результата в файл outfile.txt в домашней директории пользователя (на домашнюю директорию указывает символ ~).
Вторая команда отображает содержимое созданного файла. Так как эта команда будет выполнена после завершения первой, файл уже будет существовать. Третья команда отображает параметры файла, его права доступа и время создания.
Если команды разделить с помощью символов && то вы как бы указываете, что обе команды должны быть выполнены. Если первая команда не выполниться, то вторая уже не будет выполняться. Например, если файл outfile2.txt не существует, то вторая команда не будет выполнена.
> ls ~/outfile2.txt && cat ~/outfile.txt
Если же нужно выполнить одну из команд, то разделите их символоми двух вертикальных черточек: ||. Например:
> ls ~/outfile2.txt && cat ~/outfile.txt
Если файл outfile2.txt не существует, то будет выполнена вторая команда. Если же он существует, значит, первая команда выполниться корректно, а вторая не выполниться никогда.
Небольшой секрет – когда вы набираете команды, то можно экономить время с помощью кнопки Tab. Нужно всего лишь начать набирать команду и нажать Tab. Например, если вы находитесь в корне, то там только одна директория на букву h и это home. Наберите букву h и нажмите Tab, оболочка сама допишет полное имя директории. То же самое касается и файлов.
Если вам нужно повторить выполнение введенной ранее команды, то можете использовать клавиши вверх или вниз. Нажав кнопку вверх, в командной строке появиться последняя введенная команда. Нажмите еще раз, и увидите предпоследнюю. Таким образом, можно перемещаться по истории введенных команд.
Данный документ написан Фленовым Михаилом и распространяется только на компакт диске к книге «Linux глазами хакера» или на сайтах автора. Вы можете копировать этот документ куда угодно, но нельзя выкладывать в Интернете или других носителях информации без согласия автора.
Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание
Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.
Добавить Комментарий