Полезные консольные команды и скрипты - 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
Посмотреть скорость жесткого диска
hdparm -t /dev/sda1 | awk 'BEGIN{s=0} /MB\/sec/ {s=$11} /kB\/sec/ {s=$11/1024} END{print s}'