Здесь не будет пересказа манов (документации), и статья никак не отменяет и не заменяет их чтение. Вместо этого я расскажу о главных вещах (командах, приемах и принципах), которые надо осознать с самого начала работы в unix shell-е, чтобы работа происходила эффективно и приятно.
Статья касается полноценных unix-подобных окружений, с полнофункциональным шеллом (предпочтительно zsh или bash)и достаточно широким набором стандартных программ.
В целом работа через шелл выглядит так: пользователь (т.е. вы) с клавиатуры вводит команду, нажимает Enter, система выполняет команду, пишет на экран результат выполнения, и снова ожидает ввода следующей команды.
Типичный вид шелла:
Шелл - это основной способ для взаимодействия со всеми Unix-подобными серверными системами.
Если вы работаете за машиной, на которой установлена Ubuntu, вам надо запустить программу Terminal. По окончании работы можно просто закрыть окно.
На MacOS - тоже запустить Terminal.
Для доступа к удаленному серверу - воспользоваться ssh (если локально у вас MacOS, Ubuntu или другая unix-like система) или putty (если у вас Windows).
Выполните несколько команд: hostname , ls , pwd , whoami . Теперь нажмите клавишу «вверх». В строке ввода появилась предыдущая команда. Клавишами «вверх» и «вниз» можно перемещаться вперед и назад по истории. Когда долистаете до hostname , нажмите Enter - команда выполнится еще раз.
Команды из истории можно не просто выполнять повторно, а еще и редактировать. Долистайте историю до команды ls , добавьте к ней ключ -l (получилось ls -l , перед минусом пробел есть, а после - нет). Нажмите Enter - выполнится модифицированная команда.
Пролистывание истории, редактирование и повторное выполнение команд - самые типичные действия при работе в командной строке, привыкайте.
Прекрасной особенностью текста является то, что его можно копировать и вставлять, это верно и для командной строки.
Попробуйте выполнить команду date +"%y-%m-%d, %A"
Вводили ли вы ее целиком руками или скопировали из статьи? Убедитесь, что вы можете ее скопировать, вставить в терминал и выполнить.
После того, как научитесь пользоваться man "ом, убедитесь, что можете скопировать и выполнить примеры команд из справки. Для проверки найдите в справке по программе date раздел EXAMPLES , скопируйте и выполните первый приведенный пример (на всякий случай: знак доллара не является частью команды, это условное изображение приглашения к вводу).
Как именно копировать текст из терминала и вставлять его в терминал - зависит от вашей системы и от ее настроек, поэтому дать универсальную инструкцию, к сожалению, не получится. На Ubuntu попробуйте так: копирование - просто выделение мышью, вставка - средняя кнопка мыши. Если не работает, или если у вас другая система - поищите в Интернете или спросите более опытных знакомых.
Akira@latitude-e7240:
~/shell-survival-quide> ls
Makefile shell-first-steps.md shell-first-steps.pdf
shell-survival-quide.md shell-survival-quide.pdf
Если же добавить ключ -l , к каждому файлу выводится подробная информация:
Akira@latitude-e7240:
~/shell-survival-quide> ls -l
total 332
-rw-rw-r-- 1 akira akira 198 Feb 13 11:48 Makefile
-rw-rw-r-- 1 akira akira 15107 Feb 14 22:26 shell-first-steps.md
-rw-rw-r-- 1 akira akira 146226 Feb 13 11:49 shell-first-steps.pdf
-rw-rw-r-- 1 akira akira 16626 Feb 13 11:45 shell-survival-quide.md
-rw-rw-r-- 1 akira akira 146203 Feb 13 11:35 shell-survival-quide.pdf
Это очень типичная ситуация: если к вызову команды добавлять специальные модификаторы (ключи, опции, параметры), поведение команды меняется. Сравните: tree / и tree -d / , hostname и hostname -f .
Кроме того, команды могут принимать в качестве параметров имена файлов, каталогов или просто текстовые строки. Попробуйте:
Ls -ld /home ls -l /home grep root /etc/passwd
Попробуйте: man grep , man atoi , man chdir , man man .
Пролистывание вперед и назад делается кнопками «вверх», «вниз», «PageUp», «PageDown», выход из просмотра справки - кнопкой q . Поиск определенного текста в справочной статье: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям - клавиша n .
Все справочные статьи делятся на категории. Самые важные:
Посмотреть список всех доступных на машине справочных статей можно с помощью команды man -k . (точка - тоже часть комады).
Попробуйте и сравните поведение:
Cat /etc/bash.bashrc cat /etc/bash.bashrc |less
Можно передать файл в пролистыватель сразу в параметрах:
Less /etc/bash.bashrc
Пролистывание вверхи и вниз - кнопки «вверх», «вниз», «PageUp», «PageDown», выход - кнопка q . Поиск определенного текста: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям - клавиша n . (Узнаете инструкцию про man ? Ничего удивительного, для вывода справки тоже используется less .)
Посмотреть права на файл можно с помощью ls -l . Например:
> ls -l Makefile
-rw-r--r-- 1 akira students 198 Feb 13 11:48 Makefile
Этот вывод означает, что владельцу (akira) можно читать и писать файл, группе (students) - только читать, всем прочим пользователя - тоже только читать.
Если при работе вы получаете сообщение permission denied , это значит, что у вас недостаточно правна объект, с которым вы хотели работать.
Подробнее читайте в man chmod .
Запустите программу wc , введите текст Good day today , нажмите Enter, введтие текст good day , нажмите Enter, нажмите Ctrl+d. Программа wc покажет статистику по количеству букв, слов и строк в вашем тексте и завершится:
> wc
good day today
good day
2 5 24
В данном случае вы подали в STDIN программы двухстрочный текст, а в STDOUT получили три числа.
Теперь запустите команду head -n3 /etc/passwd , должно получиться примерно так:
> head -n3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
В этом случае программа head ничего не читала из STDIN , а в STDOUT написала три строки.
Можно представить себе так: программа - это труба, в которую втекает STDIN , а вытекает STDOUT .
Важнейшее свойство юниксовой командной строки состоит в том, что программы-«трубы» можно соединять между собой: выход (STDOUT) одной программы передавать в качестве входных данных (STDIN) другой программе.
Такая конструкция из соединенных программ называется по-английски pipe (труба), по-русски - конвейер или пайп.
Объединение программ в конвейер делается символом | (вертикальная черта)
Выполните команду head -n3 /etc/passwd |wc , получится примерно следующее:
> head -n3 /etc/passwd |wc
3 3 117
Произошло вот что: программа head выдала в STDOUT три строки текста, которые сразу же попали на вход программе wc , которая в свою очередь подсчитала количество символов, слов и строк в полученном тексте.
В конвейер можно объединять сколько угодно программ. Например, можно добавить к предыдущему конвейеру еще одну программу wc , которая подсчитает, сколько слов и букв было в выводе первой wc:
> head -n3 /etc/passwd |wc |wc 1 3 24
Составление конвейеров (пайпов) - очень частое дело при работе в командной строке. Пример того, как это делается на практике, читайте в разделе «Составление конвейера-однострочника».
Date > /tmp/today.txt
В результате выполнения этой команды на диске появится файл /tmp/today.txt . Посмотрите его содержимое с помощью cat /tmp/today.txt
Если файл с таким именем уже существовал, его старое содержимое будет уничтожено. Если файл не существовал, он будет создан. Каталог, в котором создается файл, должен существовать до выполнения команды.
Если надо не перезаписать файл, а добавить вывод в его конец, используйте >> :
Date >> /tmp/today.txt
Проверьте, что теперь записано в файле.
Кроме того, программе можно вместо STDIN передать любой файл. Попробуйте:
Wc
Если вы разобрались со сложной проблемой (самостоятельно, с помощью Интернета или других людей) -- запишите свое решение на случай, если такая же проблема снова возникнет у вас или ваших товарищей. Записывать можно в простой текстовый файл, в Evernote, публиковать в соц.сетях.
Вытащить из истории предыдущую команду, добавить в конвейер еще одну команду, запустить, повторить .См. также раздел «Составление конвейера-однострочника».
Некоторых программ у вас может не быть, их надо установить дополнительно. Кроме того, некоторые опции этих программ доступны только привилегированным пользователям (root "у).
Шаг 1.
Понять, какая программа выдает примерно нужные данные, хотя бы и не в чистом виде. Для нашей задачи стоит получить список всех процессов в системе:
ps axuww . Запустить.
Шаг 2.
Посмотреть на полученные данные глазами, придумать фильтр, который выкинет часть ненужных данных. Часто это grep или grep -v . Клавишей «Вверх» вытащить из истории предыдущую команду, приписать к ней придуманный фильтр, запустить.
Ps axuww |grep `whoami`
- только процессы текущего пользователя.
Шаг 3.
Повторять пункт 2, пока не получатся чистые нужные данные.
- все процессы с нужным именем (плюс, может быть, лишние вроде vim task-6-server.c и т.п.),
Ps axuww |grep `whoami` | grep "\
- только процессы с нужным именем
Ps axuww |grep `whoami` | grep "\
Pid-ы нужных процессов, п. 3 выполнен
Шаг 4.
Применить подходящий финальный обработчик. Клавишей «Вверх» вытаскиваем из истории предыдущую команду и добавляем обработку, которая завершит решение задачи:
Вот некоторые программы, которые определенно вам пригодятся, если вы будете жить в командной строке:
Командная строка (Shell - консоль) в системе Linux
Запуск консоли
:
Способ 1. Откройте главное меню системы и в разделах найдите и запустите команду «Терминал». Этот режим удобен тем, что графическая среда продолжает работать, а консоль запускается в отдельном окне.
Для выхода из консоли введите команду exit и нажмите на клавишу Enter.
Способ 2. Нажмите на клавиатуре комбинацию клавиш Ctrl+Alt+F1 - произойдет переключение в консоль №1 (текстовых консолей 6 и можно переключаться между ними комбинацией Ctrl+Alt+Fn , где n-номер нужной консоли), работающую в текстовом режиме.
Чтобы начать сеанс работы нужно ввести имя пользователя и пароль. Многозадачность системы Linux позволяет одновременно на одном компьютере в разных консолях открывать сеансы от имени разных пользователей.
Вы увидите в текстовой информации tty1 (если консоль №1) и в новой строке имя компьютера и приглашение ввести имя пользователя
login:
после ввода имени появится приглашение ввести пароль
password:
Чтобы завершить сеанс работы в консоли введите команду exit и нажмите на клавишу Enter.
Чтобы вернуться в графическую среду KDE нужно нажать комбинацию Ctrl+Alt+F7
Команды:
Команды следует вводить с клавиатуры, при этом параметры команд (ключи и аргументы) отделять друг от друга «пробелом» и для выполнения нажать клавишу Enter. Если командой выводятся сообщения, то они появятся на экране монитора ниже. При заполнении всего экрана новые строчки будут появляться внизу экрана, а информация будет «прокручиваться» вверх.
uname - выводит информацию
об используемой операционной системе и платформе
Для вывода подробной информации нужно использовать в качестве параметра команды ключи. Например, введите команду так:
uname -a
вы увидите полную информацию о компьютерной системе, включая версию ядра Linux и информацию о центральном процессоре компьютера.
Для того чтобы узнать какие ключи можно использовать с этой командой введите:
uname --help
uptime - показывает текущее время, продолжительность сеанса, количество пользователей и загруженность процессора.
cal - форматированный календарь на текущий месяц
cal 2009 - показать форматированный календарь на 2009 год.
Задание 1:
C помощью команды uname и ключей выясните номер версии и дату создания ядра (kernel) системы Linux на компьютере.
Выясните командой uptime сколько времени проработал компьютер.
Команды для работы с разделами
(дисками):
df - показывает количество используемого и свободного дискового пространства для всех подключенных разделов (дисков) файловой системы.
du - показывает количество блоков диска, занятых каждым из файлов и каталогов в текущем каталоге.
Команды для работы c каталогами (папками, директориями):
cd [имя_каталога] - смена текущего каталога. В качестве аргумента через пробел указывается имя каталога (папки, директории).
Ls [имя_каталога] - цветной вывод содержимого каталога с именем (папки, директории).
Ключ -l выводит расширенную информацию по файлам и каталогам, т.е. более подробно. Пример команды для вывода списка файлов и папок, находящихся в домашнем каталоге:
ls -l ~
dir [имя_каталога] - простой (нецветной) вывод содержимого каталога (папки, директории).
Ключ -l выводит расширенную информацию по файлам и каталогам, т.е. более подробно. Пример команды для вывода списка файлов и папок, находящихся в корневом каталоге:
dir -l /
tree [имя_каталога] - показывает каталоги и находящиеся в них файлы и подкаталоги в виде дерева. Для подробной справки следует использовать такой ключ: tree --help
Пример построения от текущего каталога дерева только имен каталогов:
tree -d
mkdir [имя_каталога] - создание нового каталога.
rmdir [имя_каталога] - удаление указанного пустого каталога.
mv [старое_имя_каталога] [новое_имя_каталога] - переименовывает каталог
Перенаправление ввода-вывода:
команда > имя_файла - перенаправляет вывод текстовой информации от команды вместо экрана компьютера в новый текстовый файл (если файл существовал, то он удаляется и создается заново). Пример вывода форматированного календаря за 2009 год в текстовый файл, который потом можно просмотреть в текстовом редакторе:
cal 2009 > 2009year.txt
команда >> имя_файла - перенаправляет вывод от команды, дописывая информацию в текстовой файл, вместо вывода на экран компьютера (если файл не существовал, то он создается). Пример из двух команд для вывода форматированного календаря за декабрь 2008 и январь 2009 год в текстовый файл, который потом можно просмотреть в текстовом редакторе:
cal 12 2008 > year.txt
cal 1 2009 >> year.txt
команда
команда1 | команда2 - перенаправление вывода команды1 на ввод команды2
Команды для работы c файлами
:
touch [имя_файла] - создает новый пустой файл.
echo > [имя_файла] - создает новый текстовый файл (если файл с таким именем уже существует, то удаляет его и создает новый) перенаправляя вывод команды echo (выводит сообщение на экран) в текстовый файл.
cat [имя_файла] - выводит содержимое файла (текст) на экран. Так как в идеологии Linux"a - все есть файлы, то эта команда может быть использована и так:
cat /proc/cpuinfo отобразить информацию о процессоре
cat /proc/interrupts показать прерывания
cat /proc/meminfo проверить использование памяти
cat /proc/swaps показать файл(ы) подкачки
cat /proc/version вывести версию ядра
cat /proc/net/dev показать сетевые интерфейсы и статистику по ним
cat /proc/mounts отобразить смонтированные файловые системы
Cp имя_файла_источника имя_файла_приемника - копирует информацию из файла источника в файл приемника. Если путь не указан, то продразумевается текущий каталог.
Rm [имя_файла] - удаляет указанный файл.
Mv старое_имя_файла новое_имя_файла - поменять файлу имя.
В этой статье постараемся собрать наиболее часто используемые команды в SSH или linux shell. Список не является окончательным, описание команд естественно не полное, полное описание команд Вы можете получить в linux shell# man command.
ВНИМАНИЕ: ПОМНИТЕ ЧТО КОМАНДЫ LINUX ЧУСТИТЕЛЬНЫ К РЕГИСТРУ, В КОТОРОМ ИХ НАБИРАЮТ. Например: Команды Netscape, NETSCAPE и nEtscape это три различные команды, точно также my_filE, my_file, и my_FILE это три различных файла.
1. Естественные сочетания клавиш и обозначения
Переключение на первый консольный терминал
Переключение на #ый консольный терминал (#=1..6)
Переключение на графический терминал (если таковой запущен)
Дополнение текущей последовательности символов, набранной в консоли, до исполняемой команды. Эта
особенность сильно облегчает жизнь при наборе команд! Это работает также и при загрузке компьютера через LILO!
Просмотр и редактирование буфера истории команд. Для исполнения команды нажмите .
Просмотр текста выведенного на консольный терминал и ушедшего за приделы экрана. Перемещение в
вверх.
То же что и выше. Перемещение в вниз.
[+]
(в X-windows) Изменение разрешения. Переключение к следующей конфигурации.
[-]
(В X-windows) Изменение разрешения. Возврат к предыдущей конфигурации.
(в X-windows) Убить текущий сервер X-windows (выйти из графической оболочки, уничтожив все
процессы). Убить текущий процесс.
d
Выход из текущего терминала (обычно работает).
d
Посылка текущему процессу сигнала [Конец-файла] (конец файла).
s
Остановка вывода на терминал.
q
Возобновление вывода на терминал. Попробуйте эту комбинацию клавиш, если ваш терминал непонятно
почему перестал отвечать на ваши запросы.
z
Послать текущий процесс в background.
reset
Восстановление значений по умолчанию для "запорченного" терминала (терминал показывает странные символы
и неадекватно реагирует на нажатие клавиш). Используйте эту команду если вы попытались вывести на экран бинарный
файл. Вероятно вы не сможете увидеть эту команду в процессе ее набора.
~
Моя домашняя директория. Например cd ~/моя_поддиректория.
. (точка)
Текущая директория.
.. (две точки)
Родительская директория для текущего каталога.
2. Стандартные команды и команды, дающие информацию по системе
pwd
Вывести текущую директорию.
hostname
Вывести или изменить сетевое имя машины.
whoami
Ввести имя под которым я зарегистрирован.
date
Вывести или изменить дату и время. Например, чтобы установить дату и время равную 2000-12-31 23:57,
следует выполнить команду: date 123123572000
time
Получить информацию о времени, нужного для выполнения процесса + еще кое-какую информацию. Не путайте
эту команду с date. Например: Я могу определить как много времени требуется для вывода списка файлов в директории,
набрав последовательность: time ls
who
Определить кто из пользователей работает на машине.
rwho -a
Определение всех пользователей, подключившихся к вашей сети. Для выполнения этой команды требуется,
чтобы был запущен процесс rwho. Если такого нет - запустите "setup" под суперпользователем.
finger [имя_пользователя]
Системная информация о зарегистрированном пользователе. Попробуйте: finger root
uptime
Количество времени прошедшего с последней перезагрузки.
ps a
Список текущих процессов.
top
Интерактивный список текущих процессов отсортированных по использованию cpu.
uname
Вывести системную информацию.
free
Вывести информацию по памяти.
df -h
(=место на диске) Вывести информацию о свободном и используемом месте на дисках (в читабельном
виде).
du / -bh | more
(=кто сколько занял) Вывод детальной информации о размере файлов по директориям начиная с
корневой (в читабельном виде).
cat /proc/cpuinfo
Системная информация о процессоре. Заметьте, что файла в /proc директории - не настоящие
файлы. Они используются для получения информации, известной системе.
cat /proc/interrupts
Используемые прерывания.
cat /proc/version
Версия ядра Linux и другая информация
cat /proc/filesystems
Вывести используемые в данный момент типы файловых систем.
cat /etc/printcap
Вывести настройки принтера.
lsmod
(как root) Вывести информацию о загруженных в данный момент модулях ядра.
set|more
Вывести текущие значения переменных окружения.
echo $PATH
Вывести значение переменной окружения "PATH" Эта команда может использоваться для вывода значений
других переменных окружения. Воспользуйтесь командой set, для получения полного списка.
3. Работа с сетью
netconf
(как root) Очень хорошая программа настройки сети, использующая для интерактивной работы с
пользованием, текстовое меню.
ping [имя_машины]
"Проверка на вшивость". Есть или нет контакта с другой машиной (в качестве параметре
команде можно передавать сетевое имя машины или IP адрес), нажмите -C когда вся требуемая информация будет
получена.
route -n
Вывести таблицу маршрутизации (the routing table).
ipfwadm -F -p m
Настроить firewall.
ifconfig
(как root) Вывести информацию о текущих сетевых интерфейсах (ethernet, ppp, и т.д.) Ваша первая
ethernet плата плата будет показана как eth0, вторая как eth1, первый ppp модем как ppp0 и так далее. "lo" -
расшифровывается как "loopback only" сетевой интерфейс, который должен быть постоянно активирован. Используйте
соответствующие опции (смотрите результат выполнения ifconfig --help) для настройки сетевых интерфейсов.
ifup [имя_сетевого_интерфейса]
(/sbin/ifup при работе под обычным пользователем) Активизация соответствующего
сетевого интерфейса. Например: ifup eth0 ifup ppp0. Пользователь может активизировать и выключить сетевое интерфейс
ppp только когда установлены соответствующие права доступа (права можно установить в процессе настройки ppp через
"netconf")
ifdown [имя_сетевого_интерфейса]
(/sbin/ifdown при работе под обычным пользователем). Диактивизация
соответствующего сетевого интерфейса.
4. Простейшие действия
ls
Список файлов в текущей директории. Команда выполнении команды dir выполняется команда ls.
cd [директория]
Сменить директорию.
cp [что копировать][куда копировать]
Копировать файлы.
mcopy [что копировать][куда копировать]
Копировать файлы при работе с файловой системой dos (монтировать
диска dos необязательно). Например: mcopy a:\autoexec.bat ~/junk . Для дополнительной информацией по подобным
командам (mdir, mcd, mren, mmove, mdel, mmd, mrd, mformat ....) ознакомьтесь с man mtools.
mv [что перемещать][куда перемещать]
Переместить или переименовать файл.
ln -s [на что сделать ссылку][имя ссылки]
Создать символическую ссылку.
rm [файлы]
Удалить файлы.
mkdir [директорию]
Создать новую директорию.
rmdir [директорию]
Удалить пустую директорию.
rm -r [файлы и/или директории]
(рекурсивное удаление) Удалить файлы, директории и их поддиректории.
ОСТОРОЖНЕЙ с этой командой, если у вас права суперпользователя! Пока у Linux нет системы полного восстановления
удаленных файлов (если вы не пользуетесь специальными программами для помещения удаленный файлы в специальный
каталог - a la корзинка под W95).
cat [имя файла] | more
Просмотр содержимого текстового файла по одной странице за раз.
less [имя файла]
Просмотр содержимого текстового файла с возможностью вернуться к предыдущим страницам.
Нажмите q когда захотите выйти из программы. "Less" - аналог команды DOS "more", хотя очень часто "less" бывает
более удобной чем "more".
pico [имя файла]
Редактировать текстовый файл.
lynx
Просмотр файла html или WWW ссылки с помощью текстового браузера Lynx.
tar -zxvf [файлы]
Распаковать архив tgz или tar.gz, который вы вытянули из сети.
find / -name "имя файла"
Найти файл с именем "имя файла". Поиск начинается с директории / . "имя файла" может
содержать маску для поиска.
pine
Хорошая текстово - ориентированная программа для чтения электронной почты. Еще одна подобная программа
называется "elm". Netscape считывает ваши письма с вашего Internet адреса, а pine позволяет вам просматривать
"локальную" почту - то есть ту почту, которую посылает вам процесс son или cron.
mc
Запустить программу управления файлами "Midnight Commander" (Выглядит как "Norton Commander", но по своим
возможностям ближе к far или dn).
telnet [сервер]
Связаться по telnet с другой машиной. Используйте имя машины или ее IP адрес. Войдите с
помощью вашего пароля (вы должны быть зарегистрированы на этой удаленной машине). Это позволит вам войти на другую
машину и работать на ней, как будто вы сидите за ее клавиатурой (почти никаких отличий).
ftp [сервер]
Связаться по ftp с удаленным компьютером. Этот тип связи хорош для копирования файлов с/на
удаленную машину.
5. Основные Команды Администрирования
printtool
(как root в X терминале) Сконфигурировать ваш принтер.
setup
(как root) Сконфигурировать мышь, звуковую карту, клавиатуру, графическую оболочку X-windows и
системные службы. Очень простая в пользовании программа.
alias ls="ls -Fskb --color"
Создать alias - псевдоним для того чтобы одной командой можно было запустить
более сложную комбинацию команд. Поместите создание alias в файл /etc/bashrc если вы хотите, чтобы эти псевдонимы
были доступны всем пользователям вашей системы.
adduser [имя_пользователя]
Зарегистрировать нового пользователя (у вас должны быть права суперюзера).
Например: adduser ivanov . Не забудьте следующим делом настроить пароль пользователя. Директория пользователя
находится в каталоге /home/имя_пользователя.
useradd [имя_пользователя]
То же, что и adduser.
userdel [имя_пользователя]
Удалить пользователя из системы (вы должны зайти как root). С пользовательским
каталогом и не прочитанными письмами удаленного пользователя нужно разбираться отдельно.
groupadd [имя_группы]
Создать новую группу пользователей на вашей системе. Не обязательно создавать группу
непосредственно на основной машине.
passwd
Изменить пароль. Если вы суперпользователь, то вы можете изменить пароль любого зарегистрированного
пользователя набрав команду: passwd имя_пользователя
chmod [права доступа][файл]
(=change mode) Изменить права доступа файлов, чьим владельцем вы являетесь (если
вы root, в этом случае вы можете изменить права доступа для любого файла). Есть три способа доступа к файлу: чтение
- read (r), запись - write (w), исполнение - execute (x) и три типа пользователей: хозяин файла - owner (u), члены
той же группы, что и хозяин файла (g) и все остальные (o). Поверить текущие права доступа можно следующим способом:
ls -l имя_файла
. Если файл доступен всеми способами всем пользователям, то напротив имени файла будет
следующая комбинация букв: rwxrwxrwx
. Первые три буквы - это права доступа для хозяина/хозяйки файла, второй
триплет - права доступа для его/ее группы, следующая тройка - права доступа для остальных. Отсутствие права доступа
показывается как "-".; Например: Эта команда позволит вам установить права доступа на чтение для файла "junk" для
всех (all=user+group+others):
chmod a+r junk
Эта команда отнимет право доступа на исполнение файла у всех кроме пользователя и группы:
chmod o-x junk
Для получение дополнительной информации наберите chmod --help или man chmod или почитайте любое руководство по
Linux.
Вы можете установить права доступа по умолчанию для создаваемых вами файлов с помощью команды "umask" (наберите man
umask).
chown [новый_хозяин][файлы]
chgrp [новая_группа][файлы]
Изменить хозяина и группу для файла.
Вы можете использовать эти две команды, после того как сделали копию файла для кого- либо.
su
(=super user) Вход в систему как суперпользователь (у вас спросят ваш пароль). Набрав "exit" вы вернетесь
в вашу предыдущую пользовательскую оболочку. Пользователь root существует для администрирования системы и команда su
дает быстрый доступ к возможностям суперпользователя, когда вам это потребуется. Никогда не входите в систему под
пользователем root, используйте для этой цели команду su.
6. Контроль процессов
ps
(=print status) Вывести список текущих процессов с их IDs (PID) идентификаторами. Используйте ps axu для
того чтобы отобразить все процессы запущенные на вашей системе, которые имеют вас в качестве хозяина (это касается и
процессов которые отцеплены от терминала).
fg
Вернуть фоновый или приостановленный процесс в интерактивное (высокоприоритетное) состояние;
bg
Сделать процесс фоновым. Обратная функция от fg. Может следовать вслед за комбинацией z.
kill
"Убить" процесс. Для начала определите PID "убиваемого" процесса при помощи ps.
killall [имя_программы]
"Убить" все процессы по имени программы.
lpc
(как root) Проверить очередь принтера.
lpq
Вывести список очереди заданий на печать.
lprm [Номер Задание]
Удалить задание из очереди на печать.
nice [имя_программы]
Запустить процесс, установив его приоритет.
renice
Изменить приоритет процесса.
Обратите внимание на комбинации клавиш: c, z, s, и q. Они описаны ранее в разделе Естественные сочетания клавиш и обозначения.
Здесь не будет пересказа манов (документации), и статья никак не отменяет и не заменяет их чтение. Вместо этого я расскажу о главных вещах (командах, приемах и принципах), которые надо осознать с самого начала работы в unix shell-е, чтобы работа происходила эффективно и приятно.
Статья касается полноценных unix-подобных окружений, с полнофункциональным шеллом (предпочтительно zsh или bash)и достаточно широким набором стандартных программ.
В целом работа через шелл выглядит так: пользователь (т.е. вы) с клавиатуры вводит команду, нажимает Enter, система выполняет команду, пишет на экран результат выполнения, и снова ожидает ввода следующей команды.
Типичный вид шелла:
Шелл - это основной способ для взаимодействия со всеми Unix-подобными серверными системами.
Если вы работаете за машиной, на которой установлена Ubuntu, вам надо запустить программу Terminal. По окончании работы можно просто закрыть окно.
На MacOS - тоже запустить Terminal.
Для доступа к удаленному серверу - воспользоваться ssh (если локально у вас MacOS, Ubuntu или другая unix-like система) или putty (если у вас Windows).
Выполните несколько команд: hostname , ls , pwd , whoami . Теперь нажмите клавишу «вверх». В строке ввода появилась предыдущая команда. Клавишами «вверх» и «вниз» можно перемещаться вперед и назад по истории. Когда долистаете до hostname , нажмите Enter - команда выполнится еще раз.
Команды из истории можно не просто выполнять повторно, а еще и редактировать. Долистайте историю до команды ls , добавьте к ней ключ -l (получилось ls -l , перед минусом пробел есть, а после - нет). Нажмите Enter - выполнится модифицированная команда.
Пролистывание истории, редактирование и повторное выполнение команд - самые типичные действия при работе в командной строке, привыкайте.
Прекрасной особенностью текста является то, что его можно копировать и вставлять, это верно и для командной строки.
Попробуйте выполнить команду date +"%y-%m-%d, %A"
Вводили ли вы ее целиком руками или скопировали из статьи? Убедитесь, что вы можете ее скопировать, вставить в терминал и выполнить.
После того, как научитесь пользоваться man "ом, убедитесь, что можете скопировать и выполнить примеры команд из справки. Для проверки найдите в справке по программе date раздел EXAMPLES , скопируйте и выполните первый приведенный пример (на всякий случай: знак доллара не является частью команды, это условное изображение приглашения к вводу).
Как именно копировать текст из терминала и вставлять его в терминал - зависит от вашей системы и от ее настроек, поэтому дать универсальную инструкцию, к сожалению, не получится. На Ubuntu попробуйте так: копирование - просто выделение мышью, вставка - средняя кнопка мыши. Если не работает, или если у вас другая система - поищите в Интернете или спросите более опытных знакомых.
Akira@latitude-e7240:
~/shell-survival-quide> ls
Makefile shell-first-steps.md shell-first-steps.pdf
shell-survival-quide.md shell-survival-quide.pdf
Если же добавить ключ -l , к каждому файлу выводится подробная информация:
Akira@latitude-e7240:
~/shell-survival-quide> ls -l
total 332
-rw-rw-r-- 1 akira akira 198 Feb 13 11:48 Makefile
-rw-rw-r-- 1 akira akira 15107 Feb 14 22:26 shell-first-steps.md
-rw-rw-r-- 1 akira akira 146226 Feb 13 11:49 shell-first-steps.pdf
-rw-rw-r-- 1 akira akira 16626 Feb 13 11:45 shell-survival-quide.md
-rw-rw-r-- 1 akira akira 146203 Feb 13 11:35 shell-survival-quide.pdf
Это очень типичная ситуация: если к вызову команды добавлять специальные модификаторы (ключи, опции, параметры), поведение команды меняется. Сравните: tree / и tree -d / , hostname и hostname -f .
Кроме того, команды могут принимать в качестве параметров имена файлов, каталогов или просто текстовые строки. Попробуйте:
Ls -ld /home ls -l /home grep root /etc/passwd
Попробуйте: man grep , man atoi , man chdir , man man .
Пролистывание вперед и назад делается кнопками «вверх», «вниз», «PageUp», «PageDown», выход из просмотра справки - кнопкой q . Поиск определенного текста в справочной статье: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям - клавиша n .
Все справочные статьи делятся на категории. Самые важные:
Посмотреть список всех доступных на машине справочных статей можно с помощью команды man -k . (точка - тоже часть комады).
Попробуйте и сравните поведение:
Cat /etc/bash.bashrc cat /etc/bash.bashrc |less
Можно передать файл в пролистыватель сразу в параметрах:
Less /etc/bash.bashrc
Пролистывание вверхи и вниз - кнопки «вверх», «вниз», «PageUp», «PageDown», выход - кнопка q . Поиск определенного текста: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям - клавиша n . (Узнаете инструкцию про man ? Ничего удивительного, для вывода справки тоже используется less .)
Посмотреть права на файл можно с помощью ls -l . Например:
> ls -l Makefile
-rw-r--r-- 1 akira students 198 Feb 13 11:48 Makefile
Этот вывод означает, что владельцу (akira) можно читать и писать файл, группе (students) - только читать, всем прочим пользователя - тоже только читать.
Если при работе вы получаете сообщение permission denied , это значит, что у вас недостаточно правна объект, с которым вы хотели работать.
Подробнее читайте в man chmod .
Запустите программу wc , введите текст Good day today , нажмите Enter, введтие текст good day , нажмите Enter, нажмите Ctrl+d. Программа wc покажет статистику по количеству букв, слов и строк в вашем тексте и завершится:
> wc
good day today
good day
2 5 24
В данном случае вы подали в STDIN программы двухстрочный текст, а в STDOUT получили три числа.
Теперь запустите команду head -n3 /etc/passwd , должно получиться примерно так:
> head -n3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
В этом случае программа head ничего не читала из STDIN , а в STDOUT написала три строки.
Можно представить себе так: программа - это труба, в которую втекает STDIN , а вытекает STDOUT .
Важнейшее свойство юниксовой командной строки состоит в том, что программы-«трубы» можно соединять между собой: выход (STDOUT) одной программы передавать в качестве входных данных (STDIN) другой программе.
Такая конструкция из соединенных программ называется по-английски pipe (труба), по-русски - конвейер или пайп.
Объединение программ в конвейер делается символом | (вертикальная черта)
Выполните команду head -n3 /etc/passwd |wc , получится примерно следующее:
> head -n3 /etc/passwd |wc
3 3 117
Произошло вот что: программа head выдала в STDOUT три строки текста, которые сразу же попали на вход программе wc , которая в свою очередь подсчитала количество символов, слов и строк в полученном тексте.
В конвейер можно объединять сколько угодно программ. Например, можно добавить к предыдущему конвейеру еще одну программу wc , которая подсчитает, сколько слов и букв было в выводе первой wc:
> head -n3 /etc/passwd |wc |wc 1 3 24
Составление конвейеров (пайпов) - очень частое дело при работе в командной строке. Пример того, как это делается на практике, читайте в разделе «Составление конвейера-однострочника».
Date > /tmp/today.txt
В результате выполнения этой команды на диске появится файл /tmp/today.txt . Посмотрите его содержимое с помощью cat /tmp/today.txt
Если файл с таким именем уже существовал, его старое содержимое будет уничтожено. Если файл не существовал, он будет создан. Каталог, в котором создается файл, должен существовать до выполнения команды.
Если надо не перезаписать файл, а добавить вывод в его конец, используйте >> :
Date >> /tmp/today.txt
Проверьте, что теперь записано в файле.
Кроме того, программе можно вместо STDIN передать любой файл. Попробуйте:
Wc
Если вы разобрались со сложной проблемой (самостоятельно, с помощью Интернета или других людей) -- запишите свое решение на случай, если такая же проблема снова возникнет у вас или ваших товарищей. Записывать можно в простой текстовый файл, в Evernote, публиковать в соц.сетях.
Вытащить из истории предыдущую команду, добавить в конвейер еще одну команду, запустить, повторить .См. также раздел «Составление конвейера-однострочника».
Некоторых программ у вас может не быть, их надо установить дополнительно. Кроме того, некоторые опции этих программ доступны только привилегированным пользователям (root "у).
Шаг 1.
Понять, какая программа выдает примерно нужные данные, хотя бы и не в чистом виде. Для нашей задачи стоит получить список всех процессов в системе:
ps axuww . Запустить.
Шаг 2.
Посмотреть на полученные данные глазами, придумать фильтр, который выкинет часть ненужных данных. Часто это grep или grep -v . Клавишей «Вверх» вытащить из истории предыдущую команду, приписать к ней придуманный фильтр, запустить.
Ps axuww |grep `whoami`
- только процессы текущего пользователя.
Шаг 3.
Повторять пункт 2, пока не получатся чистые нужные данные.
- все процессы с нужным именем (плюс, может быть, лишние вроде vim task-6-server.c и т.п.),
Ps axuww |grep `whoami` | grep "\
- только процессы с нужным именем
Ps axuww |grep `whoami` | grep "\
Pid-ы нужных процессов, п. 3 выполнен
Шаг 4.
Применить подходящий финальный обработчик. Клавишей «Вверх» вытаскиваем из истории предыдущую команду и добавляем обработку, которая завершит решение задачи:
Вот некоторые программы, которые определенно вам пригодятся, если вы будете жить в командной строке: