Быстрая передача файла через псевдо-HTTP

Когда есть необходимость передать файл с одной машины на другую,
а под рукой нет общедоступных ресурсов, можно сделать так:

    nc -l -p 8080 < file

или

    netcat -l 8080 < file

на клиенте достаточно в браузере набрать http://192.168.0.123:8080

Собственно, все. Впрочем, если получатель – блондинка, которая не знает команды File-Save, можно написать так:

   (echo -e "HTTP/1.1 200\nContent-Disposition: attachment;
   filename=gena_na.png\nContent-Type: application/octet-
   stream\nConnection: close\n"; cat vim_mrxvt.png ) | nc -vv -l -p 8080

Но это еще не все. Можно дать доступ к целой директории, написав простой HTTP сервер в одной строке:

   while true; do nc -vv -l -p 8080 -c '( read a b c; file=`echo $b | sed 's/[^a-z0-9.]//g'`;
   if [ a$file = "a" ]; then ( ls | (while read f; do echo "<a href=$f>$f</a><br>"; done) );
   else cat $PWD/$file; fi )'; sleep 1; done

Этот скрипт отдает все файлы, которые есть в текущем каталоге и не позволяет его сменить.
В случае, если запрашивается корневая директория, то управление передается
своеобразному mod_index – т.е. выводится список файлов-ссылок. В конце добавлена задержка в 1 сек для того, чтобы была возможность убить его нажатием Ctrl-C.

Несколько реально полезных bash-уловок

По мотивам http://www.shell-fu.org/ . Несколько интересных вещей:

  • Избавьтесь от повторения внутри команды. Вот, например, надо зарезервировать файл /usr/src/linux/arch/i385/boot/bzImage в /usr/src/linux/arch/i385/boot/bzImage.old (пример довольно-таки “учебный”). Даже с учётом автодополнения по Tab набор команды cp /usr/src/linux/arch/i385/boot/bzImage /usr/src/linux/arch/i385/boot/bzImage.old – достаточно нуден. Куда проще написать cp /usr/src/linux/arch/i385/boot/bzImage{,.old}. Соответственно, для возврата – cp /usr/src/linux/arch/i385/boot/bzImage{.old,}
  • Избавьтесь от повторения в цепочке команд. В набираемой команде можно использовать аргументы предыдущей: вместо первого просто написать !:1 , вместо второго – !:2 , вместо последнего – !:$ . А можно и “одним махом”: !* – сразу все. Обычно так и пишут не заморачиваясь, особенное, если аргумент всего один: !* ведь проще набрать, чем !:1
  • И ещё о повторах. Когда нужно несколько раз “прогрепить” несколько раз один файл по разным ключевым словам, имеет смысл писать команду grep “наоборот”: – тогда нажав стрелку вверх, можно сразу править ключевое слово.
  • Забытое sudo. Если набрали команду, а она “ругнулась” на права и вы вспомнили, что надо её выполнить через sudo, достаточно набрать sudo !! – команда подставится сама.
  • Несколько команд в одну строку. Можно написать несколко команд в одну строку. Причём, если разделить их && – следующая будет выполняться только в случае успешного завершения предыдущей. А если разделить ; – в любом случае.
  • Несколько вложенных каталогов. Для создания нескольких вложенных каталогов вовсе необязательно писать mkdir asd ; mkdir asd/ghjk ; mkdir asd/ghjk/qwer. Можно сразу написать mkdir -p asd/ghjk/qwer
  • Замечательные клавиши. Ctrl-U – вырезает (в “буфер обмена”) всё от курсора до начала строки, Ctrl-W – вырезает (в “буфер обмена”) одно слово влево, Ctrl-Y – вставляет из “буфера обмена”, Ctrl-A – перейти в начало строки, Ctrl-E – перейти в конец строки. “Буфер обмена” – свой собственный, ни с буфером обмена X, ни, тем более, с Windows через SSH ничего общего не имеет.
  • Генератор паролей в одну строку. Команда </dev/urandom tr -dc A-Za-z0-9_ | head -c8 ; echo создаст вполне надёжный пароль из 8 символов.

Список основных команд Linux. Все команды тестировались на Fedora и Ubuntu.

Команда Описание
apropos whatis Показать команды соответствующие строке. См. также threadsafe
man -t man | ps2pdf – > man.pdf Создать pdf версию страницы мануала (man)
which command Показать полный путь к файлу команды
time command Выполнить команду и отобразить время выполнения
time cat Запустить секундомер. Ctrl-d чтобы остановить его. См. также sw
nice info Запустить команду с низким приоритетом (”info” reader в данном случае)
renice 19 -p $$ Установить shell (скрипту) низкий приоритет. Используется для неинтерактивных задач.
Навигация по директориям
cd - Перейти в предыдущую директорию
cd Перейти в $HOME директорию
(cd dir && command) Перейти в директорию, выполнить комманду (command) и вернуться в текущую директорию
pushd . Положить текущую директорию в стек, чтобы позже вернуться к ней с помощью popd
alias l=’ls -l –color=auto’ Быстрое отображение содержимого директории
ls -lrt Список файлов по дате. См. также newest и find_mm_yyyy
ls /usr/bin | pr -T9 -W$COLUMNS Напечатать в 9 столбцов в ширину терминала
find -name ‘*.[ch]‘ | xargs grep -E ‘expr’ Искать ‘expr’ в текущей директории и в нижестоящих директориях. См. также findrepo
find -type f -print0 | xargs -r0 grep -F ‘example’ Поиск всех файлов по ‘example’ в текущей директории и ниже
find -maxdepth 1 -type f | xargs grep -F ‘example’ Поиск всех файлов по ‘example’ в текущей директории
find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; done Обработать каждый элемент с несколькими командами (в цикле while)
find -type f ! -perm -444 Найти файлы, которые не являются видимыми для всех (полезно для веб сайта)
find -type d ! -perm -111 Найти директории не доступные для всех (полезно для web сайтов)
locate -r ‘file[^/]*\.txt’ Искать в кешированном индексе по именам.
look reference Быстрый поиск (сортированный) словаря по префиксу
grep –color reference /usr/share/dict/words Подсвечивание мест где регулярное выражение появляется в словаре
Архивирование и сжатие
gpg -c file Зашифровать файл
gpg file.gpg Расшифровать файл
tar -c dir/ | bzip2 > dir.tar.bz2 Заархивировать директорию (папку) dir/
bzip2 -dc dir.tar.bz2 | tar -x Разархивировать архив (используйте gzip вместо bzip2 для файлов tar.gz)
tar -c dir/ | gzip | gpg -c | ssh user@remote ‘dd of=dir.tar.gz.gpg’ Создать зашифрованный архив директории (папки) dir/ на удаленном компьютере
find dir/ -name ‘*.txt’ | tar -c –files-from=- | bzip2 > dir_txt.tar.bz2 Создать архив для папки dir/ и всех вложенных папок
find dir/ -name ‘*.txt’ | xargs cp -a –target-directory=dir_txt/ –parents Создать копию папки dir/ с вложенными папками
( tar -c /dir/to/copy ) | ( cd /where/to/ && tar -x -p ) Скопировать (с правами доступа) папку copy/ в папку /where/to/
( cd /dir/to/copy && tar -c . ) | ( cd /where/to/ && tar -x -p ) Скопировать (с правами доступа) содержимое папки copy/ в /where/to
( tar -c /dir/to/copy ) | ssh -C user@remote ‘cd /where/to/ && tar -x -p’ Скопировать (с правами доступа) папку copy/ на удаленный компьютер remote:/where/to
dd bs=1M if=/dev/sda | gzip | ssh user@remote ‘dd of=sda.gz’ Сделать резервную копию (сбекапить) жесткого диска и послать ее на удаленный компьютер
rsync (Эффективный сетевой копировщик файлов: Используйте опцию –dry-run для тестирования)
rsync -P rsync://rsync.server.com/path/to/file file Только отобразить различия. Делайте много раз чтобы проверить прошли ли нормально закачки
rsync –bwlimit=1000 fromfile tofile Скопировать локально с предельной скоростью. Это приятно для I/O
rsync -az -e ssh –delete ~/public_html/ remote.com:’~/public_html’ Зеркальный веб сайт (используется шифрование и дешифрование)
rsync -auz -e ssh remote:/dir/ . && rsync -auz -e ssh . remote:/dir/ Синхронизировать текушую папку с папкой на удаленном компьютере
ssh (Secure SHell)
ssh $USER@$HOST command Запустить команду command на удаленном хосте $HOST от имени пользователя $USER
(команда по умолчанию = shell)
ssh -f -Y $USER@$HOSTNAME xeyes Запустить GUI команду на удаленном хосте $HOST от имени пользователя $USER
scp -p -r $USER@$HOST: file dir/ Скопировать папку dir/ с правами доступа в домашнию папку пользователя $USER на хосте $HOST
ssh -g -L 8080:localhost:80 root@$HOST Перенаправить соединения к $HOSTNAME:8080 наружу к $HOST:80
ssh -R 1434:imap:143 root@$HOST Перенаправить соединения от $HOST:1434 к внутр. imap:143
wget (многоцелевой инструмент для скачивания)
(cd cli && wget -nd -pHEKk http://www.pixelbeat.org/cmdline.html) Сохранить веб страницу (как она открывается локально) в текущую директорию
wget -c http://www.example.com/large.file Продолжить скачивание частично скаченного файла
wget -r -nd -np -l1 -A ‘*.jpg’ http://www.example.com/ Скачать множество файлов в текущую директорию
wget ftp://remote/file[1-9].iso/ Ftp непосредственная поддержка globbing
wget -q -O- http://www.pixelbeat.org/timeline.html | grep ‘a href’ | head Отображать вывод напрямую (на экран)
echo ‘wget url’ | at 01:00 Скачать url в 01:00 в текущую директорию
wget –limit-rate=20k url Сделать закачку с уменьшенной скоростью (ограничить скорость до 20 КB/s в этом примере)
wget -nv –spider –force-html -i bookmarks.html Проверить ссылки в файле
wget –mirror http://www.example.com/ Оперативно обновлять локальную копию сайта (удобно использовать с cron)
Сетевые команды (Обратите внимание, что команды ifconfig, route, mii-tool, nslookup устарели)
ethtool eth0 Отобразить статус сетевого устройства (интерфейса) eth0
ethtool –change eth0 autoneg off speed 100 duplex full Вручную установить скорость сетевого интерфейса (устройства)
iwconfig eth1 Отобразить статус беспроводного интерфейса (устройства) eth1
iwconfig eth1 rate 1Mb/s fixed Вручную установить скорость беспроводного интерфейса (устройства)
iwlist scan Список беспроводных сетей в радиусе действия
ip link show Список сетевых интерфейсов (устройств)
ip link set dev eth0 name wan Переименовать интерфейс (устройство) eth0 в wan
ip link set dev eth0 up Включить интерфейс eth0 (чтобы выключить – down)
ip addr show Список ip адресов интерфейсов
ip addr add 1.2.3.4/24 brd + dev eth0 Добавить (или удалить) ip адрес и маску (255.255.255.0)
ip route show Вывести таблицу маршрутизации
ip route add default via 1.2.3.254 Установить 1.2.3.254 в качестве шлюза по умолчанию
tc qdisc add dev lo root handle 1:0 netem delay 20msec Добавить 20мс латентность к устройству loopback (для тестирования)
tc qdisc del dev lo root Убрать латентность добавленную выше
host pixelbeat.org Поиск ДНС ip адреса по имени хоста или наоборот
hostname -i Поиск локального ip адреса (идентично host ‘hostname’)
whois pixelbeat.org Поиск whois информации по имени хоста или ip адресу
netstat -tupl Список интернет сервисов в системе
netstat -tup Список активных соединений к системе (от системы)
Сетевые команды связанные с windows (Обратите внимание, что samba – это пакет который предоставляет всю windows специфичную поддержку сети)
smbtree Найти windows компьютеры в сети. См. также findsmb
nmblookup -A 1.2.3.4 Найти windows (netbios) имя, ассоциируемое с ip адресом
smbclient -L windows_box Список shares на windows компьютере или samba сервере
mount -t smbfs -o fmask=666,guest //windows_box/share /mnt/share Смонтировать windows share (папку с открытым доступом)
echo ‘message’ | smbclient -M windows_box Послать popup сообщение на windows комьютер (отключено по умолчанию в XP sp2)
Манипуляции с текстом (Обратите внимание, sed использует stdin и stdout, так что если Вы хотите редактировать файлы, добавляйте <oldfile >newfile)
sed ‘s/string1/string2/g’ Заменить строку string1 строкой string2
sed ‘s/\(.*\)1/\12/g’ Изменить строку anystring1 на anystring2
sed ‘/ *#/d; /^ *$/d’ Убрать комментарии и пустые строки
sed ‘:a; /\\$/N; s/\\\n//; ta’ Соединить строки (линии) с предшествующим \
sed ‘s/[ \t]*$//’ Удалить предшествующие пробелы с строк
sed ‘s/\([\\`\\"$\\\\]\)/\\\1/g’ Заескейпить активные метасимволы оболочки двумя ковычками
seq 10 | sed “s/^/      /; s/ *\(.\{7,\}\)/\1/” Выровнять числа по правой границе
sed -n ’1000p;1000q Напечатать 1000-ную строку
sed -n ’10,20p;20q Напечатать строки с 10 по 20-ую
sed -n ‘s/.*<title>\(.*\)<\/title>.*/\1/ip;T;q Получить title из HTML страницы
sort -t. -k1,1n -k2,2n -k3,3n -k4,4n Отсортировать IPV4 ip адреса
echo ‘Test’ | tr ‘[:lower:]‘ ‘[:upper:]‘ Перевести из одного регистра в другой
tr -dc ‘[:print:]‘ < /dev/urandom Отфильтровать не печатаемые символы
history | wc -l Посчитать число строк
Операции с множествами (Обратите внимание, что Вы можете export LANG=C для скорости. Это также полагает отсутствие линий дупликатов в файле)
sort file1 file2 | uniq Объединение неотсортированных файлов
sort file1 file2 | uniq -d Пересечение неотсортированных файлов
sort file1 file1 file2 | uniq -u Разность неотсортированных файлов
sort file1 file2 | uniq -u Симметрическая разность неотсортированных файлов
join -a1 -a2 file1 file2 Объединение отсортированных файлов
join file1 file2 Пересечение отсортированных файлов
join -v2 file1 file2 Разность отсортированных файлов
join -v1 -v2 file1 file2 Симметрическая разность отсортированных файлов
Математические операции
echo ‘(1 + sqrt(5))/2′ | bc -l Простая математика (Вычисление числа φ). См. также bc
echo ‘pad=20; min=64; (100*10^6)/((pad+min)*8)’ | bc Более сложная (целая). Этот пример показывает максимум FastE packet rate
echo ‘pad=20; min=64; print (100E6)/((pad+min)*8)’ | python Питон занимается математическими вычислениями
echo ‘pad=20; plot [64:1518] (100*10**6)/((pad+x)*8)’ | gnuplot -persist Напечатать FastE packet rate против packet size
echo ‘obase=16; ibase=10; 64206′ | bc Конвертация систем счисления (десятичную в шестнадцатиричную)
echo $((0x2dec)) Конвертация систем счисления (шестнадцатиричную в десятичную)
((арифметическое расширение shell-а))
units -t ’100m/9.69s‘ ‘miles/hour’ Unit конвертация (метрической системы в имперскую)
units -t ’500GB’ ‘GiB’ Unit конвертация (SI в IEC префиксы)
units -t ’1 googol’ Поиск определения
seq 100 | (tr ‘\n’ +; echo 0) | bc Добавить столбец чисел. См. также add и funcpy
Календарь
cal -3 Отобразить календарь
cal 9 1752 Отобразить календарь для конкретного месяца года
date -d fri Какая дата у текущей пятницы. См. также day
[ $(date -d "tomorrow" +%d) = "01" ] || exit Завершить выполнение скрипта, если только сейчас не последний день месяца
date –date=’25 Dec’ +%A Какого числа будет рождество в текущем году
date –date=’@2147483647′ Перевести секунды прошедшие с epoch (1970-01-01 UTC) в дату
TZ=’:America/Los_Angeles’ date Сколько времени сейчас на Западном побережье США (используйте tzselect чтобы найти TZ)
echo “mail -s ‘get the train’ P@draigBrady.com < /dev/null” | at 17:45 Напоминать по Email
echo “DISPLAY=$DISPLAY xmessage cooker” | at “NOW + 30 minutes” Напоминать в Popup окне
Locales (локализация)
printf “%’d\n” 1234 Напечатать четырехзначное число сгруппированное соответственно локали
BLOCK_SIZE=\’1 ls -l Сделать чтобы ls группировала тысячи соответственно локали
echo “I live in `locale territory`” Получить информацию из базы данных локали
LANG=en_IE.utf8 locale int_prefix Искать информацию о локали для конкретной страны См. также ccodes
locale | cut -d= -f1 | xargs locale -kc | less Список полей, доступных в базе данных локали
Перекодирование (команды iconv, dos2unix, unix2dos устарели)
recode -l | less Отобразить доступные переходы (по 1 алиасу на каждой строке)
recode windows-1252.. file_to_change.txt Перевести Windows “ansi” в локальную (текущую) кодировку (auto делает CRFL перевод)
recode utf-8/CRLF.. file_to_change.txt Перевести windows utf8 в локальную (текущую) кодирувку
recode iso-8859-15..utf8 file_to_change.txt Перевести из кодировки latin9 (западная европейская) в utf8
recode ../b64 < file.txt > file.b64 Кодирование base64
recode /qp.. < file.txt > file.qp Раскодирование с кавычками
recode ..HTML < file.txt > file.html Перевести text в HTML
recode -lf windows-1252 | grep euro Поиск в таблице символов
echo -n 0×80 | recode latin-9/x1..dump Показать символ в кодировке latin9 по коду
echo -n 0x20AC | recode ucs-2/x2..latin-9/x Показать latin-9 encoding
echo -n 0x20AC | recode ucs-2/x2..utf-8/x Показать utf-8 encoding
CDs (операции с CD дисками)
gzip < /dev/cdrom > cdrom.iso.gz Сохранить копию CD с данными
mkisofs -V LABEL -r dir | gzip > cdrom.iso.gz Создать образ CD диска из содержимого директории
mount -o loop cdrom.iso /mnt/dir Смонтировать CD образ на /mnt/dir (только для чтения)
cdrecord -v dev=/dev/cdrom blank=fast Очистить CDRW
gzip -dc cdrom.iso.gz | cdrecord -v dev=/dev/cdrom - Записать CD образ (используйте dev=ATAPI -scanbus для выбора устройства записи)
cdparanoia -B Сохранить аудио треки с CD в wav файлы (сохранятся в текущую папку)
cdrecord -v dev=/dev/cdrom -audio *.wav Создать аудио диск (audio CD) из всех wav файлов,
находящихся в текущей директории (см. также cdrdao)
oggenc –tracknum=’track’ track.cdda.wav -o ‘track.ogg’ Создать ogg файл из wav файла
Дисковое пространство (См. также FSlint)
ls -lSr Список файлов, отсортированных по размеру (файл с наибольшим размером – последний)
du -s * | sort -k1,1rn | head Показать пользователей в текущей папке с наибольшим объемом используемых данных.
См. также dutop
df -h Показать свободное место на смонтированных файловых системах
df -i Показать свободные индексные дескрипторы на смонтированных файловых системах
fdisk -l Показать размеры разделов дисков и типы (запускается от root-а)
rpm -q -a –qf ‘%10{SIZE}\t%{NAME}\n’ | sort -k1,1n Список всех пакетов с размером дистрибутивов (размер – в Байтах)
dpkg-query -W -f=’${Installed-Size;10}\t${Package}\n’ | sort -k1,1n Список всех пакетов с размерами установки (размер – в килобайтах) для debian дистрибутивов
dd bs=1 seek=2TB if=/dev/null of=ext3.test Создать большой тестовый файл. См. также truncate
Мониторинг/отладка
tail -f /var/log/messages Мониторинг сообщений в log файле
strace -c ls >/dev/null Сумма/профиль системных вызовов, сделанных командой
strace -f -e open ls >/dev/null Список системных вызовов, сделанных командой
ltrace -f -e getenv ls >/dev/null Список библиотечных вызовов, сделанных командой
lsof -p $$ Список путей, которые открывал процесс
lsof ~ Список процессов, которые имеют открытые пути
tcpdump not port 22 Отобразить сетевой (кроме ssh) траффик. См. также tcpdump_not_me
ps -e -o pid,args –forest Иерархический список процессов
ps -e -o pcpu,cpu,nice,state,cputime,args –sort pcpu | sed ‘/^ 0.0 /d’ Список процессов с % использования процессора
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS Список процессов с используемой ими памятью (См. также ps_mem.py)
ps -C firefox-bin -L -o pid,tid,pcpu,state Список всех потоков для конкретного процесса
ps -p 1,2 Список информации о процессах с конкретными IDs (идентификаторами)
last reboot Показать историю ребутов системы
free -m Показать количество оставшейся оперативной памяти (-m отображает в мегабайтах)
watch -n.1 ‘cat /proc/interrupts’ Наблюдать последовательно за изменяющимися данными
Информация о системе (см. также sysinfo) (’#’ означает, что для запуска нужны права root-а)
uname -a Показать версию ядра и системную архитектуру
head -n1 /etc/issue Показать название и версию дистрибутива (операционной системы)
cat /proc/partitions Показать все разделы, зарегистрированные в системе
grep MemTotal /proc/meminfo Показать всю оперативную память, которую видит система
grep “model name” /proc/cpuinfo Показать информацию о процессоре(ах) (CPU)
lspci -tv Показать информацию о шине PCI
lsusb -tv Показать информацию о USB
mount | column -t Список смонтированных файловых систем в системе (херархический вывод)
# dmidecode -q | less Отобразить информацию о SMBIOS/DMI
# smartctl -A /dev/sda | grep Power_On_Hours Какой промежуток времени этот диск (система) был включен (работал)
# hdparm -i /dev/sda Показать информацию о диске sda
# hdparm -tT /dev/sda Протестировать скорость чтения на диске sda
# badblocks -s /dev/sda Протестировать на нечитаемые блоки диск sda
Интерактивность (см. также горячие клавиши linux)
readline Редактор строки, используемый bash, python, gnuplot, …
screen Виртуальные терминалы с возможностями открепления, …
mc Мощный файл менеджер, которые может просматривать rpm, tar, ftp, ssh, …
gnuplot Интерактивная (скриптовая) графика
links Текстовый веб браузер
Разное
alias hd=’od -Ax -tx1z -v’ Ручной 16-ричный дамп (пример использования: hd /proc/self/cmdline | less)
alias realpath=’readlink -f’ Канонический путь (пример использования: realpath ~/../$USER)
set | grep $USER Поиск в текущем environment (окружении)
touch -c -t 0304050607 file Установить дату для файла (YYMMDDhhmm)
python -m SimpleHTTPServer Отобразить дерево текущего каталога по адресу http://$HOSTNAME:8000/

Горячие клавиши bash

Горячие клавиши bash можно разделить на несколько больших групп:

CTRL-команды:

Ctrl + a – переход к началу строки
Ctrl + b – аналог стрелки влево (ну, если не работает)
Ctrl + c – отменить редактирование команды или прекратить работу (если запущена)
Ctrl + d – аналог Delete. Если строка пустая – выход из shell
Ctrl + e – переход к концу строки
Ctrl + f – аналог стрелки вправо
Ctrl + g – выход из режима дополнения
Ctrl + h – аналог BackSpace
Ctrl + i – аналог Tab
Ctrl + k – удалить всё до конца строки
Ctrl + l – Очистить экран (набранная строка и даже позиция курсора остаётся)
Ctrl + r – (ну, это все знают) – поиск по истории набранных команд
Ctrl + R – поиск по истории набранных команд назад (это когда есть несколько вариантов и проскочили нужный)
Ctrl + t – поменять местами текущий символ с предыдущим
Ctrl + u – удалить всё до начала строки
Ctrl + v – преобразует следующую клавишу в её символьное отображение (Enter – ^M, Esc – ^[ и т.д.)
Ctrl + w – удалить от курсора до начала слова
Ctrl + x дважды – скачок между началом строки и текущей позицией курсора.
Ctrl + x @ – Показывает возможные варианты дополнения доменного имени (вот это мне воспроизвести не удалось).
Ctrl + y – вставить из буфера (все удаляемое по горячим клавишам удаляется не просто так, а в буфер)
Ctrl + z – притормозить/остановить выполнение команды в фон
Ctrl + _ – отмена последнего изменения

ALT-команды
Alt + < – к первой команде в истории (вообще к самой первой в .bash_history)
Alt + > – к последней команде в истории
Alt + ? – показать весь список вариантов дополнения (аналог 2Т – см. ниже)
Alt + * – вставить все возможные варианты дополнения
Alt + / – попытатся дополнить имя файла (из имеющихся в текущем каталоге)
Alt + . – вставить последний аргумент из предыдущей команды
Alt + b – влево на слово
Alt + c – сделать первую букву слова заглавной (и перейти к следующему слову)
Alt + d – удалить от текущей позиции до конца слова
Alt + f – вправо на слово
Alt + l – сделать первую букву слова строчной (и перейти к следующему слову)
Alt + n – искать по истории (но не сразу, а после полного ввода и нажатия Ентер)
Alt + p – искать по истории назад
Alt + r – очистить всю строку
Alt + t – поменять слова местами
Alt + u – сделать все буквы заглавными от текущей позиции до конца слова
Alt + BackSpace – Удалить от текущей позиции до начала слова

Esc-команды
Esc+d – удалить от курсора до конца слова
Esc+f – вправо на слово
Esc+b – влево на слово
Esc+t – поменять местами слова

Tab-команды

2T обозначает дважды нажатый Tab
2T – все доступные команды (это тоже все знают)
(string)2T – все доступные команды начинающиеся на string
/2T – все каталоги, включая скрытые. Для текущего надо набрать ./2Т
*2T – каталоги, кроме скрытых
~2T – все пользователи, присутствющие в /etc/passwd
~f2T – все пользователи, присутствющие в /etc/passwd, начинающиеся на f
$2T – все системные переменные
@2T – все записи в /etc/hosts
=2T – вывод наподобии ls или dir

Просто команды
!! – выполнить последнюю команду в истории
!abc – выполнить последнюю команду в истории, начинающуюся на abc
!a:p – напечатать последнюю команду в истории, начинающуюся на a
!n – выполнить n-ную команду в истории
!$ – посдедний аргумент последней команды
!^ – первый аргумент последней команды
^abc^xyz – заменить abc на xyz в последней команде и выполнить результат

Find out top 10 directories eating up your disk space

Find out top 10 directories eating up your disk space:

du -cks * | sort -rn | head -10

Using pw to add a group and user in FreeBSD

Using “textdrive” as an example

pw groupadd textdrive
pw useradd textdrive -m -c "Main Textdrive account" -d /home/textdrive -s /bin/tcsh -G textdrive -k /usr/share/skel/

Then set the password:

passwd textdrive

FreeBSD для обслуживания 100-200 тысяч соединений (freebsd tcp optimization tune speed socket mbuf sendfile sysctl)

Стенограмма выступления Игоря Сысоева с конференции РИТ-2007.

mbuf clusters

FreeBSD хранит сетевые данные в mbuf clusters, размер каждого 2Кб, но из
них используется только около 1500 байт (по размеру Ethernet пакета).

mbufs

Для каждого mbuf кластера нужен “mbuf”, который имеет размер 256 байт и
нужен для организации связи цепочек из mbuf кластеров. В mbuf можно поместить
полезную информацию в районе 100 байт, но это не всегда используется.

Если в машине 1Гб и больше памяти, то по умолчанию будет создано 25 тыс. mbuf кластеров,
что не всегда достаточно.

При ситуации исчерпания числа свободных mbuf кластеров FreeBSD попадает в
состояние zonelimit и перестает отвечать на запросы по сети,
в top это выглядит как “zoneli”. Единственная возможность как-то повлиять на
ситуацию – это зайти с локальной консоли и перезагрузить систему, уничтожить
процесс находящийся в состоянии “zoneli” невозможно. Для Linux 2.6.x данная проблема
тоже характерна, причем работать переставала даже консоль.

PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND
13654 nobody 1 4 0 59912K 59484K zoneli 209:26 0.00% nginx

Read the rest of this entry »

Команда watch в Linux и во FreeBSD

root@jupiter:~$ uname -a
Linux jupiter 2.6.15-26-386 #1 PREEMPT Thu Aug 3 02:52:00 UTC 2006 i686 GNU/Linux
nexus@jupiter:~$ whatis watch
watch (1) – execute a program periodically, showing output fullscreen

root@cod:~# uname -a
FreeBSD cod 5.10-STABLE FreeBSD 5.10-STABLE #1: Mon Jul 26 09:54:43 EEST 2006
root@cod:~# whatis watch
watch(8) – snoop on another tty line

Ну а если хотите такую же функциональность watch в FreeBSD как и в Linux, то portinstall cmdwatch
и используйте cmdwatch.

Типичный случай: cmdwatch df

HowTo fix command history in MC under Ubuntu

The program which I setup first of all after the Linux installation is mc (Midnight Commander).
It is very friendly and useful for me.

But in Ubuntu there is one problem with mc: shell’s commands history is flooded with a garbage and with many ESC-symbols when I use mc.

E.g.:

cd "`echo -e '\057usr'`"
cd "`echo -e '\057usr\057X\061\061R\066\057bin'`"
cd "`echo -e '\057home'`"

I found the way how to fix this problem.
In the file .bashrc string:

export HISTCONTROL=ignoredups

should be replaced with:

export HISTCONTROL=ignoreboth

5 способов сделать использование bash более продуктивным

Перевод статьи Richard Bradshaw «5 ways to make using bash more productive»
Если вы используете Linux или Mac, то вы, скорее всего, используете bash в качестве командного интерпретатора по умолчанию. Обычно у него есть несколько неплохих возможностей (табы, история и т.п.), но существуют также несколько советов и трюков, которые могут сделать его более приятным в использовании. Ниже следует 5 моих любимых.Перечисленные вещи следует добавлять в ваш файл .bashrc. Откройте его с помощью

nano ~/.bashrc

вы можете заменить «nano» на ваш любимый текстовый редактор (vi, emacs, pico, gedit, kate и т.п.)

Эффективный поиск по истории
Нажмите ctrl+R для начала поиска, затем наберите фразу, которую следует найти в истории. Этот совет несложный, но он является отправной точкой, которую все должны знать!

history | grep "искомоевыражение"

Вы найдете выражение в вашей истории с использованием немного более гибкого способа.

Улучшите историю bash
Если вы используете две сессии bash в одно и то же время, закрыв вторую, вы будете писать поверх команд, набранных в первой. Это означает, что история одной из сессий будет утеряна. По меньшей мере, это раздражает. К счастью, есть способ исправить это.Откройте ваш файл .bashrc, как указано выше, и добавьте строки:

shopt -s histappend PROMPT_COMMAND='history -a'

Новая история будет добавляться в конец существующей, вместо того, чтобы переписывать неё. Теперь вся ваша история будет сохранена!

Исправьте распространенные ошибки написания
Добавьте в файл .bashrc:

shopt -s cdspell

Простые ошибки, такие как «otp» вместо «opt», или «ect» вместо «etc», будут игнорироваться.

Уберите дубликаты в истории
Когда-нибудь читали свою историю команд и находили, что она в основном состоит из ls, pwd и exit? А как насчет набора одних и тех же команд вновь и вновь, таких как считывание содержимого лога?Добавьте

export HISTCONTROL="ignoredups"export HISTIGNORE="&:ls:[bf]g:exit”

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

Исправьте многострочные команды
Добавьте

shopt -s cmdhist

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

Заключение
Итак, вот 5 вещей, которые сэкономили мое время, — если вы знаете другие трюки, дайте мне знать о них в комментариях.