Настольная книга по Linux: различия между версиями

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
Строка 10:
* '''~/.bash_logout''' - Выполнение сценариев при выходе
* '''~/.inputrc''' - Настройка хоткеев
<blockquote><sourcesyntaxhighlight lang="bash">
"\e[A": history-search-backward
"\e[B": history-search-forward
TAB: menu-complete
</sourcesyntaxhighlight></blockquote>
- реализация поиска в history по стрелкам.
Строка 58:
* '''myip(){ curl ifconfig.me }''' - бескостыльный вариант
* '''Убивает процессы по имени программы (например, ki skype nmap firefox):'''
<blockquote><sourcesyntaxhighlight lang="bash">ki(){
[[ $1 = '' ]] || [[ $1 = '-h' ]] || [[ $1 = '--help' ]] && echo "usage: $0 <program1..programN>" && return 1
for process in $*; do
Строка 64:
{ echo $process not found: seems like nothing to kill; }
done
}</sourcesyntaxhighlight></blockquote>
* '''gr(){ egrep -v '^#|^$' $1; }''' - Вывести в стандартный вывод файл без комментариев и пустых строк (например, gr /etc/fstab)
* '''alias pwg='pwgen -cnB 8 10 | while read PASS; do echo -n -e "$PASS\t"; echo -n "$PASS" | md5sum | cut -f1 -d" "; done'''' - Генерирование 10-ти запоминаемых восьмизначных паролей (pwgen -B 8 10), c цифрами (-n), с буквами из верхнего регистра (-с) и хэш md5 к нему (linux only). Хэш подходит для mysql
* '''Функция, эмулирующая поведение redhat'овской утилиты service (особенно удобна в сочетании с zsh):'''
<blockquote><sourcesyntaxhighlight lang="bash">service(){
init_path="/etc/rc.d"
if [ -f ${init_path}/${1} ]; then service=${1}
Строка 95:
echo "usage: $0 <service name> <action>"
esac
}</sourcesyntaxhighlight></blockquote>
* '''Делает скриншот участка экрана, выделенного мышью и отправляет его на хостинг изображений:'''
<blockquote><sourcesyntaxhighlight lang="bash">screenshot(){
scrot -s "%Y-%m-%d_$wx$h.png" -e 'ompload $f ; rm $f'
}</sourcesyntaxhighlight></blockquote>
 
=== Скрипты ===
Строка 158:
* '''let "a = 2 + 2"'''
* '''bс -l'''
<blockquote><sourcesyntaxhighlight lang="bash">
$ result=$(echo "scale=2; 5 * (7 +3) / 3;" | bc)
$ echo $result
16.6666
</sourcesyntaxhighlight></blockquote>
* '''echo $((2+2))'''
* '''awk 'BEGIN{ print exp(1)+2^(1.0/3); }''''
Строка 233:
* '''cat /tmp/text | /usr/local/bin/topnwords.pl | head -n 5''' - показать TOP5 слов в файле text
 
<blockquote><sourcesyntaxhighlight lang="bash">
#! /usr/bin/env perl
 
Строка 244:
print "$x{$_} $_\n" foreach sort { $x{$b} <=> $x{$a} } keys %x;
 
</sourcesyntaxhighlight></blockquote>
 
=== Модификация ===
Строка 265:
* '''cat /proc/PID/cmdline | xargs -0 echo''' - То же самое
*'''Пример, заменяющий шаблон ip-адрес/маска на '*.*.*.*', '/префикс' на '/*' и поднимающими регистр букв:
<sourcesyntaxhighlight lang="bash">ip ad | sed 's/\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}/*.*.*.*/g;s/\/[[:digit:]]\{1,2\}/\/*/g;s/\(.*\)/\U\1/g'</sourcesyntaxhighlight> '''
*'''Пример, поднимающий регистр букв в файле /etc/fstab в строках, содержащей 'sda' кроме самой подстроки 'sda':
<sourcesyntaxhighlight lang="bash">cat /etc/fstab | sed 's/\(.*\)\(sda\)\(.*\)/\U\1\L\2\U\3/g'</sourcesyntaxhighlight> '''
*'''Пример, заменяющий последний октет ip адреса на ноль:
<sourcesyntaxhighlight lang="bash">echo 192.168.23.46 | sed 's/[[:digit:]]*/0/4'</sourcesyntaxhighlight>'''
==== Кодировки ====
 
Строка 629:
** '''crontab -l''' - вывести список заданий
* '''at''' - Для разового выполнения заданий
<blockquote><sourcesyntaxhighlight lang="text">
# at 7:30
warning: commands will be executed using /bin/sh
Строка 635:
at> <EOT>
job 1 at Thu Feb 23 07:30:00 2012
</sourcesyntaxhighlight></blockquote>
 
=== Конфигурация ===
Строка 663:
 
* '''chfn''' - изменение информации о пользователе
<blockquote><sourcesyntaxhighlight lang="bash">
# chfn -o 'User for ftp' userftp
</sourcesyntaxhighlight></blockquote>
* '''useradd -r -N -g <groupname> --uid 1000 <username>''' - Создать системного пользователя <username>. -N не даёт создавать одноимённую группу для пользователя, -g <groupname> - назначает основной для пользователя группу <groupname>
* '''userdel -r <username>''' - Удалить пользователя <username> вместе с домашним каталогом
Строка 674:
* '''PASS=666; useradd testuser -m -p $(echo $PASS | mkpasswd -m sha-512 -s)''' - Создание пользователя в скрипте сразу с паролем
* Использование утилиты '''newusers''' для массового создания системных пользователей по шаблону "user1 - userN" со случайными паролями; список пользователей с настройками и паролями выводится в файл users.txt:
<blockquote><sourcesyntaxhighlight lang="bash">
uid=`cat /etc/passwd | cut -d ":" -f 3 | sort -gr | head -1`
for user in {1..100}; do
Строка 680:
echo user${user}:$(pwgen -cnB 8 1):${uid}:1000:user${user}:/home/user${user}:/bin/zsh
done | tee users.txt | newusers
</sourcesyntaxhighlight></blockquote>
 
* '''groupadd <group_name>''' - Создать группу <group_name>
Строка 694:
==== Автовход в систему ====
* Для '''GNOME''' добавить в '''/etc/gdm/custom.conf''' (Для новых версий в '''/etc/gdm3/daemon.conf''')
<blockquote><sourcesyntaxhighlight lang="text">[daemon]
AutomaticLoginEnable=true
AutomaticLogin=username</sourcesyntaxhighlight></blockquote>
* Для '''KDE''' добавить в '''/etc/kdm/kdmrc'''
<blockquote><sourcesyntaxhighlight lang="text">[X-:0-Core]
AutoLoginEnable=true
AutoLoginUser=username
AutoLoginPass=userpassword</sourcesyntaxhighlight></blockquote>
* Для '''LXDE''' и всего остального сначала установить пакет '''autologin'''. Потом создать и отредактировать файл '''/etc/sysconfig/autologin''':
<blockquote><sourcesyntaxhighlight lang="text">AUTOLOGIN=yes
USER=username
EXEC=/usr/bin/startx</sourcesyntaxhighlight></blockquote>
 
* Автологин и запуск иксов без *DM(Display Manager):
Для '''LXDE''' добавить в '''/etc/rc.local'''
<blockquote><sourcesyntaxhighlight lang="text">
su - user -c startx</sourcesyntaxhighlight></blockquote>
Изменить в '''/etc/X11/Xwrapper.config'''
<blockquote><sourcesyntaxhighlight lang="text">
allowed_users=anybody</sourcesyntaxhighlight></blockquote>
Добавить в '''~/.xinitrc'''
<blockquote><sourcesyntaxhighlight lang="text">
exec ck-launch-session dbus-launch startlxde</sourcesyntaxhighlight></blockquote>
 
=== Железо (Модули) ===
Строка 897:
* '''sshfs -o allow_other user@host:/home/user/ /mnt/host_user/''' - монтирует /home/user/ удаленного хоста(host) в /mnt/host_user/. Опция allow_other позволяет другим пользователям обращаться к ресурсу
* Просмотр статистики неудачного логина
<sourcesyntaxhighlight lang="bash">
sudo cat /var/log/auth.log* \
| awk '/Failed password/ && /sshd/ {print $1,$2}' \
| sort -k 1,1M -k 2n | uniq -c</sourcesyntaxhighlight>
*: Отметим, что если добавить выполняющего эту команду пользователя в имеющую доступ к файлам <code>/var/log</code> группу <code>adm</code>, использование <code>sudo</code> станет ненужным.
 
Строка 906:
:Проброс UDP трафика с узла '''A''' на узел '''C''' через промежуточный узел '''B''', к которому есть доступ по ssh:
- на узле '''A''' - проброс 12345 порта с узла A на порт 6789 узла B
<blockquote><sourcesyntaxhighlight lang="bash">
ssh -tNf -L12345:127.0.0.1:6789 "B" -l user
</sourcesyntaxhighlight></blockquote>
- на узле '''B''' - переводим содержимое TCP пакетов в FIFO и тут же забираем и упаковываем в UDP и отсылаем на узел C порт 2056:
<blockquote><sourcesyntaxhighlight lang="bash">
mkfifo /tmp/fifo
nc -l -p 6789 < /tmp/fifo | nc -u "C" 2056 > /tmp/fifo
</sourcesyntaxhighlight></blockquote>
- на узле '''A''' - переводим содержимое UDP пакетов, отсылаемых локальным сервисом на localhost:2056 в FIFO и сразу забираем из FIFO и отправляем на localhost:12345:
<blockquote><sourcesyntaxhighlight lang="bash">
mkfifo /tmp/fifo
nc -l -u -p 2056 < /tmp/fifo | nc 127.0.0.1 12345 > /tmp/fifo
</sourcesyntaxhighlight></blockquote>
* ''' corkscrew''' - Утилита для работы ssh через https прокси
 
Строка 975:
Запись видео с вебкамеры:
<blockquote>
<sourcesyntaxhighlight lang="bash">$ mencoder tv:// -tv driver=v4l:device=/dev/video0:width=640:height=480:forceaudio -ovc \
lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=mp3 -ffourcc divx -o test.avi</sourcesyntaxhighlight>
</blockquote>
 
«Склеиваем» два видеофайла:
<blockquote>
<sourcesyntaxhighlight lang="bash">$ mencoder -oac copy -ovc copy out.avi file_1.avi file_2.avi</sourcesyntaxhighlight>
</blockquote>
 
Вырезаем пятисекундный кусок из видеофайла:
<blockquote>
<sourcesyntaxhighlight lang="bash">$ mencoder -oac copy -ovc copy -ss 00:00 -endpos 0:05 file.avi -o out.avi</sourcesyntaxhighlight>
</blockquote>
 
Кодируем видеофайл в 3gp:
<blockquote>
<sourcesyntaxhighlight lang="bash">$ ffmpeg -i file.avi -b 200Kb -r 12 -s qcif -ac 1 -ab 12.2k -ar 8000 out.3gp</sourcesyntaxhighlight>
</blockquote>
 
Исправляем «битые» индексы:
<blockquote>
<sourcesyntaxhighlight lang="bash">$ mencoder input.avi -forceidx -oac copy -ovc copy -o output.avi</sourcesyntaxhighlight>
или же:
<sourcesyntaxhighlight lang="bash">$ avifix -i input.avi</sourcesyntaxhighlight>
</blockquote>
 
Скрипт для кодирования DVD:
<blockquote>
<sourcesyntaxhighlight lang="bash">
#!/bin/bash
 
Строка 1107:
mencoder dvd://${TITLE} -dvd-device ${DVDDEV} ${SPOS} ${EPOS} -ovc xvid \
-xvidencopts pass=2:vhq=1:vhq=4:gmc:bitrate=-${VBR} \
-vf ${CROP}${SCALE},hqdn3d=2:1:2 -oac copy -o ${OUT}.avi</sourcesyntaxhighlight>
</blockquote>