Bash 23 продвинутые команды для глубокого изучения Linux


Оглавление (нажмите, чтобы открыть):

Изучение bash сразу с пользой для дела.

Хотелось бы найти статью-учебник (на русском) по командам bash, где в примерах разбираются скрипты запуска RedHat (Fedora) ну или другого популярного дистрибутива Linux.

Чтобы команды bash и примеры были в одном флаконе — важно, ибо изучаться оболочка будет на КПК Sony Clie PEG SJ30.

P.S. 1. Уровень знаний консольных команд Linux и bash — выше начального и ниже среднего.
2. Очень охота разобраться в ребусах-запусках сервисов из каталога /etc/rc.d/init.d а также каким это образом описания из /etc/sysconfig/networking/devices цепляются командой ifconfig
Ну и так далее.
3. Вы будете удивлены, при своих слабых зананиях администрирую сервер выхода в И-нет сетки из 25 выньдоуз-десктопов. Поднял на нем dovecot, sendmail, apache, vsftpd, iptables, squid.
А когда начинал, то думал — Linux машины может администрировать только человек, глубоко знающий ansi C (кстати, планирую потихоньку начинать учить) и bash.

Re: Изучение bash сразу с пользой для дела.

Re: Изучение bash сразу с пользой для дела.

Re: Изучение bash сразу с пользой для дела.

Не хочется выдавать военную тайну но изучать bash абсолютно бесполезно, изучай lisp

Re: Изучение bash сразу с пользой для дела.

> Чтобы команды bash и примеры были в одном флаконе

Открываешь в одном флаконе man bash, а в другом — rc-скрипт, потом соединяешь два флакона в один.

Re: Изучение bash сразу с пользой для дела.

Всем спасибо.
Я уже не одну книжку по bash прочитал. Но, как в известной итальянской песне поется: «Перечитай, Малую Землю и Возрождение, перечитай».

Собственно бесцельно все это трудно читать, а вот читать с целью разобраться в стартовых скриптах — самое оно. И более чем полезно для знания Linux, и командами они насыщены самыми разнообразными.

В общем, подготовил приведенные статьи для конвертации на Соньку.

>Не хочется выдавать военную тайну но изучать bash абсолютно бесполезно, изучай lisp

Я, конечно, понимаю, что есть даже lisp-машины. Однако об этом языке программирования методов искусственного интеллекта говорят с 1987 (по-моему) года, но широкого распространения он не получил.
Насколько я знаю, lisp-шелла для Unix нет. C-подобный шелл есть, а lisp — нет.

Кстати, я маленько программировал задачи из области методов искусственного интеллекта: Задачу о назначениях, Задачу коммивояжера, простенькие задачи из ретроспективного анализа шахматных окончаний.
ИМХО для этих целей мне оказалось достаточно Паскаля. Си скорее всего оказался бы еще лучше, особенно в плане быстродействия программ. А вот необходимость изучать Лисп не почувствовал.
А, кстати, есть ли какой-нибудь opensource проект по Лиспу?

Re: Изучение bash сразу с пользой для дела.

> об этом языке программирования методов искусственного интеллекта

Это не язык программирования AI.

> говорят с 1987 (по-моему) года

Говорят с более чем на 20 лет раньше, а первая реализация появилась почти на 30 лет раньше.

> широкого распространения он не получил

Он широко известен в узких кругах 🙂

> Насколько я знаю, lisp-шелла для Unix нет

> задачи из области методов искусственного интеллекта: Задачу о назначениях, Задачу коммивояжера

Кхм. Сами эти задачи к ИИ не имеют ровно никакого отношения. Разве что, какие-нибудь методы решения, типа эвристик.

> ИМХО для этих целей мне оказалось достаточно Паскаля

Вот в development в теме «чем плох C++» предложили сходить сюда: http://www.paulgraham.com/avg.html То, что ты сказал — типичный пример «blub paradox», описанного в этой статье.

> кстати, есть ли какой-нибудь opensource проект по Лиспу?

Emacs, Climacs :), sawfish (отдалённо), SCWM (это Scheme, но её можно считать диалектом :), AllegroServe (web-application server, http://allegroserve.sourceforge.net/), A Common LISP Hypermedia Server (http://www.ai.mit.edu/projects/iiip/doc/cl-http/server.html). Да вообще много чего, всего не перечислить.

Из интерпретаторов/компиляторов — clisp, GCL, sbcl, CMU CL. Раз уж Схему тоже приплели, то Guile, elk, .

Оболочка Bash — шпаргалка для начинающих

В данной шпаргалке затрагиваются следующие темы: введение в оболочку, навигация, основные команды, переменные окружения, коннекторы, конвейеры, перенаправление ввода/вывода, права доступа и комбинации клавиш.

Оболочка Bash: введение

Оболочка, или шелл (shell) — это программа, в нашем случае названная «bash», что является сокращением от Bourne Again Shell. Оболочка принимает ваши команды и передаёт их операционной системе. Для взаимодействия с системой используются терминалы, такие как gnome-terminal, eterm, nxterm и т. п.

Навигация

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

Команда pwd , сокращение от print working directory, отображает текущее местоположение в структуре каталогов.

Команда cd позволяет перейти в новый каталог.

Синтаксис Объяснение
cd Перемещение в домашний каталог
cd

Перемещение в домашний каталог
cd .. Перемещение на один уровень выше
cd — Перемещение в предыдущий каталог
cd Directory1 Перемещение в каталог Directory1
cd Directory1/Directory2 Перемещение в каталог Directory2 по указанному пути

mkdir

Команда mkdir создаёт новый каталог в текущем каталоге.

Основные команды

Команда man отображает руководства по командам. Например, следующая команда выдаст всю информацию о команде cat :

Команда cat считывает файл, переданный как аргумент, и выводит его содержимое по стандартному каналу вывода. Передача нескольких файлов в виде аргумента приведёт к выводу конкатенированного содержимого всех файлов.

Команда echo выводит свои аргументы по стандартному каналу вывода.

Если вызвать echo без аргументов, будет выведена пустая строка.

Команда head читает первые 10 строк любого переданного текста и выводит их по стандартному каналу. Число выводимых строк можно изменить:

Команда tail работает аналогично команде head , но читает строки с конца:

Также можно просматривать добавляемые к файлу строки в режиме реального времени при помощи флага -f :

Команда less позволяет перемещаться по переданному файлу или куску текста, причём в обоих направлениях.

Подробнее о назначении символа | будет рассказано ниже в разделе команды history .

Обычные сочетания клавиш Описание
G Перемещает в конец файла
g Перемещает в начало файла
:50 Перемещает на 50 строку файла
q Выход из less
/searchterm Поиск строки, совпадающей с ‘searchterm’, ниже текущей строки
/ Перемещает на следующий подходящий результат поиска
?searchterm Поиск строки, совпадающей с ‘searchterm’, выше текущей строки
? Перемещает на следующий подходящий результат поиска
up Перемещает на одну строку выше
down Перемещает на одну строку ниже
pageup Перемещает на одну страницу выше
pagedown Перемещает на одну страницу ниже

Команда true всегда возвращает ноль в качестве выходного статуса для индикации успеха.

false

Команда false всегда возвращает не-ноль в качестве выходного статуса для индикации неудачи.

$? — это переменная, которая содержит выходной статус последней запущенной команды. Под статусом обычно понимается код возврата программы. 0 означает успешное выполнение программы, любое значение большее 0 отражает тот факт, что в процессе выполнения возникли некоторые ошибки. Кстати, именно поэтому в bash истинной (true) считается 0, а все, что не 0 — ложью (false):

Команда grep занимается поиском переданной строки в указанном файле:

grep также может принимать несколько файлов и регулярных выражений для уточнения формата текста.

Обычные флаги Описание
-i Отключение чувствительности к регистру
-r Рекурсивный поиск по директориям
-w Поиск только целых слов
-c Вывод количества найденных элементов
-n Вывод всей строки, содержащей запрос
-v Вывод инвертированного совпадения

Также можно ознакомиться с руководством по regex. У нас на сайте тоже есть руководство по «регуляркам» в Python для новичков.

Команда sed — это потоковый редактор, преобразующий входные текстовые данные. Обычно её используют для замены выражений так: s/regexp/replacement/g . Например, следующий код заменит все слова «Hello» на «Hi»:

Также вы можете ознакомиться с руководством по sed.

history

Команда history выводит историю командной строки. Обычно её используют вместе с командой grep для поиска конкретной команды. Например, следующий код найдёт все команды, содержащие строку g++ :

Здесь также используется символ | — это так называемый конвейер (pipe). Благодаря ему можно перенаправлять вывод одной команды на вход другой — таким образом в примере выше вся история, которая в обычном режиме выводится командой history прямо в вывод терминала, будет перенаправлена в grep в качестве входных данных. Мы не увидим вывода команды history , но увидим вывод команды grep .

Это может быть довольно сложно для понимания без практики, поэтому поэкспериментируйте самостоятельно, например с командами ls , history , ps (описана ниже), перенаправляя их вывод в grep , sed или less , например.

export

Команда export устанавливает переменные окружения для передачи дочерним процессам. Например, так можно передать переменную name со значением student :

Команда ps выводит информацию о запущенных процессах.

Выводится четыре элемента:

  • ID процесса (PID),
  • тип терминала (TTY),
  • время работы процесса (TIME),
  • имя команды, запустившей процесс (CMD).

Команда awk находит и заменяет текст в файлах по заданному шаблону: awk ‘pattern ‘ test.txt

Команда wget скачивает файлы из Сети и помещает их в текущий каталог.

Команда nc — это утилита для отладки сети. Также можно ознакомиться с руководством по nc.

Команда ping тестирует сетевое подключение.

Статистика в конце показывает количество подключений, совершённых до завершения команды, и время их выполнения.

Git — это популярная система контроля версий. Также можно ознакомиться с руководством по git и нашими материалами.

Переменные окружения

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

Переменная PATH содержит список каталогов, в которых система ищет исполняемые файлы.

4 октября 2020 – 1 марта 2020, Москва и онлайн, беcплатно

Переменная HOME содержит путь к домашнему каталогу текущего пользователя.

Коннекторы

Коннекторы позволяют запускать несколько команд одновременно.

Коннектор Описание
&& Первая команда исполняется всегда, вторая — только в случае успешного завершения первой
|| Первая команда исполняется всегда, вторая — только в случае неудачного завершения первой
; Команды исполняются всегда

Конвейеры

Конвейеры, или пайпы, позволяют соединять входные и выходные каналы различных команд. В следующем примере вывод команды ls будет передан в head , и в результате будет напечатано лишь 10 первых элементов.

Перенаправление ввода/вывода

Перенаправление вывода

Для стандартного перенаправления вывода используются символы > и >> .

Например, этот код передаст вывод ls в файл, а не на экран:

Если файл не существует, он создаётся, а если существует, то перезаписывается. Во избежание перезаписи стоит использовать команду >> — она дописывает данные в конец файла.

Перенаправление ввода

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

Команда sort выводит содержимое файла на экран, поскольку мы не перенаправили выход. Это можно сделать так:

Продвинутое перенаправление

Добавление & к > приводит к перенаправлению как стандартного потока выхода, так и потока ошибок. Например, файл test.cpp выведет строку stdout в cout и строку stderr в cerr .

Если вы хотите вывести конкретный файловый дескриптор, вы можете приписать его номер к > .

Имя Дескриптор Описание
stdin Стандартный поток ввода
stdout 1 Стандартный поток вывода
stderr 2 Стандартный поток вывода ошибок

Например, для перенаправления stderr в test.txt нужно сделать следующее:

Права доступа

Команда ls -l выводит много информации о права доступа к каждому файлу:

Вывод в примере Описание / возможные выводы
Тип файла:
— файл
d каталог
rw- Права доступа владельца файла
rw- Права доступа членов группы-владельца файла
r– Права доступа прочих пользователей
user Имя владельца файла
group Имя группы-владельца файла

chmod

Команда chmod изменяет права доступа файла. Вот типичные сочетания флагов для изменения прав конкретных пользователей:

Буква Пользователь
u Владелец
g Член группы
o Прочие пользователи
a Все пользователи

Вы можете вызвать chmod с описанием действий над конкретным файлом. Символ — обозначает удаление прав, символ + — добавление. Следующий пример сделает файл доступным для чтения и записи владельцу и группе:

Кроме того, chmod можно использовать с восьмеричными числами, где 1 — это наличие прав, а 0 — отсутствие:

Следующая команда сработает так же, как и предыдущая:

Изучите необходимый минимум Linux, чтобы быть продуктивным

Разные операционные системы длительное время обслуживают различные аудитории: Windows — бизнес-профессионалов, Mac — творческих, а Linux — разработчиков. Разработчикам ОС такой тип рыночного спектра сильно упростил концепцию продукта, технические требования, пользовательский опыт и направление рынка. Однако, он также ужесточил нормы рабочего пространства, что деформировало отдельных пользователей под узкие, непересекающиеся области: у бизнесменов нет возможности заглянуть в творческий процесс, а у разработчиков нет представления о проблемах бизнеса.

В реальности знания и опыт — динамичны, они охватывают несколько дисциплин и сфер деятельности. Представление о том, что «можно иметь способности только к чему-то одному» — это не руководство к овладению мастерством, а попытка справиться с преждевременной оптимизацией. Узнать о том, в чём вы хорошо разбираетесь можно только когда вы попробовали себя в нескольких разных вопросах. И может оказаться, что у вас есть способности ко многим видам деятельности.

Для современных бизнес-аналитиков особенно актуален вопрос ликвидации пробела между бизнесом и разработкой. Бизнес-аналитики должны быть двухплатформенными, способными использовать командную строку, доступную только на Linux (или в macOS), но при этом уметь извлекать широкие возможности из Microsoft Office в Windows. Очевидно, что мир Linux пугает тех, у кого образование в сфере бизнеса. К счастью, как и в большем количестве вопросов, вам необходимо изучить 20% информации, чтобы выполнить 80% работы. Вот мои 20%.

Почему современные бизнес-аналитики должны знать Linux

Благодаря своим open source корням, Linux выиграл от вкладов тысяч разработчиков за всё время его существования. Они построили программы и утилиты, чтобы упростить работу не только себе, но и тем программистам, которые последовали за ними. В результате open source разработка создала эффект сетевой выгоды: чем больше разработчики строили утилиты на оригинальной платформе, тем больше других разработчиков могло влиять на эти утилиты, чтобы писать собственные программы.

В результате получился огромный пакет программ и утилит (то есть софт), который был написан на Linux и под Linux. Большая часть его никогда не портировалась в Windows. Один из примеров — популярная система контроля версий (VCS), которая называется git. Разработчики могли написать софт под Windows, но они этого не сделали. Они написали его для работы в командной строке, для Linux, потому что Linux — экосистема, в которой уже были все необходимые инструменты.

Если вдаваться в подробности, разработка на Windows ведёт к двум основным проблемам:

  1. Базовые задачи, вроде парсинга файлов, рабочего планирования и поиска текста используются чаще, чем запуск утилиты командной строки.
  2. Языки программирования (Python, C++) и связанные с ними библиотеки выкидывают ошибки, потому что они ожидают конкретных параметров Linux или специфических локаций файловой системы.

Если собрать всё вместе, это выльется в трату времени на переписывание базовых инструментов, которые уже доступны в Linux, они позволят избежать ошибок совместимости с ОС. Тут нет никаких сюрпризов — экосистема Windows просто не была задумана и спроектирована под нужды разработки софта.

Теперь давайте рассмотрим базовые идеи Linux.

Фундаментальная единица Linux: «оболочка»

Shell (оболочка, также известная как терминал, консоль или командная строка) — это текстовый интерфейс пользователя, через который команды отправляются машине. На Linux, по-умолчанию, язык оболочки называется bash. В отличие от Windows-пользователей, которые в своём большинстве используют навигацию «навести-кликнуть» по окну, Linux-разработчики привязаны к клавиатуре и пишут команды в оболочке. Хоть этот переход далёк от естественного для тех, у кого нет бэкграунда в программировании, плюсы разработки в Linux сильно перевешивают изначальное вложение в обучение.

Изучаем несколько важных концептов

В сравнении с достаточно зрелым языком программирования, bash имеет всего несколько основных концептов, которые необходимо выучить. Как только вы охватите это, остаток bash — простое запоминание. Я переформулирую понятней: хорошо разбираться в bash значит запомнить 20-30 команд и их часто используемые аргументы.

Linux кажется непроницаемым для тех, кто не касается разработки, из-за способа, которым разработчики (не напрягаясь) извергают эзотерические команды терминала, когда им захочется. Правда в том, что они хорошо знают только несколько десятков команд — за всем более сложным они так же (как и все смертные) обращаются в Google.

Опуская мелкие загвоздки, стоящие на пути, вот главные концепты в bash.

Командный синтаксис

Команды соответствуют синтаксису:

Например, в ‘grep -inr’, grep — это команда (для поиска текстовой строки) и -inr это флаги/аргументы, которые меняют то, что grep выполняет по умолчанию. Единственный способ понять, что это значит, поискать что-то о них через Google или просто ввести ‘man grep’. Я рекомендую выучить команды и их самые используемые аргументы: слишком обременительно помнить, что делает каждый флаг.

Псевдонимы директорий

  • Текущая директория (где я?): .
  • Родительская директория текущей директории: ..
  • Домашняя директория пользователя:
  • Корень файловой системы (или родитель всех родителей): /
  • Например, чтобы поменять текущую директорию на родительскую директорию нужно ввести: cd ..

    Таким же способом, чтобы скопировать файл, расположенный в «/path/to/file.txt» в текущую директорию, нужно ввести cp /path/to/file.txt . (заметьте, что в конце команды точка). Поскольку это всего лишь псевдонимы, вместо них может использоваться реальное имя пути.

    STDIN / STDOUT

    Всё, что вы пишите в окне и подтверждаете (с помощью ENTER), называется стандартным вводом (STDIN).

    Всё, что программа выводит в ответе в терминал (например текст из файла), называется стандартным выводом (STDOUT)

    Конвейер (piping)

    Pipe принимает STDOUT от команды слева от pipe и превращает его в STDIN для команды справа от pipe.

    пример: echo ‘test text’ | wc -l

    Символ «больше» принимает STDOUT от команды слева и записывает/перезаписывает в новый файл справа

    пример: ls > tmp.txt

    Два символа «больше» принимают STDOUT от команды слева и добавляют к новому или существующему файлу справа.

    пример: date >> tmp.txt

    Шаблоны поиска (wildcards)

    Можете представить это как символ % в SQL. Например, можно написать WHERE first_name LIKE ‘John%’ , чтобы найти любые позиции, где данные начинаются с имени John.

    В bash можно написать John* . Если вы хотите вывести список всех файлов в какой-то папке, заканчивающихся на «.json», пишете : ls *.json

    Завершение с помощью tab

    Bash часто завершает команды сам, по определённой логике, если вы начинаете вводить команду и нажимаете TAB.

    Однако, стоит попробовать что-то вроде zsh или fish для автозаполнения, потому что запоминать команды и все их параметры очень сложно. Более того, эти инструменты применят автозаполнение, основываясь на вашей истории используемых команд.

    Выход

    Иногда вы застреваете в какой-нибудь программе и не можете оттуда выйти. Это очень часто повторяющееся событие для новичков в Linux, которое невероятно демотивирует. Часто выход происходит с помощью чего-то, содержащего q. Хорошо бы запомнить то, что будет написано ниже и использовать, когда вы в ловушке.

    Что я помню из команд bash

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

    • cd изменить директорию
    • ls -lha вывести директорию в виде списка (подробного)
    • vim или nano редактор командной строки
    • touch создать новый пустой файл
    • cp -R скопировать файл или директорию (и всё их содержимое)
    • mv переместить или переименовать файл
    • rm удалить файл
    • rm -rf удалить файл или папку без возможности восстановления [использовать аккуратно!]
    • pwd вывести текущую рабочую директорию
    • cat или less или tail или head -n10 вывести в STDOUT содержимое файла
    • mkdir создать пустую директорию
    • grep -inr найти строку в любом файле этой директории или дочерних директориях

    column -s, -t отобразить разделенный запятыми файл в виде столбцов

    ssh @ соединиться с удалённой машиной

    tree -LhaC 3 показать структуру директории на 3 уровнями вглубь (с размерами файлов и включая скрытые директории)

    htop (или top ) диспетчер задач

    pip install —user пакетный менеджер Python для установки пакетов в

    pushd . ; popd ; dirs; cd — push/pop/view директорию в стек + изменить обратно на последнюю директорию

    sed -i «s///g» заменить строку в файле

    find . -type f -name ‘*.txt’ -exec sed -i «s///g» <> \; заменить строку для каждого файла в этой и дочерней папках с именем типа *.txt

    tmux new -s session, tmux attach -t session создать новую сессию терминала без создания нового окна [продвинутый уровень]

    wget загрузить веб-страницу или веб-ресурс

    curl -X POST -d «» http://www.google.com отправить HTTP-запрос на веб-сервер

    find вывести список всего содержимого директории и её дочерних директорий рекурсивно

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

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

    5 инструментов, чтобы запомнить команды Linux навсегда

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

    Semen Lobachevskiy

    Read more posts by this author.

    Semen Lobachevskiy

    Существуют тысячи инструментов, утилит и программ, которые предварительно установлены в системе Linux. Вы можете запускать их из окна терминала или виртуальной консоли как команды через оболочку (например, Bash).

    Командой обычно является имя пути (например, / usr / bin / top) или базовое имя (например, top) программы, включая переданные ей аргументы. Тем не менее, среди пользователей Linux распространено заблуждение, что команда — это настоящая программа или инструмент.

    Новичкам в Linux стоит ознакомиться с нашим постом про основные команды в Linux.

    Запоминать команды Linux и их использование нелегко, особенно поначалу. В этой статье мы поделимся 5 инструментами командной строки для запоминания команд Linux.

    История в Bash

    Bash записывает все уникальные команды, выполненные пользователями системы, в файл истории. Файл истории каждого пользователя bash хранится в его домашнем каталоге (например, /home/tecmint/.bash_history для пользователя tecmint). Пользователь может просматривать только свой собственный файл истории, а root может просматривать файл истории bash для всех пользователей в системе Linux.

    Чтобы просмотреть историю bash, используйте команду history:

    результат работы команды history в Linux

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

    Эта функция bash является одним из многих способов легко запомнить команды Linux.

    Дружественная командная строка (Fish)

    Fish это современная, мощная, удобная, многофункциональная и интерактивная оболочка, совместимая с Bash или Zsh. Он поддерживает автоматическое предложение имен файлов и команд в текущем каталоге и истории соответственно, что помогает вам легко запомнить команды.

    На следующем снимке экрана команда «uname -r» находится в истории bash. Чтобы легко ее запомнить, введите «u» или «un», и fish автоматически предложит полную команду. Если вы хотите автоматически ввести команду, записанную вами, используйте клавишу со стрелкой вправо, чтобы выбрать ее и запустить.

    Fish — дружественная командная строка

    Fish — это полноценная программа-оболочка с множеством функций, позволяющих вам легко запомнить команды Linux.

    Программа Apropos Tool

    Apropos, ищет и отображает имя и краткое описание ключевого слова, например, имени команды, как написано на странице руководства этой команды.

    Если вы не знаете точное имя команды, просто введите ключевое слово (регулярное выражение), чтобы найти ее. Например, если вы ищете описание команды add-apt-repository, вы можете набрать apt — apropos будет искать и выводить список всех команд со строкой apt, а также их описание.

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

    Скрипт Explain Shell

    Explain Shell — это небольшой скрипт Bash, объясняющий команды оболочки Для его работы требуется программа curl и работающее подключение к интернету. Он отображает сводку описания команды и, кроме того, если команда включает флаг, он также показывает описание этого флага.

    Чтобы использовать его, сначала вам нужно добавить следующий код в конце файла $ HOME / .bashrc.

    Сохраните и закройте файл, затем найдите его или откройте в новом окне терминала.

    Если вы забыли, что делает команда «apropos -a», вы можете использовать команду объяснения.

    Результат работы скрипта explain в Linux

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

    Программа Cheat

    Cheat — это простая интерактивная программа для работы командной строкой, которая показывает варианты использования команды Linux с рядом опций и их краткой понятной функцией. Она полезна как для новичков в Linux, так и системных администраторов.

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

    На этом все! В этой статье мы поделились 5 инструментами командной строки для запоминания команд Linux. Если вам известны другие подобные инструменты, напишите об этом в комментариях.

    Основы линукс: Введение в bash

    О чем статья

    Прочитав эту статью, вы узнаете что такое bash (стандартный командный интерпретатор линукс), научитесь обращаться со стандартными командами: ls, cp, mv… поймете назначение инодов, жестких и символических ссылок и многое другое.

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

    Введение в bash

    Shell

    Если вы используете линукс, то знаете что после логина вас приветствует приглашение командного интерпретатора. Например такое:

    Если после логина загружается графическая оболочка, то чтобы добраться до командного интерпретатора нужно запустить эмулятор терминала (gnome-terminal, xfce4-terminal, konsole, xterm, rxvt…) или переключиться на один из виртуальных терминалов нажав CtrlAltF1 или CtrlAltF2 и т.д.

    Приглашение командного интерпретатора на вашем компьютере может отличаться от того что показано в примере. Оно может содержать имя пользователя, имя компьютера и название текущей рабочей директории. Но несмотря на все эти различия, программа которая печатает это приглашение называется «shell» (оболочка), и скорее всего в роли вашей командной оболочки выступает программа которая называется bash.

    У вас запущен bash?

    Проверить запущен ли bash можно следующей командой:

    \$ echo \$SHELL /bin/bash

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

    Что такое bash

    Bash (акроним от «Bourne-again SHell») это стандартный интерпретатор команд на большинстве линукс систем. В его обязанности входит обработка и исполнение команд с помощью которых пользователь управляет компьютером. После того как вы завершили работу, можно завершить процесс командного интерпретатора. После нажатия клавиш CtrlD, команд exit или logout процесс командного интерпретатора будет завершен и на экране снова появится приглашение ввести имя пользователя и пароль.

    Использование «cd»

    Давайте начнем использовать bash для навигации по файловой системе. Для начала напечатайте следующую команду:

    Этой командой мы указали bash-у что хотим переместиться в корневую директорию — /. Все директории в системе организованы в древовидную структуру и / это её начало (или корень). Команда cd служит для изменения текущей рабочей директории.

    Чтобы узнать в каком месте файловой системы в данный момент вы находитесь (текущую рабочую директорию) наберите:

    В приведенном выше примере / — аргумент команды cd — называется путь. Это место файловой системы, куда мы хотим переместиться. В данном случае / — абсолютный путь, это значит что путь указан относительно корневой директории.

    Абсолютные пути


    Вот несколько примеров абсолютных путей

    /dev /usr /usr/bin /usr/local/bin

    Как вы уже могли заметить, все эти пути объединяет то, что они начинаются с /. Указывая путь /usr/local/bin в качестве аргумента команде cd мы говорим ей перейти в корневую директорию /, затем в директорию usr, потом в local и bin. Абсолютные пути всегда начинаются с /

    Относительные пути

    Второй вид путей называется относительными. Bash, команда cd и другие команды отсчитывают эти пути относительно текущей директории. Относительные пути никогда не начинаются с /. Например, если мы находимся в /usr

    Затем мы можем перейти в /usr/local/bin используя относительный путь

    \$ cd local/bin \$ pwd /usr/local/bin

    Использование «..»

    Относительные пути могут содержать одну или несколько директорий «..». «..» указывает на родительскую директорию по отношению к нашей рабочей директории. Пример:

    \$ pwd /usr/local/bin \$ cd .. \$ pwd /usr/local

    Как вы видите, команда cd .. ‘поднимает нас на уровень выше’.

    Можно добавить .. к относительному пути. Это позволит переместиться в директорию, которая находится на одном уровне с той в которой мы находимся. Пример:

    \$ pwd /usr/local \$ cd ../share \$ pwd /usr/share

    Примеры с использованием относительных путей

    Относительные пути могут быть довольно сложными. Вот несколько примеров. Результат выполнения команд не показан, попробуйте определить в какой директории вы окажетесь используя bash.

    \$ cd /bin \$ cd ../usr/share/zoneinfo \$ cd /usr/X11R6/bin \$ cd ../lib/X11 \$ cd /usr/bin \$ cd ../bin/../bin

    Рабочая директория «.»

    Перед тем как закончить разговор о команде cd, следует упомянуть еще несколько вещей. Во-первых, существует ещё одна специальная директория «.», которая указывает на текущую директорию. Эта директория используется для запуска исполняемых файлов, находящихся в текущей директории.

    В последнем примере myprog это исполняемый файл находящийся в текущей директории, который будет запущен на исполнение.

    cd и домашняя директория пользователя

    Для того чтобы перейти в домашнюю директорию, нужно набрать

    Без аргумента cd переместит вас в домашнюю директорию. Для суперпользователя домашней обычно является директория /root, а для обычных пользователей — /home/username/. Но что если мы хотим указать конкретный файл, находящийся в домашней директории. Например, как аргумент к программе ‘myprog’? Можно написать:

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

    — специальное имя, указывающее в bash на домашнюю директорию пользователя.

    Домашние директории других пользователей

    Но что если нам нужно указать файл в домашней директории другого пользователя? Для этого после тильды нужно указать имя этого пользователя. Например, чтобы указать на файл fredsfile.txt находящийся в домашней директории пользователя fred:

    Команды линукс

    Введение в ls

    Вероятно вы уже знакомы с командой ls, которая, вызванная без аргументов, выводит на экран список файлов хранящихся в рабочей директории:

    \$ cd /usr \$ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src

    Если указать опцию -a, можно будет увидеть все файлы, включая скрытые (имена которых начинаются с точки).

    \$ ls -a . bin gentoo-x86 include libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl

    Подробный список директорий

    После самой команды ls в качестве ее аргумента можно указать один или более файлов или директорий. Если указать имя файла, то команда ls выведет информацию только об этом файле. А если указать название директории, ls покажет все ее содержимое. Опция ‘-l’ команды ls бывает очень полезной если вы хотите кроме имен файлов узнать более подробную информацию о них (права на файл, имя владельца, время последнего изменения файла и его размер).

    В следующем примере показано применение опции ‘-l’ для вывода информации о файлах хранящихся в директории /usr

    В первой колонке показана информация о правах доступа к каждому файлу в списке. (Немного позже я объясню какая буква что обозначает) Следующая колонка показывает количество ссылок на каждый элемент списка. Третья и четвертая колонки — владелец и группа файла соответственно. Пятая колонка — размер. Шестая — время последнего изменения файла (‘last modified time’ или mtime). Последняя колонка — имя файла или директории (Если это ссылка, то после знака ‘–>‘ стоит имя объекта на который она ссылается).

    Как посмотреть только директории

    Иногда возникает потребность посмотреть информацию только о директориях, а не о всем их содержимом. С этой задачей поможет справиться опция ‘-d’, которая указывает команде выводить информацию только о директориях. Пример:

    \$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin

    Рекурсивный список и информация о инодах

    Действие опции ‘-R’ противоположно действию ‘-d’. Она позволяет выводить информацию о файлах находящихся в директории рекурсивно. Сначала показывается содержимое директории верхнего уровня, потом по очереди содержимое всех поддиректорий и так далее. Вывод этой команды может быть достаточно объемным, поэтому мы не приводим ее пример, но вы можете попробовать сделать это самостоятельно, набрав в командной строке ‘ls -R‘ или ‘ls -Rl‘.

    И, наконец, опция ‘-i’ используется для вывода инодов каждого объекта файловой системы.

    \$ ls -i /usr 1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp

    Что такое иноды?

    Каждый объект файловой системы (файл, директория…) имеет свой уникальный номер, называемый инодом (inode number). Эта информация может показаться незначительной, но понимание функции инодов поможет вам разобраться во многих операциях над файловой системой. Например, посмотрим на «.» и «..» как на ссылки, присутствующие в каждой директории. Чтобы понять что из себя представляет директория «..», узнаем инод директории /use/local

    \$ ls -id /usr/local 5120 /usr/local

    Как можем видеть, инод директории /usr/local — 5120. Теперь посмотрим какой инод у директории /usr/local/bin/.

    \$ ls -id /usr/local/bin/.. 5120 /usr/local/bin/..

    Получается, что иноды директорий /usr/local и /usr/local/bin/.. совпадают! Это значит, что на инод 5120 ссылаются два имени: /usr/local и /usr/local/bin/.. То есть это два разных имени одной директории. Каждый инод указывает на определенное место на диске.

    С каждым инодом может быть связано несколько имен объектов файловой системы. Количество ‘синонимов’ файла (объектов файловой системы, ссылающихся на один инод) показывает число во втором столбце вывода команды ‘ls -l‘.

    \$ ls -dl /usr/local drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local

    На этом примере видно (второй столбец), что на директорию /usr/local ссылаются 8 разных объектов файловой системы. Вот их имена:

    /usr/local /usr/local/. /usr/local/bin/.. /usr/local/games/.. /usr/local/lib/.. /usr/local/sbin/.. /usr/local/share/.. /usr/local/src/..

    mkdir

    Давайте рассмотрим команду mkdir. Она служит для создания новых директорий. В следующем примере демонстрируется создание трех новых директорий (tic, tac, toe) в директории /tmp

    \$ cd /tmp $ mkdir tic tac toe

    По умолчанию команда mkdir не может создать вложенной структуры директорий. Поэтому, если вам нужно создать несколько вложенных одна в другую директорий (won/der/ful), то вам придется три раза поочередно вызывать эту команду:

    \$ mkdir won/der/ful mkdir: cannot create directory ‘won/der/ful’: No such file or directory \$ mkdir won \$ mkdir won/der \$ mkdir won/der/ful

    Упростить эту операцию можно добавив опцию ‘-p’ к команде mkdir. Эта опция позволяет создавать вложенную структуру директорий:

    \$ mkdir -p easy/as/pie

    Чтобы узнать о возможностях этой утилиты подробнее, прочитайте справку, которая вызывается командой man mkdir. Справки есть практически ко всем командам из этого руководства (например man ls), кроме cd, т.к. она встроена в bash (для таких команд справка вызывается так: help cd)

    touch

    Перейдем к изучению команд cp и mv, служащих для копирования, переименования и перемещения файлов и директорий. Но перед этим создадим пустой файл в директории /tmp при помощи команды touch:

    Команда touch обновляет время последнего доступа к файлу (шестая колонка вывода команды ls -l) если он уже существует или создает новый пустой файл, если его ещё нету. После этой операции у нас должен появиться пустой файл /tmp/copyme.

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

    \$ echo «firstfile» firstfile

    Чтобы записать строку в наш файл, перенаправим в него вывод команды echo:

    \$ echo «firstfile» > copyme

    Знак > (больше) указывает командной оболочке что нужно перенаправить вывод команды стоящей слева в файл, имя которого находится справа. Если файла с таким именем не существует, он будет создан автоматически. А если такой файл уже есть, то он будет перезаписан (все его содержимое будет стерто перед записью нашей строки). Команда ‘ls -l’ покажет что размер нашего файла теперь равен 10 байтам — девять байт занимает слово ‘firstfile’ и один байт символ перевода строки.

    \$ ls -l copyme -rw-r—r— 1 root root 10 Dec 28 14:13 copyme

    cat и cp

    Для вывода содержимого файла на терминал используется команда cat:

    \$ cat copyme firstfile

    Теперь мы можем приступить к разбору базовой функциональности команды cp. Эта команда принимает два аргумента. Первый — имя уже существующего файла (‘copyme’), второй — название новой копии, которую мы хотим сделать (‘copiedme’).

    \$ cp copyme copiedme

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

    \$ ls -i copyme copiedme 648284 copiedme 650704 copyme

    Теперь применим команду mv чтобы переименовать файл («copiedme» –> «movedme»). Номер инода после этой операции не меняется, а изменяется только название файла.

    \$ mv copiedme movedme \$ ls -i movedme 648284 movedme

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

    Команда mv позволяет не только переименовывать файлы, но и перемещать их. Например, чтобы переместить файл /var/tmp/myfile.txt в директорию /home/user нужно дать команду:

    \$ mv /var/tmp/myfile.txt /home/user

    Файл будет перемещен в домашнюю директорию пользователя user даже если она находится в другой файловой системе (в этом случае файл будет скопирован в новое место после чего оригинал будет удален). Как вы могли уже догадаться, перемещение файла в другую файловую систему приводит к изменению его инода. Это происходит потому, что каждая файловая система имеет свой отдельный набор инодов.

    Чтобы переместить одновременно несколько файлов в одну директорию нужно написать:

    \$ mv /var/tmp/myfile1.txt /var/tmp/myfile2.txt /home/user

    \$ mv -t /home/user /var/tmp/myfile1.txt /var/tmp/myfile2.txt

    Если добавить опцию ‘-v’, на экран будет выведен отчет о проделанной операции:

    \$ mv -vt /home/user /var/tmp/myfile1.txt /var/tmp/myfile2.txt ‘/var/tmp/myfile1.txt’ -> ‘/home/user/myfile1.txt’ ‘/var/tmp/myfile2.txt’ -> ‘/home/user/myfile2.txt’

    Изучение команд командного интерпретатора bash в ос linux. Рекурсивный список и информация о инодах

    Bash — интерпретатор командного языка UNIX совместимых систем. Выполняет команды из стандартного ввода (например окно терминала) или из файла. В bash также включены полезные расширения оболочек языков Korn и C (команды ksh и csh соответственно)

    shopt_option — дополнительные параметры оболочки. Читать подраздел SHELL BUILTIN COMMANDS. Если данный параметр присутствует6 тогда -0 перед ним устанавливает указанный параметр, а +0 отменяет его. Если параметр shopt_option не указан, то +0 выводит перечень установленных параметров на стандартный вывод в формате позволяющем повторное использование в качестве входных данных.

    -c string Если данный параметр присутствует, то команда будет считана из строки string . Если в передаваемой команде есть дополнительные аргументы, они считаются позиционными и начинаются с $0. (Раздел Аргументы )
    -i Интерактивная работа интерпретатора
    -l Смотреть INVOCATION ниже
    -r Ограничения в работе оболочки. Смотреть RESTRICTED SHELL
    -s Если указан данный параметр и нет всех необходимых аргументов, то они считываются из стандартного ввода
    -D Список всех строк заключенных в двойные кавычки с $ в начале выводятся на стандартный вывод. Необходимо для выполнения перевода. Никакие команды выполняться не будут
    [-+]0[shopt_option ]
    Сигнализирует об окончании установки параметров. Любые параметры после него рассматриваются как имена файлов и аргументы для скрипта. Параметр «-» эквивалентен «—«.

    Bash также позволяет использовать многосимвольные параметры. Они должны быть описаны перед односимвольными, для их корректного распознавания.

    —debugger Запускает профайл отладчика перед запуском скрипта. Включает расширенный режим отладки (подробнее в описании extdebug ) и запускает функцию трассировки
    (смотреть описание параметра -o ).
    —dump-po-string Эквивалентно -D, но вывод производится формат файла локализаций.po
    —dump-strings Полностью аналогично -D
    —help Подсказка
    —init-file file
    —rcfile file Если интерпретатор запускается в интерактивном режиме, то выполняет команды инициализации и указанного файла file , а не из стандартного файла инициализации

    /.bashrc .

    —login Аналогично -l
    —noediting
    —noprofile Не читать при запуске оболочки интерпретатора общесистемные файлы настроек /etc/profile и любые локальные файлы настроек, такие как

    /.profile . По умолчанию bash их использует при запуске в режиме входа (подробнее в параметре INVOCATION).

    —norc Не читать и не исполнять файл персональных настроек

    /.bashrc при интерактивном запуске. По умолчанию данный параметр установлен при запуске оболочки командой sh .

    —posix Изменение поведения по умолчанию bash, когда встречается команда отличающаяся от стандарта POSIX (для обеспечения совместимости)
    —restricted Действия оболочки ограниченны (читать ниже о параметре RESTRICTED SHELL)
    —verbose Аналогично -v (подробный вывод)
    —version Вывести информацию о текущей версии интерпретатора на стандартный вывод

    Если после обработки параметров остаются аргументы не связанные с параметрами -с или -s, то первый аргумент считается именем файла содержащий скрипт с командами. В $0 записывается имя файла и остальные аргументы записываются попозиционно. Bash считывает команды скрипта, выполняет их и затем выходит. Статус завершения будет равен статусу завершения последней выполненной команды скрипта. Если не выполнялось ни одной команды, возвращаемое значение будет «0». Сначала производится попытка открыть скрип из текущей папки, в случае если его там нет, буде произведен поиск указанного файла согласно переменной PATH для скриптов.

    login shell — если первый символ после — 0 или запуск выполнен с параметром -login.

    interactive shell -интерактивная работа. Если запуск произведен без аргументов и без параметра -c со стандартным устройством ввода вывода в виде terminal.app или запуск с параметром -i.

    Обработка файлов инициализации. Если какой-либо из файлов с параметрами инициализации существует, но его невозможно прочесть, bash в Mac сообщает об ошибке.

    Когда баш запускается в интерактивном режиме или login режиме, в первую очередь считываются и выполняются команды из файла /etc/profile (если он имеется), после этого проверяется наличие файлов

    /.profile и если они в наличии и доступны, то команды из них выполняются в том же порядке как они причислены. Чтобы пропустить процесс обработки вышеперечисленных файлом можно использовать параметр —noprofile

    Если bash был запущен в режиме login, проверяется и в случае наличия исполняется файл

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

    /.bashrc . Для отключения данного файла используется параметр —norc или —rcfile file для замены исполняемого файла на другой (file ).

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

    Когда bash вызывается командой sh, он пытается использовать наиболее старую версию для обеспечения совместимости с POSIX стандартом. Когда вызывается в интерактивном режиме или в режиме —login в первую очередь считываются и исполняются последовательно файлы /etc/profile и

    /.profile , для запрета использования этих файлов предназначен параметр —noprofile . Также в интерактивном режиме считывается значение переменной ENV для использования его в качестве пути для поиска исполняемого файла. При запуске командой sh параметр запуска —rcfile игнорируется и не может быть использован. При запуске в стандартном режиме никакие файлы конфигурации не используются, работа интерпретатора идет в POSIX режиме.

    Когда bash запущен в режиме posix с помощью параметра в командной строке —posix интерпретатор будет придерживаться стандарта POSIX для файлов инициализации. В этом случае интерактивный режим использует значение переменной ENV, в которой должно быть записано имя файла инициализации, никакие другие файлы инициализации не будут выполняться.

    Bash — это командная оболочка или по-другому — интерпретатор команд, который используется по умолчанию в большинстве дистрибутивов Linux. Оболочка Bash обладает огромным количеством возможностей. Это больше чем интерпретатор, в умелых руках Bash может превратиться в полноценный язык программирования.

    Основная задача оболочки — выполнять команды, но кроме утилит, расположенных в файловой системе, Bash имеет свой набор команд, многими из которых вы пользуетесь каждый день сами этого не понимая. Эти команды Bash находятся не на диске, а встроены в саму оболочку. В этой статье мы рассмотрим основные команды bash в linux, которые могут быть полезны в некоторых ситуациях.

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

    1. source

    Эта команда позволяет прочитать и выполнить все команды из указанного файла в текущей командной оболочке. Это значит, что все заданные в нем переменные окружения будут видны во всех скриптах или командах, которые вы будете выполнять. Напомню, что если вы запускаете обычный скрипт и объявляете в нем переменную, то она будет доступна только ему потому что для скриптов создается отдельный экземпляр оболочки. Он наследует переменные родителя, но не наоборот. Эта команда часто применяется для обновления окружения после chroot:

    2. alias

    Команда alias позволяет создавать псевдонимы для других команд. Например, вы можете настроить так, чтобы когда вы вводите update, выполнялась команда sudo apt update && sudo apt upgrade. Если вызвать команду без параметров, то она выведет список уже заданных псевдонимов. Смотрите подробнее о том как создавать в отдельной статье.

    3. bind

    С помощью этой команды вы можете связать нажатие клавиши с определенной командной или функцией. Например, настроим, чтобы при нажатии F12 в окне терминала выполнялась команда pwd:

    , <, >) для поиска файлов по шаблонам имен.

  • Подставляет переменные, которые может использовать командный процессор.
  • Перенаправляет выходные данные одной команды в качестве входных данны для другой команды, используя конвейер (pipe).
  • Выполняет объединение команд.
  • Выполняет команду, если она — встроенная команда интерпретатора, или запускает процесс, если команда внешняя.
  • Перенаправляет стандартный ввод/вывод.
  • Для выполнения трех последних функций необходимо использование специальных операторов. Разберем все перечисленные функции.

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

    $ export HELLO=»Hello from environment! » # пробел нужно экранировать кавычками

    Окружение (environment)- это набор переменных, значения которых может менять поведение оболочки.

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

    Таким образом, командный интерпретатор определяет переменные окружения, которые используются в текущем сеансе. Каждая новая введенная команда фактически запускается как дочерний процесс родительского процесса, в качестве которого, в данном случае выступает командный интерпретатор bash. Переменные окружения отличаются от обычных переменных тем, что они доступны как для родительских, так и для дочерних процессов. Автоматическое определение переменных окружение происходит после аутентификации пользователя в системе. Программа login, в случае успешного завершения процесса аутентификации, на основе файла /etc/passwd определяет какой командный интерпретатор будет использоваться в сеансе данного пользователя. После определения командного интерпретатора происходит настройка сеанса согласно конфигурационным файлам, представленным ниже.

    Определяет переменные окружения для всех пользователей системы. Данный файл выполняется при первом входе в систему и содержит основные переменные окружения, такие как, переменная поиска расположения команд PATH, переменная имени хоста HOSTNAME, переменная, определяющая размер истории команд HISTSIZE. Кроме того данный файл генерирует дополнительные переменные окружения из конфигурационных файлов, находящихся в каталоге /etc/profile.d .

    Выполняется для всех пользователей, при каждом запуске командного интерпретатора bash. В данном файле определяется значение переменной PS1, а также дополнительные псевдопимы команд (alias). Псевдонимом называется сокращенное произвольно заданное название команды или последовательности команд, позволяющее выполнять сложные последовательности команд, не вводя их с клавиатуры, а вызывая их через обращение к соответствующему псевдониму. Переменные, определенные в данном файле могут«быть переназначены аналогичным пользовательским файлом -/.bashrc, который имеет более высокий приоритет.

    Используется как файл, содержащий индивидуальные настройки пользователя. Выполняется только один раз при входе пользователя в систему. Кроме того, данный файл осуществляет запуск файла -/.bashrc

    /.bashrc

    Данный файл содержит переменные окружения и псевдонимы установленные пользователем. Он выполняется каждый раз при входе пользователя в систему или при открытии нового сеанса bash. Данный файл лучше всего подходит для определения пользовательских переменных и псевдонимов.

    /.bash_logout

    Данный файл выполняется каждый раз при выходе из системы или завершении последнего сеанса интерпретатора bash. По умолчанию в данном файле содержится команда очистки экрана терминала.

    Данный файл содержит описание интерпретации различных сочетаний клавиш, а также содержит специальные комбинации клавиш, нажатие которых вызывает выполнение заданных команд.

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

    В данном примере временной переменной окружения AB присваивается путь к каталогу, расположенному достаточно «глубоко» в иерархии каталогов файловой системы. Команда export указывает на необходимость экспорта значения переменной АВ в оболочку, для того чтобы сделать его доступным для других оболочек, которые могут быть открыты в пределах текущего сеанса работы с системой. Теперь к указанному выше каталогу можно добраться посредством выполнения команды cd $AB

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

    Для изменения конфигурационных файлов /etc/profile и /etc/bashrc необходимо быть суперпользователем root.

    Обычные пользователи могут изменять конфигурационные файлы

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

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

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

    Чтобы данные изменения применились в окружении текущей оболочки необходимо выполнить команду source .bashrc

    Наиболее распространенные переменные окружения командной оболочки:

    • BASH — Содержит полный путь к команде bash (как правило, значение этой переменной равно /bin/bash).
    • BASH_VERSION — Номер версии bash.
    • DIRSTACK- Массив, содержащий текущее значение стека каталога.
    • EDITOR — текстовый редактор по умолчанию.
    • EUID — Числовой эффективный идентификатор текущего пользователя.
    • FUNCNAME — имя текущей функции в скрипте.
    • GROUPS — Массив, содержащий список групп, к которым принадлежит текущий пользователь.
    • HISTFILE — Местоположение файла истории команд. Как правило, история команд хранится в файле

    /.bash_history.

  • HISTFILESIZE — Число командных строк, которые могут храниться в файле истории. После достижения этого числа новые командные строки заносятся в историю за счет удаления наиболее ранних командных строк. По умолчанию размер списка недавно использовавшихся команд равен 1000 строк.
  • HOME — Домашний каталог пользователя.
  • HOSTNAME — Имя данного компьютера (узла).
  • HOSTTYPE — Тип компьютера.
  • LANG — Текущий используемый по умолчанию язык.
  • LC_CTYPE — внутренняя переменная, котороя определяет кодировку символов.
  • MAIL — Местоположения файла ящика электронной почты пользователя. Как правило, это файл, расположенный в каталоге /var/spool/mail, имя которого совпадает с регистрационным именем пользователя.
  • MAILCHECK — Интервал в минутах между проверками почты.
  • OLDPWD — Каталог, который являлся текущим до момента последнего изменения каталога.
  • OSTYPE — Текущая операционная система.
  • PATH — Разделенный символами двоеточия список каталогов, в которых производится поиск исполняемых файлов. Крайне важен порядок ледования имен каталогов. При выполнении команд перечисленные в этой переменной каталоги проверяются последовательно слева направо. Т.о., при выполнении команды foo, расположенной в каталогах /bin и /usr/bin, будет выполнена команда, расположенная в каталоге /bin. Для того чтобы в аналогичной ситуации была выполнена команда foo, расположенная в каталоге /usr/bin, следует либо указать полный путь к этой команде, либо изменить порядок следования имен каталогов в переменной окружения PATH. Текущий каталог поиска должен быть задан явно («.»), оболочка не производит поиск в текущем каталоге по умолчанию. Поиск запускаемых программ в текущем каталоге таит потенциальную опасность вследствие возможности непреднамеренного выполнения опасной программы, поэтому переменная PATH обычно инициализируется без «.» Для того, чтобы добавить к переменной PATH путь к своим собственным командам или сценариям оболочки, их следует разместить в подкаталоге /bin домашнего каталога, который будет автоматически занесен в переменную PATH. Не все исполняемые команды расположены в каталогах, перечисленных в переменной окружения PATH. Некоторые команды встроены непосредственно в оболочку. Другие команды могут быть переопределены с помощью псевдонимов, позволяющих заменить команды с параметрами практически любой сложности (с точки зрения синтаксиса) одним простым именем. Помимо этого, существует возможность создания функций, хранящих в себе целую последовательность команд.
  • PPID — Идентификационный номер процесса, соответствующего команде, в результате выполнения которой была запущена текущая оболочка(например, процесс, породивший оболочку).
  • PS1, PS2, PS3, PS4 — Переменные, определяющие вид приглашения оболочки.

    Переменные PS1 и PS2 устанавливают первичное и вторичное приглашение командного интерпретатора.

    Вторичное приглашение (PS2) появляется, если вы нажали клавишу Enter, синтаксически не закончив ввод команды.

    Данная переменная содержит второстепенное приглашение, которое возникает при многострочном редактировании текста или незавершенном вводе команды. По умолчанию оно обозначается как >.

    PS3. Данная переменная содержит приглашение, присутствующее в операторе select, используемой для организации интерактивных консольных меню. По умолчанию приглашению PS3 в операторе select соответствует значение #?.

    PS4. Данная переменная используется в основном при отладке сценариев командного интерпретатора и по умолчанию содержит строковое значение «++».

    Например, запуск команды получения информации DNS:

  • PWD — Текущий рабочий каталог пользователя. Это значение изменяется каждый раз при переходе в другой каталог с помощью команды cd.
  • SECONDS — время работы скрипта(в сек.).
  • SHELL — Текущий интерпретатор команд.
  • SHELLOPTS — Список включенных параметров интерпретатора.
  • SHLVL — Число запусков новых копий интерпретатора команд.
  • UID — Числовой идентификатор текущего пользователя.
  • USER — Имя текущего пользователя.
  • $# — Общее количество параметров переданных скрипту.
  • $* — Все аргументы переданыне скрипту(выводятся в строку).
  • [email protected] — Тоже самое, что и предыдущий, но параметры выводятся в столбик.
  • $! — PID последнего запущенного в фоне процесса.
  • $$ — PID самого скрипта.
  • Чтобы просмотреть значения всех переменных текущего сеанса, как определенных вами, так и переменных окружения, введите команду set без параметров или env printenv .

    Удалить переменную можно командой unset .

    2.4. Подстановки и организация взаимодействия между командами

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

    Подстановка результата вычисления арифметического выражения

    Существуют две синтаксические формы подстановки результата вычисления арифметического выражения: $[выражение] и $((выражение)). Например,

    echo «I am $ years old.»

    Подстановка команд позволяет использовать вывод одной команды в командной строке, содержащей другую команду. Можно использовать два альтернативных формата подстановки: $(команда) или `команда` (одинарные обратные кавычки). Например,

    Раскрытие символа тильды

    ) позволяет быстро вводить названия каталогов.

    Имя домашнего каталога пользователя

    /подкаталог Имя одного из подкаталогов в домашнем каталоге пользователя

    + Имя текущего каталога

    — Имя предыдущего каталога

    Раскрытие фигурных скобок

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

    mkdir expenses/ эквивалентна mkdir expenses/Jan mkdir expenses/Feb mkdir expenses/Mar

    Метасимвол канала (|) указывает на необходимость организации взаимодействия между командами путем использования в качестве входных данных (ввода) команды результата выполнения (вывода) другой команды. Другими словами, с помощью канала (конвейера) результаты первой команды могут быть переданы как входные данные второй команде. Например,

    cat /etc/passwd | sort | head -3

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

    Использование последовательностей и групп команд позволяют ввести несколько команд на одной строке.

    команда1;команда2 Выполнить сначала команду 1, затем команду 2 (команда1;команда2) Запустить отдельную копию интерпретатора, в которой выполнить последовательно команды 1 и 2 < команда1;команда2 >Выполнить команды 1 и 2 последовательно в текущем интерпретаторе команда1 && команда2 Выполнить команду 2 только в случае успешного выполнения команды 1 команда1 || команда2 Выполнить команду 2 только в случае неуспешного выполнения команды 1

    Результатом выполнения любой команды (т.е. результатом завершения соответствующего процесса) является код завершения. Успешное завершение имеет код 0, неуспешное 1. Значение кода завершения присваивается предопределенной переменной? (знак вопроса). Например, echo $?

    Повторное выполнение команд

    Оболочка располагает средствами, позволяющими вызывать предыдущие команды и редактировать их. История (history) команд оболочки представляет собой список использовавшихся ранее команд. Этот список можно просмотреть с помощью команды history.

    После ввода командной строки оболочка помещает ее в историю команд. Список ранее использовавшихся команд хранится в файле, который позволяет в любое время вызвать из него любую нужную командную строку для повторного выполнения. После повторного вызова командной строки она может быть отредактирована. История команд хранится в файле.bash_history, который находится в домашнем каталоге пользователя. По умолчанию командная оболочка способна «запомнить» до 1000 командных строк.

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

    Синтаксис раскрытия истории: !n Выполнить команду с заданным номером!! Выполнить предыдущую команду!строка Выполнить самую последнюю из команд, начинающихся с заданной строки!?строка? Выполнить самую последнюю из команд, содержащих заданную строку

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

    3. Встроенные команды bash

    Вот несколько полезных встроенных команд:

    • echo [аргументы] — Вывод аргументов на экран.
    • enable — Заставляет оболочку вместо встроенной команды выполнить исполняемый файл с таким же именем. Полезно, если у вас есть собственный сценарий по имени, например, echo.
    • eval [аргументы] — Конструирование команды на лету, из указанных аргументов, и отправка ее на выполнение.
    • let — Вычисление выражений.
    • — Прочитать и выполнить команды, содержащиеся в файле. Применяется для определения пользовательских переменных. и функций.
    • basename — Выделение локального имени.
    • expr — Вычисление выражения.
    • read — Ввод значения переменной.
    • shift — Сдвиг списка параметров.
    • test — Проверка условия.

    Другие встроенные команды служат инструкциями командного языка bash.

    Московский государственный институт электронной техники

    Кафедра Интегральной электроники и микросистем

    Составил: ассистент каф. ИЭМС Козлов А.В.

    Лабораторный практикум предназначен в первую очередь для магистров техники и технологии, обучающихся по программе Synopsys первого года обучения по направлению 210100.68, для освоения операционной системы Red Hat Enterprise Linux (RHEL) 4.0. Он также рассчитан для студентов компании FreeScale и всех пользователей, имеющих начальный уровень подготовки Linux или не имеющих его вовсе, и желающих освоить командную среду Linux и основные его приложения, которые требуются пользователю при работе с системами автоматизированного проектирования.

    Данный практикум состоит из восьми лабораторных работ, позволяющих эффективно освоить пользователем команды командного интерпретатора, а также постепенно научиться писать файлы – сценария Shell, Gawk, Perl и Tcl. Каждая лабораторная работа включает следующие разделы: название, задание и цель работы; теоретические сведения с контрольными вопросами; пример выполнения лабораторной работы; порядок выполнения лабораторной работы; лабораторное задание и форму отчета по работе. Синтаксис написания команд в командном интерпретаторе совместно с опциями, параметрами, действиями, выражениями и путями к объектам рассчитан на командную среду BASH. В конце лабораторного практикума приведен список литературы.

    МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОННОЙ ТЕХНИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

    ЛАБОРАТОРНАЯ РАБОТА № 1

    ПО КУРСУ «ОПЕРАЦИОННАЯ СИСТЕМА LINUX»

    Изучение команд командного интерпретатора bash в ос linux

    Лабораторная работа №1 Изучение команд командного интерпретатора bash в ос Linux

    Цель работы : на основе командного интерпретатора BASH освоить навыки работы с командами в операционной системе Red Hat Enterprise Linux 4.0.

    Продолжительность работы – 4 ч.

    Теоретические сведения

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

    Командный интерпретатор представляет собой строковый интерактивный интерфейс с приглашением командной строки между пользователем и операционной системой. Пользователь вводит в командной строке команды, командный интерпретатор “принимает” их и посылает в виде инст­рукций в операционную систему для исполнения. Командный интерпретатор позво­ляет не только вводить команды, но и перенаправлять ввод и вывод данных командной строки, а также выполнять операции в фоновом режиме, давая пользователю возможность заниматься в это время другими задачами.


    Для Linux было разработано множество командных интерпретаторов: Bourne Again shell (BASH), Public Domain shell (PDKSH), интерпретатор TCSH и Z-shell. Несмотря на то, что BASH является интерпретатором, применяемым по умолчанию, можно использовать любую другую среду. Для удобства работы в повседневном режиме достаточно лишь одного командного ин­терпретатора. В систему Red Hal Linux включены все основные командные интерпретаторы, но в ней командный интерпретатор BASH устанавливается и применяется по умолчанию. Это значит, что в этой операционной системе для работы в командной строке применяется BASH, если не указано иное.

    Командная строка. Интерфейс командной строки Linux состоит из одной строки, в которой вводятся команды с опциями и параметрами. В командном интерпретаторе BASH начало командной строки обычно отмечается приглашением в виде знака доллара ($); в других командных интерпретаторах системы Linux может применяться другая форма приглашения. После приглашения пользователь может вводить как одиночную команду, так и команду с опциями и параметрами. Если пользователю не хватает размера командного приглашения, то существует возможность огранить его символом “/”. Набор команды осуществляется с клавиатуры, а ввод с помощью клавиши . Например, для вывода системной даты и системного времени пользователь может воспользоваться командой date .

    Fri Jun 8 15:42:35 MSD 2007

    Или, например, для вывода календаря с текущим месяцем используется команда cal .

    Su Mo Tu We Th Fr Sa

    8 9 10 11 12 13 14

    15 16 17 18 19 20 21

    22 23 24 25 26 27 28

    Основным интерфейсом командного интерпретатора является интерфейс командной строки, который интерпретирует введенные команды и посылает их в систему. Команды, введенные в командной строке, должны соответствовать определенным синтаксическим правилам. Общее правило ввода команд: первым словом, вводимым в командной строке, должно быть имя команды; следующие слова – опции и параметры команды. Каждое слово в командной строке отделено от других слов одним или несколькими пробелами или знаками табуляции.

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

    Опция -а позволяет вывести на экран все файлы текущего каталога, включая так называемые скрытые файлы. Скрытыми часто бывают файлы конфигурации. Имена скрытых файлов всегда начинаются с точки, поэтому их часто называют точенными файлами. В большинстве случаев опции объединяются. При этом перед группой опций ставится один общий дефис. Например, опция -al выдает информацию обо всех фай­лах, содержащихся в текущем каталоге, включая скрытые файлы. Отображается новый файл ttt.

    Параметр — это слово, которое вводится в командной строке после опций. В командах управления файлами в качестве параметров обычно используются имена файлов. Например, если вам нужна инфор­мация только об одном файле gauss.plx, укажите его имя после опции -l:

    Работа пользователя начинается в среде командного интерпретатора BASH, который загружается по умолчанию. В него заложены специальные возможности редактирования командной строки, которые могут оказаться очень полезными при изучении ОС Linux. Перед выполнением команд их можно корректировать, перемещая курсор по командной строке и вставляя или удаляя символы. Это особенно полезно при работе с очень сложными командами. Исправить ошибку при наборе команды помогут операции редак­тирования. С помощью клавиши |вверх| можно вынести ни экран только что выполненную команду. Затем можно выполнить команду еще раз или, отредактировав ее, выполнить модифи­цированную команду. Эта возможность очень удобна при многократном повторении некоторых операций, например, при редактировании одного и того же файла.

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

    Создание файлов и каталогов. В Linux файл и каталог являются двумя типами данных, поэтому и создание их осуществляется с помощью разных команд. Для создания каталога (директория, папка) используется зарезервированная в Linux команда mkdir (“make directory” – создать директорию). В следующем примере в текущей директории создадим директорию new. Для этого используем команду mkdir и через пробел название директории new.

    Директория создана. Однако иногда требуется создать целую вложенную структуру, когда внутри уже созданной папки должна быть еще одна, а внутри ее еще одна и так далее. Для этих целей в составе команды mkdir применяется опция вложений –p. В следующем примере с помощью одной команды происходит создание вложенных папок: сначала папка 1, внутри нее папка 2, а внутри нее папка 3.

    Создавать файлы можно как с помощью команд, так и с помощью встроенных и внешних текстовых редакторов Linux, таких как kedit, nedit, gedit и так далее. Однако перечисленные редакторы требуют работы графической оболочки, а значит работу графической системы. При ее отсутствии можно, например, воспользоваться текстовым редактором VIM или аналогами, которым работа графической системы не требуется. Можно также создавать файлы с помощью текстовых файловых менеджеров, таких как, Midnight Commander (команда mc). Пользователю (проектировщику) зачастую требуется в текстовых файлах сохранять текстовую информацию, которая сопровождает процесс расчета интегральной схемы или, например, электрофизических параметров моделируемого полупроводникового прибора. А также требуется обрабатывать (удалять, добавлять, сортировать, разбивать) полученные данные. Такие действия также осуществляются с помощью команд Linux. Одной из наиболее простых команд создания текстового файла является команда cat .

    Команда cat не имеет собственного интерфейса, поэтому после ввода команды cat с символом перенаправления (см. ниже) и именем нового файла можно сразу же писать текстовую информацию, переходя от строки к строке с помощью клавиши Enter. Выход из редактора (фильтра) cat осуществляется комбинацией клавиш Ctrl-D. Ниже приведен пример создания файла с помощью команды cat.

    Просмотр полученного файла осуществляется с помощью команды cat и через пробел название файла.

    Или, например, сохраняя текстовую информацию из консоли при работе команды ls с опцией –a в файл r, можно воспользоваться функцией перенаправления данных (см. ниже) и командой tee с опцией -a.

    Копирование файлов и каталогов. Копирование файлов и каталогов осуществляется с помощью команды cp, после которой через пробел указывается с относительным или абсолютным путями объект копирования, а еще через пробел новое место назначение копии этого объекта. В следующем примере производится копирование файла gauss.plx из текущей директории в поддиректорию 1, которая находится в текущей директории.

    Если Вам позволяют права доступа на объекты Linux (лаб. работа №2) можно также скопировать этот файл пользователю Alex, рабочая директория которого имеет следующий абсолютный путь /home/alex , с помощью следующей команды.

    Если в месте назначения при копировании файла файл с таким именем уже существовал, то он перезапишется. Это может привести к потере нужных данных. Чтобы этого избежать используйте команду cp с опцией –i, при этом Linux всякий раз будет спрашивать пользователя, действительно ли он хочет перезаписать файл. Новый вид последней команды выглядит следующим образом.

    Копирование каталогов осуществляется таким же способом, как и файлов. Однако при копировании каталогов с файлами и подкаталогами в составе команды cp используется опция –R. Находясь в директории /home/antonk/111, скопируем каталог laba2 на уровень выше, т.е. в директорию /home/antonk . Две точки обозначают уровень иерархии на одну ступень выше.

    Переименование и перемещение файлов и каталогов. Переименование файлов и каталогов осуществляется с помощью команды mv, после которой через пробел указывается объект переименования и еще через пробел новое имя объекта. Переименование каталогов происходит так же, как и файлов. Переименуем файл gauss.plx в новый файл с название gauss2.plx . Если файл с названием, совпадающим с новым названием переименованного файла, уже существует в этой директории, то он перезапишется содержимым переименованного файла. Чтобы этого не допустить, также используйте опцию –i. Кстати, в Linux использование расширений не требуется. Ими пользуются только для ассоциации файлов и исполняемых программ.

    $ mv –i gauss.plx gauss2.plx

    Удаление файлов и каталогов. Удаление файлов и каталогов в Linux осуществляется с помощью команды rm , где через пробел указываются имена файлов для удаления. . Будьте внимательны при работе с этой командой, вы можете удалить нужные данные. По аналогии с командой cp, используйте совместно с командой rm опцию –i. Команда с такой опцией будет запрашивать подтверждение на удаление каждого файла и каталога. В следующем примере удалим файл gauss 2. plx , запрашивая подтверждение на удаление.

    Групповые символы. Иногда при работе с командным интерпретатором требуется найти или сопоставить файлы по шаблону. Например, вы знаете только первую букву в имени файла и хотите найти все файлы в рабочей директории, начинающиеся с этой буквы. Или вам известно последовательность нескольких букв в имени или расширении файла и вам надо его найти среди нескольких сотен других файлов. В этом случае вам требуется воспользоваться специальными символами Linux. В командном интерпретаторе используется ряд специальных символов, называе­мых групповыми символами, с помощью которых файлы можно искать, сопоставлять, а также создавать список имен файлов. Этими символами являются звездочка, вопро­сительный знак и квадратные скобки (*, ?, ). Получив частичное имя файла, команд­ный интерпретатор использует эти символы как образец для поиска и формирования cписка имен обнаруженных файлов. Параметр с неполным именем файла заменяется списком совпавших с ним имен файлов. Этот список имен может использоваться как параметр в командах, оперирующих с несколькими файлами (например, ls ). Групповые символы командного интерпретатора перечислены в табл. 1.

    Таблица 1. Специальные символы командного интерпретатора

    Разделение команд в одной командной строке

    Сравнение с классом возможных символов в именах файлов

    Обозначение следующего символа как специального. Используется для обозначения управляющих символов

    Передача по каналу стандартного вывода одной команды в качестве ввода для другой команды

    Выполнение команды в фоновом режиме

    Команда работы с перечнем ранее введенных команд

    Устанавливает соответствие с любым набором символов в именах файлов

    Устанавливает соответствие с любым отдельным символом в именах файлов

    Перенаправляет стандартный вывод в файл или на устройство. При этом, если файл не существует, он создается, если же файл существует, он перезаписывается

    Восклицательный знак приводит к перезаписи файла, если он существует. Этот символ отменяет действие опции, которая запрещает пе­резапись существующих файлов

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

    Перенаправляет стандартный вывод в файл или на устройство, добавляя выводимые данные к концу файла

    Результат применения стандартного вывода сообщений об ошибках

    Перенаправляет и добавляет стандартный вывод сообщений об ошибках в файл или на устройство

    Перенаправляет стандартный вывод сообщений об ошибках на стандартный ввод

    Перенаправляет стандартный вывод сообщений об ошибках в файл или на устройство

    Перенаправляет по каналу стандартный вывод сообщений об ошибках на вход другой команды

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

    docl doc2 document docs mydoc monday tuesday

    Отобразили полный перечень файлов в рабочей директории.

    docl doc2 document docs

    В этом примере было показано, как символом звездочки мы “отфильтровали” имена файлов, которые не начинаются на комбинацию букв “doc”. Выводятся только имена файлов, которые содержат комбинацию “doc”. При этом остальные файлы не удаляются, они просто не отображаются пользователю.

    Здесь мы вывели имена файлов, которые заканчиваются на комбинацию “day”.

    А здесь мы вывели имена файлов, у которых первым символом значится буква “m” или “t”, последующие символы произвольные, далее буква “d” и опять произвольные символы.

    Будьте внимательны при использовании звездочки совместно с командой rm – это может привести к потере ваших данных. Следующая команда удаляет все содержимое текущей папки.

    Вопросительный знак (?) обозначает только один неуказанный символ в именах файлов.

    Прочитав эту статью, вы узнаете что такое bash (стандартный командный интерпретатор линукс), научитесь обращаться со стандартными командами: ls , cp , mv … поймете назначение инодов, жестких и символических ссылок и многое другое.

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

    Введение в bash

    Shell

    Если вы используете линукс, то знаете что после логина вас приветствует приглашение командного интерпретатора. Например такое:

    Если после логина загружается графическая оболочка, то чтобы добраться до командного интерпретатора нужно запустить эмулятор терминала (gnome-terminal, xfce4-terminal, konsole, xterm, rxvt…) или переключиться на один из виртуальных терминалов нажав CtrlAltF1 или CtrlAltF2 и т.д.

    Приглашение командного интерпретатора на вашем компьютере может отличаться от того что показано в примере. Оно может содержать имя пользователя, имя компьютера и название текущей рабочей директории. Но несмотря на все эти различия, программа которая печатает это приглашение называется «shell » (оболочка), и скорее всего в роли вашей командной оболочки выступает программа которая называется bash .

    У вас запущен bash?

    Проверить запущен ли bash можно следующей командой:

    \$ echo \$SHELL /bin/bash

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

    Что такое bash

    Bash (акроним от «B ourne-a gain SH ell») это стандартный интерпретатор команд на большинстве линукс систем. В его обязанности входит обработка и исполнение команд с помощью которых пользователь управляет компьютером. После того как вы завершили работу, можно завершить процесс командного интерпретатора. После нажатия клавиш CtrlD , команд exit или logout процесс командного интерпретатора будет завершен и на экране снова появится приглашение ввести имя пользователя и пароль.

    Использование «cd»

    Давайте начнем использовать bash для навигации по файловой системе. Для начала напечатайте следующую команду:

    Этой командой мы указали bash-у что хотим переместиться в корневую директорию — / . Все директории в системе организованы в древовидную структуру и / это её начало (или корень). Команда cd служит для изменения текущей рабочей директории.

    Чтобы узнать в каком месте файловой системы в данный момент вы находитесь (текущую рабочую директорию) наберите:

    В приведенном выше примере / — аргумент команды cd — называется путь . Это место файловой системы, куда мы хотим переместиться. В данном случае / — абсолютный путь, это значит что путь указан относительно корневой директории.

    Абсолютные пути

    Вот несколько примеров абсолютных путей

    /dev /usr /usr/bin /usr/local/bin

    Как вы уже могли заметить, все эти пути объединяет то, что они начинаются с / . Указывая путь /usr/local/bin в качестве аргумента команде cd мы говорим ей перейти в корневую директорию / , затем в директорию usr, потом в local и bin. Абсолютные пути всегда начинаются с /

    Относительные пути

    Второй вид путей называется относительными. Bash , команда cd и другие команды отсчитывают эти пути относительно текущей директории. Относительные пути никогда не начинаются с / . Например, если мы находимся в /usr

    Затем мы можем перейти в /usr/local/bin используя относительный путь

    \$ cd local/bin \$ pwd /usr/local/bin

    Использование «..»

    Относительные пути могут содержать одну или несколько директорий «..» . «..» указывает на родительскую директорию по отношению к нашей рабочей директории. Пример:

    \$ pwd /usr/local/bin \$ cd .. \$ pwd /usr/local

    Как вы видите, команда cd .. ‘поднимает нас на уровень выше’.

    Можно добавить .. к относительному пути. Это позволит переместиться в директорию, которая находится на одном уровне с той в которой мы находимся. Пример:

    \$ pwd /usr/local \$ cd ../share \$ pwd /usr/share

    Примеры с использованием относительных путей

    Относительные пути могут быть довольно сложными. Вот несколько примеров. Результат выполнения команд не показан, попробуйте определить в какой директории вы окажетесь используя bash.

    \$ cd /bin \$ cd ../usr/share/zoneinfo \$ cd /usr/X11R6/bin \$ cd ../lib/X11 \$ cd /usr/bin \$ cd ../bin/../bin

    Рабочая директория «.»

    Перед тем как закончить разговор о команде cd , следует упомянуть еще несколько вещей. Во-первых, существует ещё одна специальная директория «.» , которая указывает на текущую директорию. Эта директория используется для запуска исполняемых файлов, находящихся в текущей директории.

    В последнем примере myprog это исполняемый файл находящийся в текущей директории, который будет запущен на исполнение.

    cd и домашняя директория пользователя

    Для того чтобы перейти в домашнюю директорию, нужно набрать

    Без аргумента cd переместит вас в домашнюю директорию. Для суперпользователя домашней обычно является директория /root, а для обычных пользователей — /home/username/. Но что если мы хотим указать конкретный файл, находящийся в домашней директории. Например, как аргумент к программе ‘myprog’ ? Можно написать:

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

    — специальное имя, указывающее в bash на домашнюю директорию пользователя.

    Домашние директории других пользователей

    Но что если нам нужно указать файл в домашней директории другого пользователя? Для этого после тильды нужно указать имя этого пользователя. Например, чтобы указать на файл fredsfile.txt находящийся в домашней директории пользователя fred:

    Команды линукс

    Введение в ls

    Вероятно вы уже знакомы с командой ls , которая, вызванная без аргументов, выводит на экран список файлов хранящихся в рабочей директории:

    \$ cd /usr \$ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src

    Если указать опцию -a , можно будет увидеть все файлы, включая скрытые (имена которых начинаются с точки).

    \$ ls -a . bin gentoo-x86 include libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl

    Подробный список директорий

    После самой команды ls в качестве ее аргумента можно указать один или более файлов или директорий. Если указать имя файла, то команда ls выведет информацию только об этом файле. А если указать название директории, ls покажет все ее содержимое. Опция ‘-l’ команды ls бывает очень полезной если вы хотите кроме имен файлов узнать более подробную информацию о них (права на файл, имя владельца, время последнего изменения файла и его размер).

    В следующем примере показано применение опции ‘-l’ для вывода информации о файлах хранящихся в директории /usr

    \$ ls -l /usr drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6 drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86 drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 root root 5992 Dec 24 22:30 include lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec drwxr-xr-x 8 root root 240 Dec 22 20:57 local lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86/ drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin drwxr-xr-x 46 root root 1144 Dec 24 15:32 share drwxr-xr-x 8 root root 328 Dec 26 00:07 src drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> ../var/tmp

    В первой колонке показана информация о правах доступа к каждому файлу в списке. (Немного позже я объясню какая буква что обозначает) Следующая колонка показывает количество ссылок на каждый элемент списка. Третья и четвертая колонки — владелец и группа файла соответственно. Пятая колонка — размер. Шестая — время последнего изменения файла (‘last modified time’ или mtime). Последняя колонка — имя файла или директории (Если это ссылка, то после знака ‘–> ‘ стоит имя объекта на который она ссылается).

    Как посмотреть только директории

    Иногда возникает потребность посмотреть информацию только о директориях, а не о всем их содержимом. С этой задачей поможет справиться опция ‘-d’ , которая указывает команде выводить информацию только о директориях. Пример:

    \$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin

    Рекурсивный список и информация о инодах

    Действие опции ‘-R’ противоположно действию ‘-d’ . Она позволяет выводить информацию о файлах находящихся в директории рекурсивно. Сначала показывается содержимое директории верхнего уровня, потом по очереди содержимое всех поддиректорий и так далее. Вывод этой команды может быть достаточно объемным, поэтому мы не приводим ее пример, но вы можете попробовать сделать это самостоятельно, набрав в командной строке ‘ls -R ‘ или ‘ls -Rl ‘.

    И, наконец, опция ‘-i’ используется для вывода инодов каждого объекта файловой системы.

    \$ ls -i /usr 1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp

    Что такое иноды?

    Каждый объект файловой системы (файл, директория…) имеет свой уникальный номер, называемый инодом (inode number). Эта информация может показаться незначительной, но понимание функции инодов поможет вам разобраться во многих операциях над файловой системой. Например, посмотрим на «.» и «..» как на ссылки, присутствующие в каждой директории. Чтобы понять что из себя представляет директория «..» , узнаем инод директории /use/local

    \$ ls -id /usr/local 5120 /usr/local

    Как можем видеть, инод директории /usr/local — 5120. Теперь посмотрим какой инод у директории /usr/local/bin/.

    \$ ls -id /usr/local/bin/.. 5120 /usr/local/bin/..

    Получается, что иноды директорий /usr/local и /usr/local/bin/.. совпадают! Это значит, что на инод 5120 ссылаются два имени: /usr/local и /usr/local/bin/.. То есть это два разных имени одной директории. Каждый инод указывает на определенное место на диске.

    С каждым инодом может быть связано несколько имен объектов файловой системы. Количество ‘синонимов’ файла (объектов файловой системы, ссылающихся на один инод) показывает число во втором столбце вывода команды ‘ls -l ‘.

    \$ ls -dl /usr/local drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local

    На этом примере видно (второй столбец), что на директорию /usr/local ссылаются 8 разных объектов файловой системы. Вот их имена:

    /usr/local /usr/local/. /usr/local/bin/.. /usr/local/games/.. /usr/local/lib/.. /usr/local/sbin/.. /usr/local/share/.. /usr/local/src/..

    mkdir

    Давайте рассмотрим команду mkdir . Она служит для создания новых директорий. В следующем примере демонстрируется создание трех новых директорий (tic, tac, toe) в директории /tmp

    \$ cd /tmp $ mkdir tic tac toe

    По умолчанию команда mkdir не может создать вложенной структуры директорий. Поэтому, если вам нужно создать несколько вложенных одна в другую директорий (won/der/ful ), то вам придется три раза поочередно вызывать эту команду:

    \$ mkdir won/der/ful mkdir: cannot create directory «won/der/ful»: No such file or directory \$ mkdir won \$ mkdir won/der \$ mkdir won/der/ful

    Упростить эту операцию можно добавив опцию ‘-p’ к команде mkdir. Эта опция позволяет создавать вложенную структуру директорий:

    \$ mkdir -p easy/as/pie

    Чтобы узнать о возможностях этой утилиты подробнее, прочитайте справку, которая вызывается командой man mkdir . Справки есть практически ко всем командам из этого руководства (например man ls ), кроме cd , т.к. она встроена в bash (для таких команд справка вызывается так: help cd )

    touch

    Перейдем к изучению команд cp и mv , служащих для копирования, переименования и перемещения файлов и директорий. Но перед этим создадим пустой файл в директории /tmp при помощи команды touch :

    Команда touch обновляет время последнего доступа к файлу (шестая колонка вывода команды ls -l ) если он уже существует или создает новый пустой файл, если его ещё нету. После этой операции у нас должен появиться пустой файл /tmp/copyme .

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

    \$ echo «firstfile» firstfile

    Чтобы записать строку в наш файл, перенаправим в него вывод команды echo :

    \$ echo «firstfile» > copyme

    Знак > (больше) указывает командной оболочке что нужно перенаправить вывод команды стоящей слева в файл, имя которого находится справа. Если файла с таким именем не существует, он будет создан автоматически. А если такой файл уже есть, то он будет перезаписан (все его содержимое будет стерто перед записью нашей строки). Команда ‘ls -l’ покажет что размер нашего файла теперь равен 10 байтам — девять байт занимает слово ‘firstfile’ и один байт символ перевода строки.

    \$ ls -l copyme -rw-r—r— 1 root root 10 Dec 28 14:13 copyme

    cat и cp

    Для вывода содержимого файла на терминал используется команда cat :

    \$ cat copyme firstfile

    Теперь мы можем приступить к разбору базовой функциональности команды cp . Эта команда принимает два аргумента. Первый — имя уже существующего файла (‘copyme’), второй — название новой копии, которую мы хотим сделать (‘copiedme’).

    \$ cp copyme copiedme

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

    \$ ls -i copyme copiedme 648284 copiedme 650704 copyme

    Теперь применим команду mv чтобы переименовать файл («copiedme» –> «movedme»). Номер инода после этой операции не меняется, а изменяется только название файла.

    \$ mv copiedme movedme \$ ls -i movedme 648284 movedme

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

    Команда mv позволяет не только переименовывать файлы, но и перемещать их. Например, чтобы переместить файл /var/tmp/myfile.txt в директорию /home/user нужно дать команду:

    \$ mv /var/tmp/myfile.txt /home/user

    Файл будет перемещен в домашнюю директорию пользователя user даже если она находится в другой файловой системе (в этом случае файл будет скопирован в новое место после чего оригинал будет удален). Как вы могли уже догадаться, перемещение файла в другую файловую систему приводит к изменению его инода. Это происходит потому, что каждая файловая система имеет свой отдельный набор инодов.

    Нужно заметить, существует вероятность, что новый присвоенный номер инода может совпасть со старым, но она чрезвычайно мала.

    Чтобы переместить одновременно несколько файлов в одну директорию нужно написать:

    \$ mv /var/tmp/myfile1.txt /var/tmp/myfile2.txt /home/user \$ mv -t /home/user /var/tmp/myfile1.txt /var/tmp/myfile2.txt

    Если добавить опцию ‘-v’ , на экран будет выведен отчет о проделанной операции:

    \$ mv -vt /home/user /var/tmp/myfile1.txt /var/tmp/myfile2.txt «/var/tmp/myfile1.txt» -> «/home/user/myfile1.txt» «/var/tmp/myfile2.txt» -> «/home/user/myfile2.txt»

    Основы Linux. Часть 1.1 : BASH, основы навигации

    Об этом руководстве

    Добро пожаловать в первую из четырех частей обучающего руководства по основам Linux, разработанного чтобы подготовить вас к сдаче экзамена Linux Professional Institute 101. В нем вы познакомитесь с bash (стандартной оболочкой командного интерпретатора в Linux), узнаете о большинстве возможностей таких стандартных команд Linux, как ls, cp и mv, разберетесь в инодах, жестких и символьных ссылках, и многом другом. К концу этого руководства у вас сформируется некий фундамент знаний, и вы будете готовы к изучению основ администрирования Linux. К концу всего курса (8 частей), у вас будет достаточно навыков, чтобы стать системным администратором Linux и пройти сертификацию LPIC Level 1 от Linux Professional Institute, если конечно захотите.

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

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

    Введение в bash

    Если вы уже использовали Linux ранее, то наверняка знаете, что после входа в систему вас приветствует приглашение, которое выглядит примерно так:

    На практике приглашение, которое вы видите, может немного отличаться. Например, оно может содержать имя хоста, имя текущей рабочей директории, или все вместе. Не зависимо от того, как выглядит ваше приглашение, есть одна несомненная вещь: программа, которая выводит это приглашение, называется оболочка интерпретатора команд (от англ. shell — оболочка, он же командная строка или терминал — прим. пер.), и, вероятнее всего, вашей командной оболочкой будет ‘bash’.

    А у вас запущен bash?

    Вы можете убедиться, что используете bash, набрав:

    $ echo $SHELL
    /bin/bash

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

    Bash — это акроним от Bourne-again-shell, от англ. «ещё-одна-командная-оболочка-Борна» или «рождённая-вновь-командная оболочка» (тут игра слов Bourne/born — прим. пер.), и является оболочкой по умолчанию для большинства Linux-систем. Задача оболочки получать от вас команды, через которые вы взаимодействуете с Linux-системой. После того, как вы закончили ввод команд, вы можете выйти из оболочки (exit) или закончить сеанс (logout), в этом случае вы увидите приглашение входа в систему.

    Кстати, вы также можете выйти из оболочки bash нажав control-D в приглашении.

    Вы, возможно, уже обнаружили, что пялиться на приглашение bash — не самое впечатляющее занятие в мире. Ну что ж, давайте узнаем как путешествовать по нашей файловой системе. В приглашении введите пожалуйста следующую команду (без $):

    Вы только что сообщили bash, что хотите работать в директории /, также известной, как корневая; все директории в системе имеют форму дерева, и / является его вершиной, т.е. корнем (в информатике деревья растут наоборот, корень вверху, а ветки спускаются вниз — прим. пер.). cd устанавливает директорию, в которой вы в данный момент работаете, также известную как «текущая рабочая директория».

    Чтобы узнать текущую рабочую директорию в bash нужно набрать:

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

    Ниже несколько из них:

    /dev
    /usr
    /usr/bin
    /usr/local/bin

    Как можно заметить, у всех абсолютных путей есть одна общая черта, они начинаются с /. Указывая, допустим, /usr/local/bin в качестве аргумента для cd, мы сообщаем, что хотим попасть в / директорию, затем в usr директорию внутри нее, и так далее в local и bin, вниз по дереву. Абсолютные пути всегда отсчитываются начиная от / сперва.

    Другой тип пути называется «относительный путь». bash, cd, и другие команды всегда интерпретируют их относительно текущей директории. Относительные пути НИКОГДА не начинаются с /. Так, если мы сначала переместимся в /usr:

    То, затем мы можем использовать относительный путь local/bin, чтобы попасть в директорию /usr/local/bin:

    $ cd local/bin
    $ pwd
    /usr/local/bin

    Относительные пути могут также содержать одну или более «..» директории. Директория «..» специальная; она указывает на родительскую директорию. Так, продолжая с примера выше:

    $ pwd
    /usr/local/bin
    $ cd ..
    $ pwd
    /usr/local

    Как видно, наша текущая директория теперь /usr/local. Мы смогли переместиться «назад» на одну директорию относительно текущей, где были до того.

    Кроме того, мы также можем использовать «..» в существующем относительном пути, позволяющем нам переместиться в директорию «рядом» с той, в которой находимся:

    $ pwd
    /usr/local
    $ cd ../share
    $ pwd
    /usr/share

    Примеры относительных путей

    Относительные пути могут быть чуточку более сложными. Ниже несколько примеров, попробуйте самостоятельно догадаться, где вы окажитесь после набора каждой из этих команд.

    $ cd /bin
    $ cd ../usr/share/zoneinfo

    $ cd /usr/X11R6/bin
    $ cd ../lib/X11

    $ cd /usr/bin
    $ cd ../bin/../bin

    А теперь наберите их и проверьте свои предположения. 😉

    Перед тем как мы закончим изучение cd, есть несколько моментов, которые необходимо прояснить. Во-первых, есть еще одна специальная директория «.», которая означает «текущая директория». Хотя она и не используется с командой cd, но часто используется для выполнения программы из текущей директории, как в следующем примере:

    В данном случае будет запущена исполняемая программа myprog, находящаяся в текущей рабочей директории.

    cd и домашняя директория

    Если бы мы хотели переместиться в нашу домашнюю директорию, то могли бы набрать:

    Без каких либо аргументов cd переместит в вашу домашнюю директорию, которая будет /root для суперпользователя, или обычно /home/username (где username — имя пользователя в системе — прим.пер.) для любого другого пользователя. Но, что если мы хотим указать файл в нашей домашней директории? Может быть мы хотим передать путь к файлу в качестве аргумента нашей программе myprog. Если файл расположен в нашей домашней директории, мы можем набрать:

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

    Основы BASH

    Цель статьи — познакомить поближе с bash, рассказать про синтаксис, основные приемы и фишки языка, для того чтобы даже обычный пользователь смог быстренько написать простой скрипт для выполнения ежедневной (-недельной, -месячной) рутинной работы или, скажем, «на коленке» наваять скриптик для бэкапа директории.

    Введение

    break выход из цикла for, while или until
    continue выполнение следующей итерации цикла for, while или until
    echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
    exit выход из оболочки
    export отмечает аргументы как переменные для передачи в дочерние процессы в среде
    hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
    kill посылает сигнал завершения процессу
    pwd выводит текущий рабочий каталог
    read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
    return заставляет функцию оболочки выйти с указанным значением
    shift перемещает позиционные параметры налево
    test вычисляет условное выражение
    times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
    trap указывает команды, которые должны выполняться при получении оболочкой сигнала
    unset вызывает уничтожение переменных оболочки
    wait ждет выхода из дочернего процесса и сообщает выходное состояние.

    И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе

    Что необходимо знать с самого начала

    1. Любой bash-скрипт должен начинаться со строки:

    в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.

    2. Коментарии начинаются с символа # (кроме первой строки).
    3. В bash переменные не имеют типа(о них речь пойдет ниже)

    Переменные и параметры скрипта

    Приведу как пример небольшой пример, который мы разберем:

    Результат выполнения скрипта:

    Вы запустили скрипт с именем ./test.sh и параметром qwerty
    Вы запустили скрипт с именем $script_name и параметром $parametr1

    После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:

    $DIRSTACK — содержимое вершины стека каталогов
    $EDITOR — текстовый редактор по умолчанию
    $EUID — Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как…
    $UID — …содержит реальный идентификатор, который устанавливается только при логине.
    $FUNCNAME — имя текущей функции в скрипте.
    $GROUPS — массив групп к которым принадлежит текущий пользователь
    $HOME — домашний каталог пользователя
    $HOSTNAME — ваш hostname
    $HOSTTYPE — архитектура машины.
    $LC_CTYPE — внутренняя переменная, котороя определяет кодировку символов
    $OLDPWD — прежний рабочий каталог
    $OSTYPE — тип ОС
    $PATH — путь поиска программ
    $PPID — идентификатор родительского процесса
    $SECONDS — время работы скрипта(в сек.)
    $# — общее количество параметров переданных скрипту
    $* — все аргументы переданыне скрипту(выводятся в строку)
    $@ — тоже самое, что и предыдущий, но параметры выводятся в столбик
    $! — PID последнего запущенного в фоне процесса
    $$ — PID самого скрипта

    Условия

    Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):

    Результат выполнения скрипта:

    Таким образом оператогр условия имеют следующий вид:
    if [[ «что-то» ) #больше
    -ge,(>=) #больше или равно
    ! #отрицание логического выражения
    -a,(&&) #логическое «И»
    -o,(//) # логическое «ИЛИ»

    С основами языка и условиями мы разобрались,

    Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.

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

    В статье опишу основные команды Linux, которые приходилось применять при изучении и работе в ОС Linux. Хватит слов, приступим:

    Работа в интерпретаторе

    • history – Отображает всю историю введенных команд
      • N – N-строк истории коштшманд
      • -dN — удалить N-ю строку в истории команд (например введенный пароль)
    • !! — последняя введенная команда
    • !N — N-я команда в истории
    • !-N — команда, введенная N-шагов назад
    • !string — последняя команда, начинающаяся со string
    • !$ — последнее слово из предыдущего события
    • !?string? -последняя команда содержащая string
    • . s/новый/старый — замена в последней введенной команде, фразы старый на новый

    Файловые команды

    • basename — Удаляет любой путь и указанный суффикс из имени файла (получает имя файла)
    • cddir – сменить директорию на dir, при этом, если в текущем каталоге нет подкаталога dir, то поиск dir происходит по каталогам, указанным в переменной $CDPATH
    • cpfile1 file2– скопировать file1 в file2
      • -r – рекурсивно
      • -f или —force — попытаться удалить существующую цель, если в нее нельзя записывать.
      • -i или —interactive — интерактивно подтвердить попытку замещения существующего файла
      • -b или —backup — сделает резервную копию файлов, которые будут замещены.
      • -p — сохранить атрибуты копируемого файла (время, права и т.п.)
    • csplit — Разбивает заданный файл на несколько новых файлов в соответствие с заданными образцами или номерами строк и выдает количество байтов в каждом новом файле
    • ddif=/source/device of=/target/device bs=blocksize count=кол-во_блоков — копирование и преобразование файлов
    • dirname — Удаляет из имени файла суффикс, не являющийся директорием (получает имя каталога — путь)
    • lnfile link – создать хардлинк link к файлу file
      • -s – создать символическую ссылку
    • ls– список файлов и каталогов
      • -a – со скрытыми
      • -l — форматированный одноколоночный список (выводится тип файла, права доступа к файлу, количество жестких ссылок на файл, имя владельца, имя группы, размер файлаr (в байтах), временной штамп и имя файла.Типы файлов могут принимать следующие значения: для обычного файла, d для каталога, b для блочного устройства, c для символьного устройства, l для символической ссылки, p для PIPE (FIFO) и s для гнезда (socket).
      • -h — отображение размеров в человекопонятном (от human) виде (10M, 15K)
      • -i — вывод inode элементов
      • -t — сортировка по дате модификации (от старых к новым)/time
      • -S — отсортировать по размеру (от больших к маленьким)/size
      • -r — сортировка в обратном порядке
      • -R — список с подкаталогами
    • md5sum — Выводит или проверяет контрольные суммы Message Digest 5 (MD5)
    • mkdirdir – создать каталог dir
      • -p /path/to/three/ создание нескольких каталогов dir1,dir2,dir3 в каталоге /path/to/three/
      • -m permission — указание прав permission на создаваемый каталог
    • mvfile1 file2 – переименовать или переместить file1 в file2. если file2 существующий каталог — переместить file1 в каталог file2
    • nl — Сообщает о количестве строк в указанных файлах
    • pwd – показать текущий каталог
    • readlink — Выдает значение указанной символической ссылки
    • rmfile – удалить file
      • -r – удалить каталогь
      • -f – удалить форсированно (без запроса)
      • -i или —interactive — интерактивно подтвердить попытку удаления файла
    • stat — Отображает статус файла или файловой системы
    • touchfile – обновить время доступа к файлу file или создать file, если его нет
      • -c или —no-create — не создавать файл, если его не существует.
      • -d или -t — изменить время на указанное (формат указания времени в man touch)
    • morefile – вывести содержимое file с возможностью прокрутки вверх/вниз
    • lessFile — аналог more
    • teefile — вывод данных, получаемых со стандартного ввода на стандартный вывод И в файл file. (команда называется «тройник»)
    • fuserfile — идентифицирует (если без параметров — отображает P >Управление текстом
      • cutfile — выделение из файла file указанных последовательностей и отправка на стандартный вывод
      • catfile – отображение содержимого file на стандартный вывод
        • -E — отображение концов строк
        • -n — нумерация строк
      • tacfile – отображение содержимого file на стандартный вывод в обратном порядке
      • echofile — отображение содержимого file на стандартный вывод
        • echostring >file запись строки string в файл file (при наличии в файле других строк, файл перезаписывется)
        • echostring >>file ДОзапись строки string в КОНЕЦ файла file (при наличии в файле других строк, строка stringдописывается в конец файла file )
        • -e — интерпретировать управляющие символы, такие как (\n — новая строка,\t -горизонтальаня табуляция и т.п.)
      • expand — Конвертирует символы табуляции в пробелы
      • revfile — Меняет в заданном файле порядок строк на обратный
      • seq — Выдает последовательность чисел из указанного диапазона с указанным значением приращения
      • shred — Удаляет указанные файлы, путем перезаписывания на их место данных по сложным образцам, что усложняет восстановление удаляемых файлов
      • shuf — Перемешивает строки текста
      • sort — сортировка строк текстовых файлов по указанным параметрам
        • -k — указание номера поля, по которому сортируем
        • -t — разделитель
        • -n — числовая сортировка, т.е. сравнение ведётся по числовому значению (используют совместно с параметром -b)
        • -r — сортировка в обратном порядке
        • -R — в произвольном порядке
        • -u — исключение повторяющихся строк
      • tailfile – вывести последние 10 строк file
        • -f – вывести содержимое file по мере роста, начинает с последних 10 строк
      • tailffile — аналог tail -f
      • wcFile — печатает число строк, слов и байт в файле File
        • -c, —bytes — байтов
        • -m, —chars — символов
        • -l, —lines — строк
        • -L, —max-line-length — число символов в строе максимальной длины
      • trstring1 string2— символьное преобразование символов из string1 в string2(echo mama | tr abcd ABCD)
        • -s — замена повторяющихся символов на один
        • -d — убрать из вывода символы (abcd)
      • unexpand — Конвертирует символы пробелов в символы табуляции
      • uniq — Удаляются все повторяющиеся копии уже имеющихся строк

      Управление системой

      • runlevel – вывести текущий уровень выполнения
      • chkconfig — информация о запускаемых сервисах на разных уровнях запуска для RedHat- подобных дистрибутивов
        • —list — вывод всех установленных сервисов с уровнями запуска
        • service on/off — включение — on или отключение — off запуска службы service на всех уровнях запуска
        • —levels 23 service on/off — включение — on или выключение — off запуска службы service на всех уровнях запуска 23
      • update-rc.dservice default — добавление демона service в автоматическую загрузку на уровни выполнения по умолчанию для Debian подобных дистрибутивов
      • ctrlaltdelhard или soft — Устанавливает для комбинации символов Ctrl+Alt+Del жесткую или мягкую перезагрузку (обычно используется в стартовом скрипте, например /etc/rc.local)
      • initn — указание процессу init перейти на уровень выполнения n
      • /etc/init.d/daemoncommand — (управление службами системы инициализации SystemV) выполнение команды command над демоном daemon (наиболее часто используемые команды: start, stop, status, restart, reload — запустить демон, остановить, перезапустить, проверить статус, перечитать конфигурационный файл соответственно)
      • stty — управление настройками терминала
        • -a — вывод всех текущих настроек
        • sane — сброс настроек к настройкам по умолчанию
      • lscpu — вывод информации о ЦП
      • rtcwake — Используется для перевода системы в режим «сна», продолжающийся до тех пор, пока не настанет указанное время «проснуться»
      • telinitn — аналог (точнее символьная ссылка на init) init
      • initctl — управление системой загрузки upstart
        • check-config — проверить конфигурационные файлы Upstart
        • emit event — послать (эмитировать) событие event — upstart’у
        • help — отображение справки по командам initctl
        • list — отображение статуса задач
        • start jobd — запуск задачи/службы jobd
        • stop jobd — остановка задачи/службы jobd
        • status jobd — отобразить статус задачи/службы jobd
        • restart jobd — перезапуск задачи/службы jobd
        • reload jobd — перечитать конфиг задачи/службы jobd
        • reload-configuration — перечитать конфиги из /etc/init/
        • show-config — отобразить конфигурационный файл (когда запускается, останавливается, на какие события реагирует)
        • version — отобразить версию upstart
      • init-checkconf/path/to/file.conf — проверить конфигурационный файл upstart — /path/to/file.conf
      • startjobd/statusjobd/stopjobd/restartjobd/reloadjobd — аналог команд initctl start jobd и т.д. соответственно
      • shutdown n — переключается на уровень выполнения 1 (однопользовательский режим) через n минут (можно ввести вместо цифр — now, тогда уровень сменится моментально без ожидания)
        • -r переключается на уровень выполнения 6 (перезагрузка)
        • -h переключается на уровень выполнения 0 (выключение)
        • -c отмена запущенного переключения на какой-либо уровень выполнения.
      • reboot — перезагрузка, аналог shutdown -r now
      • halt — выключение, аналог shutdown -h now
      • watchcommand — запуск команды command через некоторые промежутки времени и отображение ее вывода в полный экран
        • -n sec — каждые sec-секунд
      • crontabfile — создание таблиц планировщика Linux из файла file
        • -u user — редактирование таблиц планировщика пользователя user
        • -l — отображение текущих заданий из crontab
        • -e — редактирование таблиц планировщика
        • -r — удаление задания планировщика
        • -i — запрос перед удалением заданий crontab

      Управление печатью (CUPS)

      • lpstat – отображение статуса заданий, классов и принтеров
        • -a printer — отображение текущего статуса принтера printer
        • -c >Управление процессами
        • bgnumber – список остановленных и фоновых задач/продолжить выполнение остановленной задачи в фоне, имеющей номер number
        • fgnumber – выносит на передний план последние задачи
          • n – вынести задачу n на передний план
        • killp >

          Права доступа на файлы/папки

          • chmodoctal file– сменить права file на octal, раздельно для пользователя, группы и для всех, добавлением:
            • 4 – чтение (r)
            • 2 – запись (w)
            • 1 – исполнение (x)
            • Примеры:
              • chmod 777 – чтение, запись, исполнение для всех
              • chmod 755 – rwx для владельца, rx для группы и остальных.
            • -R — назначение указываемых прав всем дочерним элементам
          • chownuser:group file – сменить владельцев file на user:group

          SSH

          • sshuser@host– подключится к host как user
            • -p port – подключится на порт port
          • ssh-copy-id user@host – добавить ваш ключ на host для user чтобы включить логин без пароля и по ключам

          Поиск

          • greppattern files– искать pattern в files
            • -r – искать рекурсивно pattern в dir
            • command | grep pattern – искать pattern в выводе command
            • -v — искать строки, не содержащие pattern (например можно найти все строки, не начинающиеся на комметарий и не пустые: grep -v ‘^#’| grep -v ‘^$’)
            • -i — без учета регистра букв
            • -E — с интерпретацией регулярных выражений
            • -l — листинг файлов, содержащих строку в имени
          • locatefile – найти все файлы с именем file
          • findpath file — поиск файла file в каталоге path
              • -path — поиск по пути
              • -name — поиск по имени
              • -ipath или -iname — то есть с «i» — регистронезависимый поиск
              • -type d или f или l — поиск по типу файла: ‘f’ для регулярных файлов, ‘d’ для каталогов и ‘l’ для символьных ссылок соответственно (другие типы — в man find)
              • -size n — поиск файла по размеру (n может быть как n, как +n (более n), как -n (менее n), а так же для указания единицы измерения: nc — для байт, nk — для килобайт, nb — блоков)
              • -empty — поиск пустых файлов
              • -print — вывод всего что найдено
              • -ls — вывод найденного аналогично команде ls -lids
              • -exec command; — выполняет команду command для каждого файла (обязательно заканчивается ; ),
              • -mtime n — поиск файла по времени модификации
              • -atime n — поиск файла по времени доступа
              • -daystart — указание на отсчет времени от полуночи
              • -mmin n — указание времени модификации от текущего времени в минутах
              • данный пример ищет файлы размером от 23 байт до 26 и с найденным выполняет команду ls -l.
            • данный пример ищет файлы с битом SU режим )

      Сеть (DNS)

          • ipcalc — калькулятор сети
          • ethtoolinterface — отобразить физическую статистику интерфейса interface;
          • pinghost – пропинговать host и вывести результат
          • whoisdomain – получить информацию whois для domain
          • traceroutehost — трассировка маршрута до определенного хоста
          • ifconfigeth0 — отображение/настройка параметров сетевого интерфейса etho (либо другого, если без указания интерфейса — отобразит конфигурацию всех интерфейсов)
            • inet ip.add.re.s — задание ip адреса интерфейса (TCP/IP)
            • mask xxx.xxx.xxx.xxx — задание маски подсети интерфейса
            • broadkast xxx.xxx.xxx.xxx — задание широковещательного адреса интерфейса
            • up — запустить интерфейс
            • down — остановить интерфейс
            • -a — отображение всех железных интерфейсов (в том числе и не поднятых и поднятых)
          • route — отображение таблицу маршрутизации
            • -n — не резолвить имена в адреса
            • add destination gw gateway metric metric — добавить маршрут (add) для destination (адрес назначения), IP адрес шлюза (gw) — gateway, с метрикой metric
              • add -net -указание добавить маршрут для сети
              • add — host -указание добавить маршрут для хоста
            • deldestination — удалить маршрут с назначением destination
          • mtrhost — отображение статистики трассировки до хоста host (красивее чем трасероут )
          • netcathost port — просмотр, кто слушает порт
          • nc — TCP/IP швейцарсий нож
            • -h — отобразить помощь
            • -l port — прослушивать локальный порт port для входящих соединений.
          • netstat -отображение статистики сети
            • -r — таблица маршрутизации
            • -n — без разрешения IP адресов в имена и сетевых портов в названия
            • -a — состояние всех (во всех состояниях) соединений на локальной машине
            • -t — статистика по протоколу TCP
            • -u — статистика по протоколу UDP
            • -i — отобразить статистику сетевых интерфейсов
            • -l — просмотр сокетов, слушающих (LISTEN) соединения (ожидающих соединения)
            • -p — отобразить имя программы и P >
            • -q— вывод краткой информации о пакете (версия)
              • -a — вывод информации о всех установленных пакетах
              • -f file — Запросить пакет, которому принадлежит файл file
              • -ipkg.rpm — вывод полной информации об установленном пакете pkg.rpm
              • -lpkg.rpm Запросить список файлов в пакете pkg.rpm
            • -ivh — установка пакета с выводом доп инфо
            • -Uvh — обновление имеющегося пакета с выводом доп инфо
            • -e — удаление пакета
            • -qplpkg.rpm — вывод информации о файле пакета pkg.rpm
            • -R — Запросить список пакетов, от которых зависит этот пакет
            • —initdb — инициализация базы данных RPM (создает структуру файлов в каталоге /var/lib/rpm, содержащих информацию о пакетах, зависимостях и т.п.)
            • —nodeps — не обращать внимания на зависимости

      Управление пользователями и группами

          • last — Показывает, какие пользователи последними входили в систему (и покидали ее), выполняя для этого поиск в файле /var/log/wtmp в обратном порядке; также показывает информацию о загрузках системы, ее остановках и изменениях ее уровней запуска
          • lastb — Показывает неудачные попытки входа в систему, которые записаны в файле /var/log/btmp
          • w – показать пользователей онлайн
          • whoami – имя, под которым вы залогинены.
          • fingeruser@host – показать информацию о user (без указания пользователя — выведет список пользователей, залогиненых в системе) на хосте host, утилита не чувствительна к регистру символов
          • writeuser [terminal] — начать сеанс общения с пользователем user на терминале terminal
          • talkuser@host — чат с пользователем user на компьютере host
          • wallmessage — разместить сообщение message на всех терминалах.
          • mesg y/n — включение — y и выключение — n возможности принимать сообщения на консоли
          • suuser — создание оболочки (подоболочки текущей оболочки) с правами пользователя user (без указания пользователя — вызывается оболочка root)
            • -, -l, —login — все 3 параметра имеют одно значение — загрузить окружение вызываемого пользователя (выполняются все стартовые сценарии и подгружаются переменные окружения вызываемого пользователя)
            • -с command — выполнить команду command с правами суперпользователя и «понизить» права в исходные после завершения команды.
          • useradduser — добавление нового регистрационного имени пользователя user в системе
            • -g group — задает основную группу (primary group) для нового пользователя. По умолчанию используется стандартная группа, указанная в файле /etc/default/useradd.
            • -d dir — доманий каталог (home directory) нового пользователя. По умолчанию используется $HOMEDIR/user
            • -s shell — полный путь к программе (шеллу), используемой в качестве начального командного интерпретатора для пользователя
            • -m — Создает начальный каталог нового пользователя, если он еще не существует. Копирует скелетные файлы и другие каталоги из /etc/skel в домашний каталог.
            • -b — Базовый каталог по умолчанию, в котором создаются домашние каталоги пользователей. Обычно это /home, а пользовательские каталоги — /home/$USER.
            • -c «text text» — Текстовая строка для описания id, содержащая, например, полное имя пользователя.
            • -e YYYY-MM_DD — Дата, когда учетная запись потеряет силу или будет заблокирована.
            • -G gr1,gr2,gr3 — Список дополнительных групп, которым принадлежит пользователь.
            • -o — Позволяет создать пользователя с неуникальным id.
            • -u — Неотрицательное цифровое значение id пользователя, которое должно быть уникальным, если не определено иначе опцией -o. По умолчанию используется самое маленькое значение, не меньше, чем UID_MIN, причем больше, чем id любого из существующих пользователей.
          • usermoduser — изменение настроек пользователя с именем user в системе
            • аналогичны всем вышеуказанным для useradd
            • -L блокировка учетной записи
            • -U — разблокировка учетной записи
          • userdeluser — удаляет пользователя user из системы
            • -r — удаление домашнего каталога пользователя
          • users — Выдаются имена пользователей, которые в текущий момент зарегистрированы в системе
          • groupaddgroup — добавление (создание) новой группы group в системе
            • -f — Выйти со статусом успешного выполнения, если группа уже существует. Удобна при написании скриптов, когда нет необходимости проверять, существует ли группа, прежде чем пытаться ее создавать.
            • -g — Задать id группы вручную.
            • -o — Разрешить группу с неуникальным id.
          • groupmodgroup — изменение информации о группе group в системе
            • -n group2 задание нового имени group2
          • groupdelgroup — удаление группы group из системы
          • passwduser — изменяет/устанавливает пароль пользователя user
            • -l — блокирование учетной записи
            • -d — удаление пароля учетной записи (блокирование)
            • -f — установка даты прекращения полномочий
            • -n — минимальное время действия пароля в днях
            • -x — максимальное время действие пароля в днях
            • -w — число дней появления предупреждения об окончании действия пароля
            • -i — число дней, после которых пароль потеряет силу и учетка заблокируется.
            • -S — вывод сообщения о статусе пользователя
          • gpasswdgroup — изменяет/устанавливает пароль группы group(Наличие пароля группы позволяет пользователям временно войти в группу при помощи команды newgrp, если им известен пароль группы.)
          • idwho — просмотр информации о пользователе/группе who (принадлежность к группам, UID, GID)
          • ulimit — ограничение пользовательских ресурсов:
            • -a — отображение всех возможных ресурсов
            • -f — ограничение размера файла
            • -t — процессорное время
            • .

      Управление блочными устройствами (работа с разделами на жестком диске)

          • fdisk/dev/block_device— интерактивное редактирование таблицы раздела блочного устройства /dev/block_device
            • -l — отображение таблицы разделов устройства.
          • badblocks — Поиск плохих блоков на устройстве (обычно на дисковом разделе)
          • blk >
          • uuidd — Демон, используемый библиотекой UUID для создания безопасных и гарантированно уникальных идентификаторов UUID
          • uuidgen — Создает новые идентификаторы UUID. Каждый новый идентификатор UUID может обоснованно считаться уникальным среди всех идентификаторов UUID, созданных как на локальной машине, так и на любых других машинах, как в прошлом, так и в будущем.
          • resize2fs/dev/раздел размерM — изменение размера раздела /dev/раздел до размера размерM(в мегабайтах)
            • -p — выводить информацию

      На сегодня это все. Еще хочу дать ссылочку на отличную шпаргалку, как говориться мастхэв, распечатал и повесил на стенку рядом с монитором:Команды Linux Нашел ее тут .

      Upd 2010.10: добавил — работа в интерпретаторе, справочная информация и параметры команды ls
      Upd 2010.11:
      добавил команду pstree, раздел работы с блочными устройствами, и команды для работы с ядром
      Upd 2010.12:
      добавил команды управления печатью, а так же команды управления планировщиком cron
      Upd 2011.01.18: добавил команды управления переменными
      Upd 2011.01.18:
      добавил команды управления apt
      Upd 2011.02.10: обновил команды управления сетью
      Upd 2011.06.05: обновил команду strace
      Upd 2011.06.06: обновил команды watch и lshw
      Upd 2011.06.12: добавил команды управления upstart — initctl
      Upd 2011.07.09: добавил команды управления DNS
      Upd 2011.10.24: добавил команды управления NFS
      Upd 2011.10.30: обновлен список команд во многих разделах

      71 команда Linux на все случаи жизни. Ну почти

      Команды Linux для навигации в терминале

      Команды Linux для получения прав суперпользователя

      Команды Linux для управления пакетным менеджером

      Команды Linux для управления процессами

      Команды Linux для управления файлами

      Команды Linux для работы с разделами

      Команды Linux для управления системой

      Команды Linux для управления пользователями

      Команды Linux для управления сетью

      В терминале Linux можно делать практически что угодно: настраивать систему, устанавливать и удалять приложения, управлять дисками и файлами и даже разговаривать с коровами.

      Команды Linux для навигации в терминале

      1. && . Строго говоря, это не команда. Если вы хотите выполнить сразу несколько команд, поставьте между ними двойной амперсанд вот так: первая_команда && вторая_команда . Терминал выполнит команды по порядку. Вы можете ввести столько команд, сколько захотите.
      2. alias . Присваивает созданные вами названия длинным командам, которые вы не можете запомнить. Введите alias длинная_команда короткая_команда .
      3. cd . Изменяет текущую терминальную папку. Когда вы запускаете терминал, он использует вашу домашнюю папку. Введите cd адрес_папки , и терминал будет работать с файлами, которые там находятся.
      4. clear . Очищает окно терминала от всех сообщений.
      5. history . Отображает все недавно введённые вами команды. Кроме того, вы можете переключаться между недавними командами с помощью клавиш «Вверх» и «Вниз». Если вы не хотите, чтобы введённая вами команда была записана, поставьте перед ней пробел так: ваша_команда .
      6. man . Отображает руководство по программам и командам Linux. Введите man имя_пакета или man ваша_команда .
      7. whatis . Отображает краткое описание какой-либо программы. Введите команду и название программы whatis имя_пакета .

      Команды Linux для получения прав суперпользователя

      Для выполнения множества действий в системе, например для установки и удаления программ, вам понадобятся права администратора, или суперпользователя root, как его называют в Linux.

      1. sudo . Эта команда даст вам права суперпользователя. Введите sudo перед нужной командой (например, sudo apt upgrade ), чтобы выполнить её от имени администратора. Система спросит у вас пароль.
      2. sudo su . После этой команды все введённые вами команды будут исполняться от имени суперпользователя, пока вы не закроете терминал. Используйте её, если вам нужно выполнить много команд с правами администратора.
      3. sudo gksudo . Команда для запуска с правами администратора приложения с графическим интерфейсом. Например, если вы хотите переместить или изменить системные файлы, введите sudo gksudo nautilus (укажите тот файловый менеджер, которым пользуетесь).
      4. sudo !! . Эта команда запустит ранее введённую команду с правами администратора. Полезно, если вы набрали команду без sudo .

      Команды Linux для управления пакетным менеджером

      Установку и удаление приложений в Linux выполняют пакетные менеджеры. В Ubuntu и Debian пакетный менеджер называется apt, в Fedora — dnf, в Arch и Manjaro — pacman. Они загружают приложения из сетевых репозитариев, источников пакетов. Давать им команды следует с правами суперпользователя.

      apt (Debian/Ubuntu/Mint)

      1. sudo apt install имя_пакета . Установить нужный пакет.
      2. sudo apt-add-repository адрес_репозитария . Добавить сторонний репозитарий.
      3. sudo apt update . Обновить сведения о пакетах.
      4. sudo apt upgrade . Обновить все пакеты до самых свежих (выполнять после apt update ).
      5. sudo apt remove имя_пакета . Удалить ненужный пакет.
      6. sudo apt purge имя_пакета . Удалить ненужный пакет со всеми зависимостями, если хотите освободить больше места.
      7. sudo apt autoremove . Удалить все ненужные зависимости, бесхозные пакеты и прочий мусор.

      dnf (Red Hat/Fedora/CentOS)

      1. sudo dnf install имя_пакета . Установить нужный пакет.
      2. sudo dnf config-manager —add-repo адрес_репозитария . Добавить сторонний репозитарий.
      3. sudo dnf upgrade . Обновить все пакеты до самых свежих.
      4. sudo dnf remove имя_пакета . Удалить ненужный пакет.
      5. sudo dnf autoremove . Удалить все ненужные зависимости.

      pacman (Arch/Manjaro)

      1. sudo pacman -S имя_пакета . Установить нужный пакет.
      2. sudo yaourt -S имя_пакета . Установить пакет из AUR, если его нет в основном репозитарии.
      3. sudo pacman -Sy . Обновить сведения о пакетах.
      4. sudo pacman -Syu . Обновить все пакеты до самых свежих.
      5. sudo pacman -R имя_пакета . Удалить ненужный пакет.
      6. sudo pacman -Rs имя_пакета . Удалить ненужный пакет со всеми зависимостями.

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

      sudo apt install firefox clementine vlc

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

      Команды Linux для управления процессами

      1. kill . Эта команда служит для принудительного завершения процессов. Нужно ввести kill PID_процесса . PID процесса можно узнать, введя top .
      2. xkill . Ещё одна команда для завершения процессов. Введите её, затем щёлкните по тому окну, которое нужно закрыть.
      3. killall . Убивает процессы c определённым именем. К примеру, killall firefox .
      4. top . Отображает перечень запущенных процессов, сортируя в зависимости от потребления ресурсов CPU. Своего рода терминальный «Системный монитор».

      Команды Linux для управления файлами

      Просмотр и изменение файлов

      1. cat . Когда команда используется с одним текстовым файлом (вот так: cat путь_к_файлу ), она отображает его содержимое в окне терминала. Если указать два и больше файлов, cat путь_к_файлу_1 путь_к_файлу_2 , она склеит их. Если ввести cat путь_к_файлу_1 > новый_файл , она объединит содержимое указанных файлов в новый файл.
      2. chmod . Позволяет изменять права доступа к файлу. Может пригодиться, если вы хотите внести изменения в системный файл.
      3. chown . Изменяет владельца файла. Следует выполнять с правами суперпользователя.
      4. file . Выводит информацию об указанном файле.
      5. nano . Открывает простой текстовый редактор. Можно создать новый текстовый файл или открыть существующий: nano путь_к_файлу .
      6. rename . Переименовывает файл или несколько файлов. Команду можно использовать и для массового переименования файлов по маске.
      7. touch . Изменяет дату последнего открытия или модификации указанного файла.
      8. wget . Загружает файлы из интернета в терминальную папку.
      9. zip . Распаковывает и сжимает архивы.

      Создание и удаление файлов и папок

      1. mkdir . Создаёт новую папку в текущей терминальной папке или в указанной папке: mkdir путь_к_папке .
      2. rmdir . Удаляет указанную папку.
      3. rm . Удаляет файлы. Может удалить как отдельный файл, так и группу, соответствующую определённым признакам.

      Копирование и перемещение файлов

      1. cp . Создаёт копию указанного файла в папке терминала: cp путь_к_файлу . Или вы можете указать назначение cp путь_к_файлу путь_для_копии .
      2. mv . Перемещает файл из одной папки в другую. Вы можете указать имя для перемещаемого файла. Забавно, но в Linux эта команда может использоваться и для переименования файлов. Просто укажите ту же папку, где находится файл, и другое имя.

      Поиск файлов

      1. find . Поиск файлов по определённым критериям, таким как имя, тип, размер, владелец, дата создания и модификации.
      2. grep . Поиск текстовых файлов, содержащих определённые строки. Критерии очень гибко настраиваются.
      3. locate . Поиск файлов и папок, чьи названия подходят запросу, и отображение их путей в файловой системе.

      Команды Linux для работы с разделами

      1. lsblk . Эта команда демонстрирует, какие диски есть в вашей системе и на какие разделы они поделены. Также команда отображает имена ваших разделов и накопителей, в формате sda1, sda2 и так далее.
      2. mount . Монтирует накопители, устройства или файловые системы Linux, чтобы вы могли с ними работать. Обычно устройства подключаются автоматически, как только вы щёлкнете по ним в файловом менеджере. Но иногда может понадобиться примонтировать что-то вручную. Вы можете подключать что угодно: диски, внешние накопители, разделы и даже ISO-образы. Эту команду нужно выполнять с правами суперпользователя. Чтобы примонтировать имеющийся диск или раздел, введите mount sdX .
      3. umount . Демонтирует файловые системы. Команда umount sdX отключит файловую систему внешнего носителя, чтобы вы могли извлечь его.
      4. dd . Эта команда копирует и преобразовывает файлы и разделы. У неё множество различных применений. Например, dd if=/dev/sda of=/dev/sdb сделает точную копию раздела sda на разделе sdb. dd if=/dev/zero of=/dev/sdX затрёт содержимое указанного носителя нулями, чтобы информацию было невозможно восстановить. А dd if=

      /Downloads/ubuntu.iso of=/dev/sdX bs=4M сделает загрузочный носитель из скачанного вами образа с дистрибутивом.

      Команды Linux для управления системой

      1. df . Отображает объём вашего диска, и сколько на нём осталось свободного места.
      2. free . Отображает объём доступной и занятой оперативной памяти.
      3. uname . Отображает сведения о системе Если ввести uname , терминал сообщит только Linux. Но команда uname -a выводит сведения об имени компьютера и версии ядра.
      4. uptime . Сообщает, как долго запущена ваша система.
      5. whereis . Отображает расположение исполняемого файла нужной программы.
      6. whoami . Называет имя пользователя.

      Команды Linux для управления пользователями

      1. useradd . Регистрирует нового пользователя. Введите useradd имя_пользователя , и пользователь будет создан.
      2. userdel . Удаляет учётную запись и файлы пользователя.
      3. usermod . Изменяет учётную запись пользователя. Может переместить домашнюю папку пользователя или назначить дату, когда учётная запись будет заблокирована.
      4. passwd . Изменяет пароли учётных записей. Обычный пользователь может изменить пароль только своей учётной записи, суперпользователь может изменить пароль любой учётной записи.

      Команды Linux для управления сетью

      1. ip . Многофункциональная команда для работы с сетью. Команда ip address show выводит сведения о сетевых адресах, ip route управляет маршрутизацией и так далее. Давая команды ip link set ethX up , ip link set ethX down , можно включать и выключать соединения. У команды ip много применений, так что перед её использованием лучше ознакомиться с руководством или ввести ip —help
      2. ping . Показывает, подключены ли вы к сети, и помогает определить качество связи.

      И ещё кое-что

      Напоследок — главные команды Linux. Они выводят на экран корову, которая может разговаривать с вами (не спрашивайте, что употребляют разработчики).

      1. cowsay что_угодно . Корова произнесёт то, что вы ей скажете.
      2. fortune | cowsay . Корова выдаст умную (или не очень) мысль или цитату.
      3. cowsay -l . Выводит список всех животных, которые могут быть отображены в терминале. Если вы вдруг не любите коров.
      4. fortune | cowsay -f животное_из_списка . Животное на ваш выбор начинает сыпать цитатами, иногда уместными.
      5. sudo apt-get install fortunes fortune-mod fortunes-min fortunes-ru . Заставит весь зоопарк говорить по-русски. Без этого животные цитируют Твена и Уайльда в оригинале.

      Это далеко не все команды Linux. Если вам нужно узнать в деталях параметры и способы применения команд Linux, вы можете воспользоваться встроенным руководством. Наберите man ваша_команда или ваша_команда —help .

      Мастер Йода рекомендует:  Использование сателлитов в продвижении сайтов
      Добавить комментарий
    Конфигурационный файл Описание
    /etc/profile
    -/.bashprofile
    /etc/inputrc