Полезные консольные команды и скрипты - CentOS Wiki

Кто сейчас по sftp сидит в системе

last -i | grep still | grep -v '0\.0\.0\.0'

Специальные типы переменных bash

  • $0 $1 $2 ${10} - позиционные параметры; Аргументы, передаваемые скрипту командной строкой. $0 - имя самого скрипта, $1 - первый аргумент, $2 - второй, $3 - третий, и так далее. При количестве переменных больше 9 - заключаются в фигурные скобки;
  • $0 - Имя скрипта который был запущен;
  • $# - количество аргументов командной строки; количество переданных параметров;
  • $? - код завершения последней выполненной команды, функции или сценария;
  • $$ - идентификатор процесса оболочки, id процесса;
  • $! - id последнего, запущенного в фоне, процесса;
  • $* - данный параметр содержит в себе все параметры переданные из командной строки;
  • $- -параметры, переданные оболочке;
  • $@ - То же самое что $*, только каждый параметр представлен отдельно.
  • $_ последний аргумент предыдущей команды.

Зарезервированные переменные

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

Переименование расширения у файлов

В данном случае в директории у файлов расширение .ogv сменится на .mp3

$ for file in *.ogv; do mv -f "$file" "${file%.*}.mp3"; sleep 2; done; exit
$ for file in *.ogv; do mv -f "$file" "`basename $file .ogv`.mp3"; sleep 2; done; exit
$ for file in *.ogv; do mv -f "$file" "${file/.ogv/.mp3}"; sleep 2; done; exit

все три варианта равноценны.

Сканирование IP-адресов консольно

 

for ip in $(seq 1 254); do ping -c 1 10.38.0.$ip>/dev/null; [ $? -eq 0 ] && echo “10.38.0.$ip UP” || : ; done
  • Использование seq для генерации списка аргументов цикла for
  • $? - Код с которым была завершена предыдущая команда. Если команда была выполнена удачно,
    то значение этой переменной будет 0, если же неудачно то не 0.
  • -eq равно (операция сравнения)
  • && "И-список": благодаря этому все последующие команды будут выполнены (перенаправление из/в stdin или stdout)
  • || логическая операция OR (логическое ИЛИ). В операциях проверки условий, оператор || возвращает 0 (success), если один из операндов имеет значение true (ИСТИНА).
  • : пустая команда. [двоеточие] Это эквивалент операции "NOP" (no op, нет операции). Может рассматриваться как синоним встроенной команды true. Команда ":" так же является встроенной командой Bash, которая всегда возвращает "true" (0).

Настройка часового пояса в CentOS

Установка Новосибитрского часового пояса на VPS под CentOS

# cp /usr/share/zoneinfo/Asia/Novosibirsk  /etc/localtime

Скрипт оптимизации размера многостраничных PDF документов

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

Например со сканера приходят документы в формате .tiff или .jpg - они конвертируются в формат .pdf с одновременным сшиванием их в один документ.

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

В большинстве случаев помагает следующий скрипт (но не всегда; встречаются случаи когда документ PDF уже до вас грамотно подготовлен):

#!/bin/bash
#
#  Поместите свой многостраничный PDF файл в необходимую директорию (папку).
#  Поместите туда же данный скрипт. В свойствах скрипта проверте чтобы он был исполняемым.
#  Кликнете по нему мышкой (или в консоли выполните sh ConvertMinPDF.sh ) - выберите > запустить. 
#
#
#    Разбиваем наш многостраничный документ на отдельные страницы.
#
for pdfview in *.pdf
  do pdftk "$pdfview" burst output Page%04d.pdf
    #    Сшиваем обратно странички с грамотной экономией.
    #    Название вышедшего документа равно старому с приставкой New_
    gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="New_$pdfview"  Page*.pdf
    #
    #   Удаляем разрозненные страницы.
    #
    for pages in Page*.pdf
     do rm -f $pages
    done
    #
    #  Удаляем логи.
    #
    for hlamTXT in *.txt
     do rm -f $hlamTXT
    done
    #
done
exit

Вот и все.

Просмотреть последнюю введенную команду, которая начиналась с .. (например ssh)

!ssh:p

или gedit:

!gedit:p

без параметра :p команда будет выполнена.

Вывод

egrep -v '^#|^$' squid.conf - Показать файл без комментариев и пустых строк

Консольные часы

watch -tn1 'date +%r'

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

# useradd alex; echo 123321|passwd --stdin alex

где: alex - имя созданного пользователя с паролем 123321.

Bash - записать в переменную данные из файла

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

read str < "filename"
echo $str

 

еще варианты считать файл в переменную:

str=`cat filename`

или:

str=$(cat filename)

Очистка содержимого файла

cp /dev/null myfile.txt
cat /dev/null > myfile.txt
truncate -s 0 myfile.txt

history без номеров строк

history | sed -r "s/^\s+[0-9]+\s+//g"

Подсчитать количество файлов сессий в папке ( /tmp)

Имеем панель хостинга Vesta CP. У каждого пользователя в системе есть директория /tmp для файлов сессий (/home/$USER/tmp). Хотелось бы узнать количество в них файлов вида "sess_7ple53805i825vgilq9la0rXXX"

root@server:~# ls /home/
admin  alex  dental  gos  treew

 

# for user in $(ls /home/); do B=$(find /home/$user/tmp -type f -name "sess_*" | wc -l); echo $user" -> "$B; done
admin -> 0
alex -> 1294888
dental-> 0
gos -> 205369
treew -> 3745

Автор: Александр