Как посмотреть историю команд в linux
Перейти к содержимому

Как посмотреть историю команд в linux

  • автор:

Команда Linux history

Команда Linux history — это история команд. Утилита не просто полезна, а необходима и проста в использовании. Она окажет вам неоценимую помощь.

Linux history — история команд

Содержание

  • Синтаксис
  • Опции
  • Примеры использования команды history
    • Просмотр всей истории
    • Вывод последних строк
    • Вывод строки по идентификатору
    • Поиск определённой команды
    • Удаление ненужной строки
    • Очистка истории

    Синтаксис

    history [опции]
    history [опции] [файл]

    Опции

    -c Очистить список истории, удалив все записи -d Удалить строку истории с заданным идентификатором -a Добавить строки истории из этого сеанса в файл истории -n Прочитать все строки истории, которые еще не были прочитаны из файла истории, и добавить их в список истории -r Прочитать файл истории и добавить содержимое в список истории -w Записать текущую историю в файл истории -p Выполнить расширение истории для каждого аргумента и отобразить результат, не сохраняя его в списке истории -s Добавить аргументы в список истории как одну запись

    Переменная окружения FILENAME используется как файл истории.

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

    Примеры использования команды history

    Просмотр всей истории

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

    oleg@mobile:~:$ history . 495 sudo systemctl stop mysql.service 496 sudo systemctl stop php-fpm.service 497 sudo systemctl stop nginx.service 498 nmtui 499 sudo pacman -Syu 500 df

    Вывод последних строк

    Можно вывести на экран N последних строк:

    oleg@mobile:~:$ history 3 498 nmtui 499 sudo pacman -Syu 500 df

    Вывод строки по идентификатору

    Все команды пронумерованы. Теперь для исполнения команды с заданным номером следует просто записать этот номер после восклицательного знака.

    Например, следующая команда позволит обновить дистрибутив:

    oleg@mobile:~:$ !499 sudo pacman -Syu :: Обновление баз данных пакетов. core is up to date extra is up to date community 6,7 MiB 1670 KiB/s 00:04 [###############################################] 100% multilib is up to date :: Запускается полное обновление системы. разрешение зависимостей. проверка конфликтов. Пакеты (70) alsa-card-profiles-1:0.3.55-2 alsa-lib-1.2.7.2-1 alsa-ucm-conf-1.2.7.2-1 chromium-103.0.5060.114-1 curl-7.84.0-2 duktape-2.7.0-4 electron-19.0.8-1 electron16-16.2.8-1 firefox-102.0.1-1 firefox-i18n-ru-102.0.1-1 flac-1.3.4-3 fluidsynth-2.2.8-1 git-2.37.1-1 gnome-desktop-1:42.3-1 gnome-desktop-common-1:42.3-1 gnupg-2.2.36-1 gtk-update-icon-cache-1:4.6.6-1 hwdata-0.361-1 imagemagick-7.1.0.43-1 imlib2-1.9.1-1 kmod-30-1 lib32-alsa-lib-1.2.7.2-1 lib32-libidn2-2.3.3-1 lib32-llvm-libs-14.0.6-1 lib32-mesa-22.1.3-1 lib32-openssl-1:1.1.1.q-1 lib32-pango-1:1.50.8-1 libdrm-2.4.112-1 libgphoto2-2.5.30-1 libhandy-1.6.3-1 libisl-0.25-1 libmfx-22.4.4-1 libnl-3.7.0-1 libx11-1.8.1-3 linux-5.18.10.arch1-1 llvm-libs-14.0.6-1 mesa-22.1.3-1 min-1.25.1-1 mkinitcpio-31-3 nodejs-18.5.0-1 openssl-1.1.1.q-1 pango-1:1.50.8-1 perl-http-message-6.37-1 perl-uri-5.11-1 php-8.1.8-1 php-fpm-8.1.8-1 php-gd-8.1.8-1 php-imap-8.1.8-1 pipewire-1:0.3.55-2 poppler-22.07.0-1 poppler-glib-22.07.0-1 python-colorama-0.4.5-1 python-jinja-1:3.1.2-2 python-more-itertools-8.13.0-2 qt5-base-5.15.5+kde+r170-1 qt5-tools-5.15.5+kde+r1-3 tracker3-3.3.2-1 webkit2gtk-2.36.4-2 webkit2gtk-4.1-2.36.4-2 wine-staging-7.12-1 xf86-input-synaptics-1.9.2-1 xorg-fonts-encodings-1.0.6-1 xorg-server-21.1.4-1 xorg-server-common-21.1.4-1 xorg-xev-1.2.5-1 xorg-xmessage-1.0.6-1 xorg-xmodmap-1.0.11-1 xorg-xwud-1.0.6-1 zenity-3.43.0-1 zxing-cpp-1.4.0-1 Будет загружено: 697,37 MiB Будет установлено: 2428,80 MiB Изменение размера: 278,03 MiB :: Приступить к установке? [Y/n] 

    Этот приём весьма удобен при выполнении достаточно длинных команд. Например таких:

    mensh@li1398-20:/var/www/linuxcookbook.ru$ . 1974 sudo -u www-data composer update drupal/core-recommended --with-dependencies . 

    Поиск определённой команды

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

    mensh@li1398-20:/var/www/linuxcookbook.ru$ history | grep ctools 1884 sudo -u www-data composer update drupal/ctools --with-dependencies 1892 sudo -u www-data composer update drupal/ctools --with-dependencies

    Удаление ненужной строки

    Для удаления ненужной команды следует использовать опцию -d .

    Просматриваем историю команд:

    mensh@li1398-20:~$ history . 1995 sudo su 1996 exit 1997 cd /var/www/linuxcookbook.ru/ 1998 history 1999 history | grep ctools 2000 exit 2001 history

    Удаляем строку 1997 с командой cd /var/www/linuxcookbook.ru/ :

    mensh@li1398-20:~$ history -d 1997

    Просматриваем историю и убеждаемся в том, что упомянутая строка удалена:

    mensh@li1398-20:~$ history 8 1995 sudo su 1996 exit 1997 history 1998 history | grep ctools 1999 exit 2000 history 2001 history -d 1997 2002 history 8

    Очистка истории

    Для очистки всей истории команд следует использовать опцию -c :

    oleg@mobile:~:$ $ history -c

    Заключение

    Прочитав эту короткую статью вы наверняка убедились в том, что команда Linux history станет серьёзным подспорьем в вашей работе. Успехов!

    Работа с историей команд bash

    Количество хранимых команд определяется двумя переменными: HISTSIZE и HISTFILESIZE . Первая определяет количество команд, хранимых в памяти, вторая — в файле. Их уместно устанавливать в ~/.bachrc . Такие значения, мне представляются оптимальными:

    HISTSIZE=5000 HISTFILESIZE=10000 

    Настройка способа сохранения

    По умолчанию, каждый экземпляр bash переписывает историю. То есть, если вы запустите два терминала, что-то в них сделаете, а потом закроете, то история сохранится только от последнего закрытого. (Она затрёт историю первого закрытого.) Это очень неудобно и легко исправляется вот такой командой:

    shopt -s histappend 

    которую тоже уместно написать в ~/.bachrc .

    Простой просмотр истории

    history 

    Пять последних команд:

    history 5 

    В сочетании с grep :

    history | grep cd 

    Но это всё только присказка.

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

    Восклицательный знак выполняет команду с данным номером. Пример:

    ~$ ls -ld /bin lrwxrwxrwx 1 root root 7 май 31 2013 /bin -> usr/bin ~$ history 3 4220 cd 4221 ls -ld /bin 4222 history 3 ~$ !4221 ls -ld /bin lrwxrwxrwx 1 root root 7 май 31 2013 /bin -> usr/bin ~$ echo !4221 echo ls -ld /bin ls -ld /bin 

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

    $ sudo !4221 $ !4221 >/dev/null 

    Номер может быть относительным, с конца: !-2 . Специальное сокращение !! — последняя команда.

    Передвижение по истории

    Все знают о том, что по истории можно двигаться клавишами-стрелками. Но иногда бывают ситуации, когда эти клавиши недоступны, работают не правильно, или просто отсутствуют (у меня такое было, когда я подключался каким-то ssh-клиентом с iPad). На этот случай полезно знать, что промотка работает по Ctrl-p и Ctrl-n .

    Поиск по истории

    Режим поиск включается по Ctrl-r . Для поиска следующего совпадения надо повторно нажать Ctrl-r . Для передвижения по совпадениям в другую строну есть сочетание клавиш Ctrl-s .

    Проблема в том, что Ctrl-s в большинстве терминалов приводит к засыпанию. Чтобы выйти из сна, нажмите Ctrl-q . Чтобы отключить засыпание, есть команда:

    stty -ixon 

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

    Bash (а вернее readline) поддерживает очень удобный стиль поиска — по первым символам команды. К сожалению, по умолчанию, этот механизм недоступен. Чтобы его включить, надо написать в ~/.inputrc что-то такое:

    # Shift-[Up][Down] "\e[1;2A" history-search-backward "\e[1;2B" history-search-forward 

    Теперь вы можете набрать начало команды и нажать Shift- . И для вас будет найдена последняя команда из истории с таким же началом. Стрелки с клавишей Shift теперь позволяют двигаться по совпадениям.

    Естественно, можно настроить любые другие клавиши.

    Подстановки и изменения команд

    Вы уже видели три простейшие подстановки:

    • !! — последняя команда
    • !n — n-ная в истории команда (с номером n)
    • !-n — n-ная с конца команда

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

    !ls — последняя команда ls (со всеми аргументами).

    Можно указывать подстроку для поиска:

    !?encoder? последняя команда с подстрокой encoder .

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

    Все слова (параметры разделённые пробелами) доступны через модификатор : (двоеточие). Пример:

    $ cd /home $ echo . 1 echo /home /home 

    Здесь !! — ссылка на последнюю команду, а :1 ссылка на её первый аргумент. Поэтому, в нашем примере echo . 1 преобразуется в echo /home .

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

    $ echo !1 

    Есть и привычные сокращения: первый аргумент — ^ , последний — $ , все — * . Имеются ввиду именно параметры команды. Без учёта самой команды.

    Манипуляции с путями и именами файлов

    Следующий уровень модификаторов позволяет минимально управлять именами файлов.

    Модификатор :t даёт доступ к имени файла. Эта удобно скажем в таком сценарии работы:

    Вы обращаетесь к некому файлу, указывая полный путь:

    cat /etc/hosts 

    Потом переходите в директорию с этим файлом

    cd /etc 

    Выполняете ещё какие-то команды, а потом решаете отредактировать файл. Тогда вы можете написать так:

    vi !cat:$:t 

    То есть, вы находите в историю последнюю команду cat ( !cat ), берёте её последний аргумент :$ , а от него оставляете только имя файла :t .

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

    vi /etc/hosts cd $vi:$:h 

    Последняя команда перейдёт в директорию /etc .

    Последний модификатор из этой серии — :r . Он отрезает расширение. Его можно указывать несколько раз, есть вы хотите отрезать несколько расширений ( .tar.gz ).

    История команд и автодополнение

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

    История команд

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

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

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

    При завершении сеанса Bash сохраняет команды в файл .bash_history , который находится в домашнем каталоге пользователя. Точка перед именем файла в Unix-подобных системах делает файл скрытым, поэтому обычно такие файлы не видны. Однако это не мешает посмотреть файл и даже его отредактировать.

    История команд в файле .bash_history

    На скрине командой cat содержимое файла выводится на экран. Отметим, команды текущего сеанса еще не дописаны в .bash_history .

    Автодополнение

    Автодополнение, или автозавершение, – это способность командной оболочки автоматически дописывать конец вводимого слова, если это слово однозначно определено. В Bash для автозавершения используется клавиша Tab клавиатуры.

    Например, вы через командную строку запускаете программу под названием filezilla . Скорее всего достаточно будет ввести filez и нажать Tab . Оболочка сама допишет слово до конца, если нет других команд, начинающихся с filez .

    Автозавершение работает как по отношению к командам-программам, так и адресам. Например, обычно в домашних каталогах дистрибутивов GNU/Linux имеется папка Загрузки (или Downloads ). При вводе ее имени может быть достаточным ввести только первую букву и нажать Tab , чтобы получить полное имя.

    Обратим внимание, что Bash, да и Linux в общем, различают большие и малые буквы. Поэтому text.txt и Text.txt – разные файлы.

    Если команду или имя файла/каталога однозначно идентифицировать нельзя, то двойное нажатие Tab выводит на экран все возможные варианты.

    Получение списка команд при двойном нажатии Tab

    Здесь было введено слово apt , после этого два раза нажат Tab . В ответ Bash вывел все команды, начинающиеся с заданного слова.

    Также автодополнение может помочь, когда вы не помните полное название программы.

    Ctrl + U и Ctrl + W

    Сочетание клавиш Ctrl + U удаляет написанную в текущей строке команду целиком, т. е очищает командную строку (не путать с командой clear , которая очищает весь экран терминала). Это куда удобнее, чем стирать клавишей Backspace. При этом курсор должен стоять в конце всей строки.

    Если курсор находится где-либо в середине строки, то будет удалено все, что находится перед курсором. Текст позади него останется.

    Комбинация Ctrl + W удаляет только одно слово перед курсором. Например, в примере ниже нажатие Ctrl + W приведет к удалению только слова install .

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

    Обычно нажатие Ctrl + H в файловых менеджерах графических оболочек Linux отображает скрытые файлы.

    1. Откройте «Терминал» и проверьте, что у вас есть история команд. Закройте «Терминал».
    2. Откройте в графическом текстовом редакторе файл .bash_history , удалите его содержимое, сохраните файл.
    3. Снова откройте «Терминал». Остались ли в истории ранее введенные вами команды?

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

    X Скрыть Наверх

    Введение в Linux и Bash. Курс

    Как увидеть список всех введенных команд в Линукс, операционная система Linux курс лекций Клайпеда

    Как увидеть список всех введенных команд в Линукс, операционная система Linux курс лекций Клайпеда

    Умение работать с командной строкой Линукс в 2023 году высоко ценится работодателями в секторе ИТ. Прежде всего, потому что сейчас существует множество новых направлений, применяющих эту ОС. Стоит отметить, что в работе вы будете использовать командную строку для управления системой. Сегодня мы расскажем о том, как увидеть список введенных пользователем команд, это входит в операционная система Linux курс лекций Клайпеда. И поможет вам отслеживать действия пользователей, а также — применять повторно сложные команды.

    Где хранится информация обо всех введенных командах в Линукс, операционная система Linux курс лекций Клайпеда

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

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

    Чтобы увидеть скрытые файлы — достаточно ввести в командную строку команду ls с опцией -a. Так вы легко найдете и в своем домашнем каталоге файл .bash_history. Который можно открыть в текстовом редакторе, например:

    Также вы можете вывести на экран содержимое файла с помощью команды cat. Однако оба варианта работы с историей ввода команд bash — не самые удобные. Потому что есть более простой и естественный способ, предусмотренный разработчиками. А именно — с использованием команды history. О нем мы расскажем далее, в следующем разделе сегодняшней статьи на тему системного администрирования.

    Также советуем записаться на курсы Linux torrent Клайпеда, чтобы всего за полгода подготовиться к сертификации и трудоустройству в ИТ. Стоит отметить, что на платформе SEDICOMM University мы готовим к экзаменам LPIC и LFCS. А также — помогаем получить сертификаты Cisco. Которые крайне упрощают поиск работы в секторе информационных технологий в 2023 году.

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

    Скорее всего, самый удобный способ вывести на экран список команд, введенных ранее. Это использование команды history без опций и аргументов. В результате в командную строку будут выведены все ранее использованные команды с опциями и аргументами. А также — их порядковые номера. Однако если вы активно используете ОС, список может быть очень большим. Допустим, что вас интересуют только последние пять введенных команд Линукс. В таком случае достаточно ввести команду history с цифрой 5 в качестве аргумента.

    Кроме того, вы можете повторно ввести команду из истории без необходимости повторять ее полностью. Безусловно, любой новичок в Линукс очень быстро начинает понимать, что между ранее введенными командами можно переключаться стрелками «вверх» и «вниз». Однако если нужная команда была введена давно или даже во время другой сессии — такой способ не подходит. С другой стороны, вы можете просто ввести в командную строку восклицательный знак и номер команды, например — !255.

    Если добавить перед числом знак «минус» — отсчет будет вестись в обратном порядке. То есть, команда !-5 выполнит пятую команду с конца из истории. Чтобы узнать больше о том, как настроить ведение истории команд в Линукс — советуем пройти Linux online курсы Клайпеда. Которые доступны в онлайн-формате на платформе SEDICOMM University.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *