Мы уже сталкивались с различными командами, их параметрами и аргументами. Попробуем разобраться как все устроено.
Введенное что-либо в командной строке воспринимается как инструкция к выполнению. Она может быть как указанием к запуску другой программы, так и внутренней командой Linux Shell (мы работает с программой bash в качестве командной строки). Для нас в большинстве случаев важен лишь результат исполнения.
Команды Linux Shell можно поделить на 4 группы:
- Исполняемая программа. В качестве примера можно взять любой файл из директории /usr/bin. Программы могут быть представлены в виде скомпилированных двоичных файлов или текстовых скриптов. Они дают возможность расширения набора доступных возможностей (команд) при установке новых приложений или разработке собственных.
- Внутренняя команда Linux Shell. В самой программе, выполняющей функции Linux Shell (в нашем случае программа bash) имеется фиксированный набор своих команд. В отличии от исполняемых программ, они позволяют изменять настройки Linux Shell. Например, при помощи команды cd можно изменить рабочую директорию.
- Внутренние функции Shell. Это миниатюрные скрипты, включаемые в окружение внутри Linux Shell. Пока мы с ними еще не сталкивались. Подробно мы познакомимся с ними в материалах программирования и разработки скриптов для Linux Shell.
- Псевдонимы или алиасы. Это команды, которые можно задать на основе других доступных команд.
- Управляющие конструкции. Являются частью языка Shell для написания инструкций и управляют выполнением команд. Подробно мы познакомимся с ними в материалах программирования и разработки скриптов для Linux Shell.
Разморозим виртуальную машину и познакомимся с командами поближе 🙂
Определение типа команд
Если мы знаем только имя команды, но не знаем с чем столкнулись и нам любопытно узнать, то можно воспользоваться командой type, которая определит тип интересуемой нас команды. Для этого после команды type указывается имена интересуемых команд. Сама команда type является внутренней командой Linux Shell (программы bash). Убедимся в этом.
Попробуем опытным путем получить информацию по ранее известным нам командам cd, pwd, ls, less, file, mkdir, rmdir, cp, mv, rm и kshkqskskjskafege (первая команда, которую мы ввели).
[[email protected] ~]$ type cd pwd ls less file mkdir rmdir cp mv rm kshkqskskjskafege cd is a shell builtin pwd is a shell builtin ls is aliased to `ls —color=auto’ less is hashed (/usr/bin/less) file is hashed (/usr/bin/file) mkdir is hashed (/usr/bin/mkdir) rmdir is hashed (/usr/bin/rmdir) cp is hashed (/usr/bin/cp) mv is hashed (/usr/bin/mv) rm is hashed (/usr/bin/rm) bash: type: kshkqskskjskafege: not found |
Как мы видим, команды cd и pwd, встроенные в Shell, less, file, mkdir, rmdir, cp, mv и rm — исполняемые программы из директории /usr/bin, ls — псевдоним команды ls с ключом --color=auto
(теперь мы знаем, почему папки выводятся синим цветом, а программы зеленым), а команды kshkqskskjskafege не существует.
Поиск исполняемого файла
Иногда бывает несколько разных версий выполняемой программы, установленной в разных местах. Для домашних компьютеров это несколько необычно, но на больших серверах совсем в порядке вещей. Чтобы определить точное расположение выполняемого файла по имени, существует команда which, После команды which следует указать имя интересуемой нас программы. Попробуем определить расположение программ less и rmdir.
Документация к командам
Зная название команды, можно попытаться поискать к ней документацию. Для этого есть различные инструменты.
Команда справки help
Для внутренних команд bash можно запросить справку через команду help. Для этого после команды help следует через пробел указать имя интересуемой команды, по котой требуется справка. Почитаем информацию о команде pwd.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pwd: pwd [-LP] Print the name of the current working directory. Options: -L print the value of $PWD if it names the current working directory -P print the physical directory, without any symbolic links By default, `pwd’ behaves as if `-L’ were specified. Exit Status: Returns 0 unless an invalid option is given or the current directory cannot be read. |
Параметр справки --help
Многие программы поддерживают ключ --help
. При его использовании, программа выводит описание, доступные параметры и ожидаемые аргументы. Запросим справку у команды mkdir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Usage: mkdir [OPTION]… DIRECTORY… Create the DIRECTORY(ies), if they do not already exist. Mandatory arguments to long options are mandatory for short options too. -m, —mode=MODE set file mode (as in chmod), not a=rwx — umask -p, —parents no error if existing, make parent directories as needed -v, —verbose print a message for each created directory -Z, —context=CTX set the SELinux security context of each created directory to CTX —help display this help and exit —version output version information and exit GNU coreutils home page: <http://www.gnu.org/software/coreutils/> General help using GNU software: <http://www.gnu.org/gethelp/> For complete documentation, run: info coreutils ‘mkdir invocation’ |
К сожалению, некоторые программы не поддерживают параметр --help
. Но имеет смысл попытаться таким образом получить информацию о программе, если иных возможностей нет. В большинстве случаем, когда ключ --help
не распознан программой, программа выведет сообщение об ошибке и отобразит информацию по её использованию, которая нас интересует.
Страницы руководства
Большинство программ, предназначенных для работы с интерфейсом командной строки, снабжены формальной документацией, называемой руководством по использованию. Для её поиска и просмотра в Linux присутствует специальная программа man. Чтобы получить информацию по интересуемой нас программе или файлу, после команды man следует указать имя команды или файла. Для отображения самой документации программа man запускает инструмент просмотра файлов (обычно это знакомая нам программа less). Почитаем руководство по использованию команды rmdir (для выхода из less после окончания чтения нажмем на клавиатуре клавишу «q»).
Теперь мы знаем где искать информацию по незнакомым и знакомым командам 🙂
А пока вновь заморозим виртуальную машину и дадим ей отдохнуть немножко.
15 ответов
Попробуйте mkdir -p
:
mkdir -p foo
Обратите внимание, что это также создаст любые промежуточные каталоги, которые не существуют; например,
mkdir -p foo/bar/baz
создаст каталоги foo
, foo/bar
и foo/bar/baz
если они не существуют.
Некоторые реализации, такие как GNU mkdir
включают в себя mkdir --parents
как более читаемый псевдоним, но это не указано в спецификации POSIX/Single Unix, поэтому этого следует избегать.
Если вам нужна ошибка, когда родительские каталоги не существуют, и вы хотите создать каталог, если он не существует, то вы можете сначала test
существование каталога:
[ -d foo ] || mkdir foo
Brian Campbell
27 апр. 2009, в 16:25
Поделиться
Это должно работать:
$ mkdir -p dir
или
if [[ ! -e $dir ]]; then
mkdir $dir
elif [[ ! -d $dir ]]; then
echo "$dir already exists but is not a directory" 1>&2
fi
который создаст каталог, если он не существует, но предупредите, если имя создаваемого вами каталога уже используется чем-то другим, кроме каталога.
Alnitak
27 апр. 2009, в 15:56
Поделиться
Используйте флаг -p.
man mkdir
mkdir -p foo
jimmyorr
27 апр. 2009, в 16:43
Поделиться
Определение сложных деревьев каталогов с помощью одной команды
mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Oleg
21 авг. 2013, в 20:53
Поделиться
Если вы не хотите показывать сообщение об ошибке:
[ -d newdir ] || mkdir newdir
Если вы хотите показать свое собственное сообщение об ошибке:
[ -d newdir ] && echo "Directory Exists" || mkdir newdir
Jahid
27 март 2015, в 04:30
Поделиться
Старый проверенный и достоверный
mkdir /tmp/qq >/dev/null 2>&1
будет делать то, что вы хотите, ни в одной из условий гонки, из-за чего многие другие решения не имеют.
Иногда самые простые (и самые уродливые) решения являются лучшими.
paxdiablo
27 апр. 2009, в 15:10
Поделиться
mkdir foo
работает, даже если каталог существует.
Чтобы он работал, только если каталог с именем «foo» не существует, попробуйте использовать флаг -p
.
Пример: —
mkdir -p foo
Это создаст каталог с именем «foo», только если он не существует.:)
Atul Ranjan
20 янв. 2014, в 13:51
Поделиться
directory_name = "foo"
if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi
Visuwa Bharathi K
16 дек. 2015, в 13:11
Поделиться
mkdir больше не поддерживает -p в системах Windows 8+.
Вы можете использовать это:
IF NOT EXIST dir_name MKDIR dir_name
Karanvir Kang
22 нояб. 2016, в 14:34
Поделиться
Или если вы хотите сначала проверить наличие:
if [[ ! -e /path/to/newdir ]]; then
mkdir /path/to/newdir
fi
-e — это существующий тест для оболочки korn.
Вы также можете попробовать выполнить русификацию руководства по оболочке korn.
alkar
27 апр. 2009, в 16:28
Поделиться
Вы можете использовать цикл if, чтобы проверить, существует ли каталог или нет, если он не выходит, чем создать каталог.
1) dir =/home/dir_name
if [ ! -d $dir ]
then
mkdir $dir
else
echo "Directory exists"
fi
2) Для создания каталога вы можете использовать mkdir с опцией -p. Он проверит, если каталог не доступен, он будет.
mkdir -p $dir
mkdir -p также позволяет создавать древовидную структуру каталога. Если вы хотите создать родительский и дочерний каталоги с помощью одной и той же команды, можете выбрать mkdir -p
mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
AbhinavVaidya8
21 авг. 2018, в 05:47
Поделиться
Это простая функция (оболочка bash), которая позволяет вам создавать каталог, если он не существует.
#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
if [ ! -d $1 ]
then
mkdir -p $1
fi
}
Вы можете вызвать вышеуказанную функцию как:
createDirectory/tmp/fooDir/BarDir
Приведенное выше создает fooDir и BarDir, если они не существуют. Обратите внимание на параметр «-p» в команде mkdir, которая рекурсивно создает каталоги. Надеюсь это поможет.
Balaji Boggaram Ramanarayan
14 фев. 2018, в 20:06
Поделиться
Ссылаясь на man-страницу man mkdir
для опции — p
-p, --parents
no error if existing, make parent directories as needed
который создаст все каталоги по заданному пути, если существует, не выдаст ошибку, иначе он создаст все каталоги слева направо по заданному пути. Попробуйте команду ниже. каталоги newdir
и anotherdir
не существует до выдачи этой команды
Правильное использование
mkdir -p/tmp/newdir/anotherdir
После выполнения команды вы можете увидеть newdir
и еще один anotherdir
созданный в /tmp. Вы можете выполнить эту команду столько раз, сколько захотите, команда всегда имеет exit(0)
. По этой причине большинство людей используют эту команду в сценариях оболочки перед использованием этих реальных путей.
vkrams
21 янв. 2019, в 23:49
Поделиться
mkdir -p sam
- mkdir = Создать каталог
- -p = — -p arents
- (без ошибок, если есть, создайте родительские каталоги по мере необходимости)
Paritosh Yadav
20 апр. 2018, в 10:06
Поделиться
Следующий код вызовет все ошибки, кроме ошибки «dir уже существует». Он также потерпит неудачу, если файл с именем «dirName» уже существует:
import subprocess
dirName='myNewDir'
failed=subprocess.call(['mkdir', '-p', dirName])
if failed !=0: raise Exception, 'Failed to create dir %s.'%(dirName)
Кроме того, он будет создавать каталоги рекурсивно, т.е.
dirName='./dir1/dir2'
создаст как «dir1», так и «dir2»
JAZS
04 дек. 2017, в 21:04
Поделиться
Ещё вопросы
- 1Почему просмотр списка Android иногда исчезает после вызова запроса на базовом курсоре?
- 0Не удается использовать ngDialog из-за TypeError: ngDialog.open не является функцией в Scope. $ Scope.discountModalOpen?
- 1Ошибка автоматического перехода на следующую страницу в приложении Магазина Windows
- 0как работает bufferedPercent
- 0получение значений с помощью метода post из клонированного поля
- 0Изменение размера divs ширина и высота в браузере изменить размер с помощью CSS
- 1Аудио запись
- 1Макет чата с менеджером BoxLayout
- 1WooCommerce Rest API Oauth с Javascript
- 1Как проверить состояние соединения с базой данных?
- 0Странный ответ с Xcode и HTTP-запросом
- 1WPF Animation останавливается самопроизвольно
- 1Отслеживание функций в питоне
- 1Как получить системный десятичный разделитель с помощью JavaScript в Google Chrome?
- 0AngularJS Предварительная настройка фильтра
- 0Один ng-options зависит от того, что выбрано в другом — AngularJS
- 1Как сохранить изображение, загруженное через url, в базу данных sqlite в двоичном формате
- 1Разве shutil.copyfile не должен заменять ссылку в dst с установленным follow_symlinks?
- 1Извлечь тип объекта из строки формата
- 0Как избежать записи файла ядра и ускорить генерацию трассировки
- 0Программно войти на сайт SSL с помощью cURL и PHP
- 0Управлять результатами, хранящимися в «обещании»
- 0Неразрешенное включение
- 0API Node.js с express & mysql — переопределить извлеченные параметры для правильного поиска в столбце
- 1C # Ожидание окончания делегата, прежде чем продолжить
- 0ОШИБКА 1215. MySql InnoDB
- 1Как заставить замолчать предупреждение «NewInstance» устарело «в` node-gyp rebuild`? Какая альтернатива NewInstance в v8?
- 1Python: numpy, pandas и выполнение операций над предыдущим значением массива (сглаженные средние): есть ли способ не использовать цикл FOR? EWMA?
- 0Перетащите и коснитесь других элементов div
- 1Как удалить файлы в AppData / Temp после загрузки файла с помощью .NET WebAPI 2? Ошибка файла в использовании
- 0Предупреждение jQuery при выходе с сайта
- 0Решить рекомендацию JSHint «Не использовать« с »»
- 1Проверка NetworkAvailability возвращает false, но телефон подключен
- 0Как добавить HTML / CSS с помощью редактора на DNN? Как добавить разметку, не полагаясь на модули?
- 1Как получить ключ и значение dict [duplicate]
- 0Ошибка определения шаблона переменной функции
- 1Где я могу разместить свои файлы Python в папке venv?
- 0Как вы определяете глобальные переменные, чтобы все классы могли обращаться к ним / редактировать?
- 0VB Script не будет работать в моем приложении HTA… только экран становится белым
- 1Как получить последний элемент в массиве Node.js? [Дубликат]
- 0Как прочитать содержимое HTML в about: в браузере Firefox?
- 0FeathersJS REST возвращает записи с определенным значением
- 0Как мы можем определить, когда модель вернулась к своему первоначальному значению?
- 1Лучшая стратегия для реализации этого поведения в Android-приложении?
- 0Сначала отсортируйте строки, затем добавьте временный столбец автоинкремента в MySQL.
- 1Вопрос по .asec (шифрование) на Froyo 2.2 / установка приложения на SDCard
- 1Невозможно передать переменную в функцию typewrite в python
- 1Что может быть более быстрым способом генерации матрицы, в которой хотя бы один элемент ненулевой в строке?
- 1Несколько целочисленных входов в одной строке Python
- 1панель навигации Android
На одной из наших удаленных систем происходит сбой mkdir -p $directory
, когда каталог существует. что означает, что это показывает
mkdir: невозможно создать каталог ‘$ directory’: файл существует
Это действительно озадачивает, поскольку я полагал, что контракт -p
заключался в том, что всегда выполняется успешно, если каталог уже существует. И это работает на других системах, которые я пробовал.
Во всех этих системах есть пользователь test
и directory=/home/test/tmp
.
4 ответа
Лучший ответ
Это может быть вызвано тем, что в каталоге уже есть файл с таким же именем.
Обратите внимание, что на компьютерах Linux каталог не может содержать одновременно файл и папку с одинаковым именем.
44
Neuron
18 Янв 2021 в 16:31
Проверьте, есть ли файл (не каталог) с таким же именем, как $ directory.
4
DWright
24 Янв 2013 в 12:35
Mkdir -p не будет создавать каталог, если в том же каталоге существует файл с таким же именем. В противном случае все будет работать должным образом.
2
ASHU
24 Янв 2013 в 18:30
Возможно, ваш каталог был подключен к сети на основе FUSE?
Помимо файла с таким именем, который уже существует (другой ответ), это может произойти, когда процесс FUSE, который когда-то монтировал что-то в этом каталоге, дал сбой (или был убит, например с kill -9
или через Linux OOM killer).
Чтобы увидеть, что происходит в деталях, запустите strace -fy mkdir -p $directory
, который показывает все задействованные системные вызовы и их возвращаемые значения.
Я считаю сообщения об ошибках, выдаваемые в этом случае, ошибкой в mkdir -p
(в частности, в библиотеке gnulib
):
Когда вы запускаете его в каталоге, в котором был смонтирован процесс FUSE, но этот процесс разбился, он говорит
mkdir: cannot create directory ‘/mymount’: File exists
Что довольно неточно, потому что базовый вызов stat()
возвращает ENOTCONN (Transport endpoint is not connected)
; но mkdir
распространяет менее конкретную ошибку из предыдущий mkdir()
sycall. Это сбивает с толку, потому что на странице руководства написано:
-p, --parents
no error if existing, make parent directories as needed
Так что ошибки не должно быть, если каталог существует, но ls -l /
показывает:
d????????? ? ? ? ? ? files
Поэтому согласно этому (d
), это каталог, но это не согласно test -d
.
Я считаю, что лучшим сообщением об ошибке (которое в этом случае должен выдавать mkdir -p
) было бы:
mkdir: cannot create directory ‘/mymount’: Transport endpoint is not connected
1
nh2
14 Дек 2018 в 23:29
Вопрос:
В одной из наших удаленных систем mkdir -p $directory
завершается сбой при наличии каталога. что означает, что он показывает
mkdir: невозможно создать каталог ‘$ directory’: файл существует
Это действительно озадачивает, поскольку я полагал, что контракт -p
был таким, который всегда выполняется, когда каталог уже существует. И он работает на других системах, которые я пробовал.
на всех этих системах есть пользователь test
и directory=/home/test/tmp
.
Лучший ответ:
Это может быть вызвано, если уже есть файл с тем же именем, который находится в каталоге.
Изменить: обратите внимание, что каталог не может содержать файлы и папки с одинаковым именем на машинах Linux.
Ответ №1
Проверьте, есть ли файл (а не каталог) с именем, аналогичным $directory.
Ответ №2
mkdir -p не будет создавать каталог, если в том же каталоге существует файл с тем же именем. В противном случае он будет работать, как ожидалось.
Ответ №3
Был ли ваш каталог сетевым монтированием FUSE -based случайно?
В дополнение к файлу с таким именем уже существует (другой ответ), это может произойти, когда процесс FUSE, который когда-то монтировал что-то в этом каталоге, аварийно kill -9
(или был уничтожен, например, с помощью kill -9
или через убийцу Linux OOM).
Чтобы увидеть, что происходит в деталях, запустите strace -fy mkdir -p $directory
, которая показывает все задействованные системные вызовы и их возвращаемые значения.
Я считаю сообщения об ошибках, генерируемые в этом случае, ошибкой в mkdir -p
(в частности, в библиотеке gnulib
):
Когда вы запускаете его в директории, в которой смонтирован процесс FUSE, но этот процесс завершился сбоем, он говорит
mkdir: cannot create directory ‘/mymount: File exists
что весьма неточно, потому что основной вызов stat()
возвращает ENOTCONN (Transport endpoint is not connected)
; но mkdir
распространяет менее специфическую ошибку из предыдущего вызова mkdir()
. Это очень запутанно, потому что на странице руководства написано:
-p, --parents
no error if existing, make parent directories as needed
поэтому он не должен ls -l/
ошибку, если ls -l/
существует, но ls -l/
показывает:
d????????? ? ? ? ? ? files
таким образом, согласно этому (d
), это каталог, но он не соответствует test -d
.
Я считаю, что лучшим сообщением об ошибке (которое mkdir -p
должен mkdir -p
в этом случае) будет:
mkdir: cannot create directory ‘/mymount: Transport endpoint is not connected
Чтобы эффективно работать в командной строке Linux, вам нужно использовать несколько приемов. -Сандра Генри-Стокер
Для полезных ссылок на оригинальный текст, пожалуйста, посетите
Оригинальная ссылка«Получите интерактивные ссылки, полноразмерные оригиналы и соответствующие статьи.
Подтверждения
Составлено из |
https://www.networkworld.com/article/3305811/linux/linux-tricks-that-even-you-can-love.html
Автор | Сандра Генри-Стокер
Переводчик | Хэнк Чоу (HankChow) ?? Всего переводов:8.0Срок публикации статьи: 303 дня
Чтобы эффективно работать в командной строке Linux, вам нужно использовать несколько приемов.
Гениальные навыки командной строки Linux могут сэкономить ваше время, избежать ошибок и позволить вам запоминать и повторно использовать сложные команды, концентрируясь на том, что нужно сделать, а не на том, как вы хотите это сделать. Вот несколько полезных советов командной строки.
Редактирование команд
Если вы хотите изменить введенную команду, вы можете использовать^a
(ctrl + a
) Или^e
(ctrl + e
) Быстро переместите курсор в начало команды или в конец команды.
Вы также можете использовать^
Символ для замены текста предыдущей команды и повторного выполнения команды, например^before^after^
Эквивалент предыдущей командеbefore
Заменено наafter
Затем выполните это снова.
-
$ eho hello world <== Неправильная команда
-
Command 'eho' not found, did you mean:
-
command 'echo' from deb coreutils
-
command 'who' from deb coreutils
-
Try: sudo apt install <deb name>
-
$ ^e^ec^ <== замещать
-
echo hello world
-
hello world
Войдите в систему, используя имя удаленной машины.
Если вы используете командную строку для входа на другой компьютер, рассмотрите возможность добавления псевдонима. В псевдониме вы можете ввести имя пользователя (которое может совпадать или отличаться от имени пользователя в локальной системе) и информацию для входа на удаленный компьютер. Например, используяserver_name ='ssh -v -l username IP-address'
Псевдоним команды как это:
-
$ alias butterfly=”ssh -v -l jdoe 192.168.0.11”
Это также можно найти на/etc/hosts
Добавьте запись в файл или добавьте запись разрешения на DNS-сервер, чтобы заменить IP-адрес запоминающимся именем машины.
выполнениеalias
Команда может перечислить псевдонимы уже на машине.
-
$ alias
-
alias butterfly='ssh -v -l jdoe 192.168.0.11'
-
alias c='clear'
-
alias egrep='egrep --color=auto'
-
alias fgrep='fgrep --color=auto'
-
alias grep='grep --color=auto'
-
alias l='ls -CF'
-
alias la='ls -A'
-
alias list_repos='grep ^[^#] /etc/apt/sources.list /etc/apt/sources.list.d/*'
-
alias ll='ls -alF'
-
alias ls='ls --color=auto'
-
alias show_dimensions='xdpyinfo | grep '''dimensions:''''
Просто добавьте новый псевдоним~/.bashrc
В аналогичном файле вы можете заставить псевдоним вступать в силу сразу после каждого входа в систему.
Заморозить и разморозить интерфейс терминала
^s
(ctrl + s
) Терминал прекратит вывод контента, выполнив команду управления потоком XOFF, которая повлияет на сеансы PuTTY и окна терминала рабочего стола. Если вы введете эту команду по ошибке, вы можете использовать^q
(ctrl + q
) Пусть терминал ответит снова. Так что просто помни^q
Этого сочетания клавиш достаточно, в конце концов, такая ситуация встречается редко.
Повторно использовать команду
Linux предоставляет пользователям много способов повторного использования команд, а главное — собирать выполненные команды через буфер истории. Самый простой способ повторно использовать команды — набрать!
Затем возьмите первую букву последней использованной команды, конечно, вы также можете нажимать стрелку вверх на клавиатуре, пока не увидите команду, которую хотите использовать повторно, и затем нажать Enter. Вы также можете использоватьhistory
Отобразите историю команд, а затем введите!
Далее следует номер рядом с командой в истории команд, которую необходимо использовать повторно.
-
!! <== Повторно использовать предыдущую команду
-
!ec <== Повторно использовать предыдущий “ec” Начало команды
-
!76 <== Повторно использовать историю команд 76 Количество команд
Просмотр файлов журнала и динамическое отображение обновлений
Используйте формуtail -f /var/log/syslog
Команда может просматривать указанный файл журнала и динамически отображать добавленное содержимое в файле.Это очень полезно, когда вам нужно отслеживать события, которые добавляют содержимое в файл журнала. Эта команда выводит конец содержимого файла и постепенно отображает новый контент.
-
$ tail -f /var/log/auth.log
-
Sep 17 09:41:01 fly CRON[8071]: pam_unix(cron:session): session closed for user smmsp
-
Sep 17 09:45:01 fly CRON[8115]: pam_unix(cron:session): session opened for user root
-
Sep 17 09:45:01 fly CRON[8115]: pam_unix(cron:session): session closed for user root
-
Sep 17 09:47:00 fly sshd[8124]: Accepted password for shs from 192.168.0.22 port 47792
-
Sep 17 09:47:00 fly sshd[8124]: pam_unix(sshd:session): session opened for user shs by
-
Sep 17 09:47:00 fly systemd-logind[776]: New session 215 of user shs.
-
Sep 17 09:55:01 fly CRON[8208]: pam_unix(cron:session): session opened for user root
-
Sep 17 09:55:01 fly CRON[8208]: pam_unix(cron:session): session closed for user root
-
<== Ожидание отображения дополнительного контента
Попросить помощи
Для большинства команд Linux вы можете добавить опции после ввода команды.--help
Чтобы получить функцию, использование и некоторую связанную информацию этой команды. В дополнение кman
Вне порядка,--help
Опции позволяют вам получить то, что вам нужно, не используя все расширенные опции.
-
$ mkdir --help
-
Usage: mkdir [OPTION]... DIRECTORY...
-
Create the DIRECTORY(ies), if they do not already exist.
-
Mandatory arguments to long options are mandatory for short options too.
-
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-
-p, --parents no error if existing, make parent directories as needed
-
-v, --verbose print a message for each created directory
-
-Z set SELinux security context of each created directory
-
to the default type
-
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
-
or SMACK security context to CTX
-
--help display this help and exit
-
--version output version information and exit
-
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
-
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
-
or available locally via: info '(coreutils) mkdir invocation'
Удаляйте файлы с осторожностью
Если вы используете его с осторожностьюrm
Команда, вы можете установить псевдоним для него, вам необходимо подтвердить перед удалением файла. Некоторые системные администраторы используют этот псевдоним по умолчанию, и в этом случае вам может потребоваться следующий прием.
-
$ rm -i <== Запросить подтверждение
Закрыть псевдоним
Вы можете использоватьunalias
Команда отключает псевдонимы в интерактивном режиме. Он не меняет конфигурацию псевдонима, он только временно отключен и не вступит в силу до следующего входа в систему или сброса.
-
$ unalias rm
Если вы ужеrm -i
Настройка по умолчаниюrm
Псевдоним, но вам не нужно подтверждать перед удалением файла, вы можетеunalias
Команда помещается в файл запуска (например,~/.bashrc
) В.
Используйте sudo
Если вы часто забываете использовать команду, которая может быть выполнена только пользователем rootsudo
Есть два способа решить это. Одним из них является использование истории команд, вы можете использоватьsudo !!
(Использование!!
Чтобы запустить самую последнюю команду и добавить ее передsudo
) Чтобы повторить реализацию, второй должен установить некоторые дополнительные необходимыеsudo
Псевдоним команды.
-
$ alias update=’sudo apt update’
Более сложные трюки
Иногда трюк командной строки — это не просто псевдоним. В конце концов, единственное, что псевдоним может сделать для вас, это заменить команду и добавить некоторые параметры команды, что экономит время ввода. Но если вам нужны более сложные функции, чем псевдонимы, вы можете написать скрипт для.bashrc
Добавить функции для достижения этого или других файлов запуска. Например, следующая функция перейдет в этот каталог после создания каталога. После настройки выполнитеsource .bashrc
Вы можете использоватьmd temp
Такая команда для создания каталога сразу входит в этот каталог.
-
md () { mkdir -p "[email protected]" && cd "$1"; }
резюме
Использование командной строки Linux является наиболее эффективным и интересным способом работы в системе Linux, но с навыками командной строки и умными псевдонимами вы можете получить лучший опыт.
via: https://www.networkworld.com/article/3305811/linux/linux-tricks-that-even-you-can-love.html
Автор:Sandra Henry-Stocker[2]Избранные темы:lujun9972Переводчик:HankChowКорректура:wxy
Эта статьяLCTTОригинальная подборка,Linux КитайЧесть запуск
To create a directory in Linux, you use the mkdir command. It stands for ‘make directory’ after all. It’s quite a simple command.
But, when you try to create a directory that already exists, you get an error like:
$ mkdir dir0
mkdir: cannot create directory ‘dir0’: File exists
This indicates that if a directory already exists, the mkdir command will not try to create or modify the already existing directory in any way.
But it also shows an error which is not what you always want especially if you are writing a bash script.
To prevent this error, use the -p
flag along with mkdir
command.
mkdir -p dirname
This way, though the directory is not created, it won’t show any error as well. Your scripts will run as usual.
💡
You’ll get the same error if a file or link exists with the same name as the directory you are trying to create. Why? Because everything is a file in Linux. A directory is a special file that acts like an index of all the files that are inside it.
Let’s see things in a bit more detail here and discuss various ways of preventing this error.
Method 1: Use ‘-p’ option
If you look at the manpage of the mkdir command, it has the ‘-p’ flag.
The use of ‘-p’ flag in mkdir is «no error if existing, make parent directories as needed».
When you use the ‘-p’ flag, the mkdir utility will check if a directory, file, link or pipe with the same name does not exist already.
If the does exist, it will not modify your existing directory or file, nor will it show an error message.
mkdir -p dirname
This is very handy when you are creating custom bash scripts and don’t want its execution to stop because of this error.
The -p
can also be used to create a nested directory structure. If you want to create dir1/dir2/dir3 like directory structure and some or none of the directories exist in the hierarchy.
Method 2: Check if directory already exists in bash
If you are writing bash scripts, you can use the if condition and check if the directory already exists. If it doesn’t then you create the directory.
Here’s a sample code:
if [ -d my_dir ]
then
mkdir my_dir
fi
Method 3: Send it to the void
A majority of UNIX tools have two output streams, stdout and stderr. Normally, both streams, stdout and stderr get printed to the terminal. But you can redirect either the normal output stream or the error stream to another file.
So, when the mkdir command throws an error to your terminal, you can redirect it to the void.
To redirect stdout, use it along with the ‘1’ numerical stream descriptor, for stderr, use the numerical stream descriptor ‘2’. You can also redirect stdin by using the ‘0’ stream descriptor.
To actually redirect the output, use the appropriate stream descriptor along with the redirection operator ‘>’
$ mkdir dir0 2> /dev/null
This will send the output of stderr to the ‘/dev/null’ device which discards anything that gets written to it.
This is totally safe to do. As I mentioned earlier, if the directory already exists, then it will not be modified. Only an error message will be shown. All you are doing here is suppressing that error message.
Personally, I would go with the first method i.e. using the mkdir -p
command for ensuring that the directory is created only if there is no file or directory of the same name in the same location.
Team LHB indicates the effort of a single or multiple members of the core Linux Handbook team.