Следующий список - это подборка
обычных команд, использованных
таким образом, чтобы получить
мощный эффект. Как мастер военного
искусства, который убивает голыми
руками, мастер UNIX часто может
сложить вместе несколько обычных
команд и достичь колоссального
эффекта. Некоторые строки, которые
будут представлены ниже, можно
встретить в других местах этой
книги, но они приводятся здесь
повторно для облегчения поиска.
Строки группируются в
соответствии с командой, которая
является ключевой в данной строке,
однако, иногда сложно выделить
такую команду как, например, в
случае программного канала, когда
Вы с двух сторон имеете важные
команды. Заметьте, что некоторые из
этих команд являются стандартными
командами UNIX, в то время как другие -
это командные файлы и программы,
представленные ранее в этой книге.
ACCTCOM
прочитать всю Вашу учетную
информацию, начиная с
последней команды.
acctcom -b -u$LOGNAME
показать все учетные записи,
запущенные с Вашего терминала
и того, который запущен как
суперпользователь
acctcom -u# -l'tty'
BANNER
напечатать сообщение на трех
строках
banner "line 1" "line2" "line3"
напечатать день недели и дату
на одной строке, время на
другой
посмотреть символы в именах
файлов в текущем каталоге
od -c .
напечатать значение
функциональных клавиш,
комбинаций клавиш, и.т.д.
od -cb (нажмите комбинацию клавиш)
^d (печатает строку)
(нажмите что-нибудь еще)
^d (печатает следующую строку)
^d (выыходит из od)
сделать дамп копии на стримере
od -c /dev/rfd0
сделать дамп файловой системы
od -c /dev/root
PASSWD
как суперпользователь Вы
можете установить в качестве
пароля любую строку
# passwd russ
Changing password for russ
(Изменение пароля для russ)
Enter new password (minimum of 5 characters)
(Введите новый пароль (минимум 5 символов))
Please use combination of upper, lowercase letters
and numbers
(Просьба использовать комбинации чисел и букв в
верхнем и нижнем регистрах)
New password: junk
(Новый пароль: junk)
Re-enter new password: junk
(Новый пароль: junk)
#
как обычный пользователь Вы
должны будете вводить пароль с
учетом количественных
ограничений и ограничений по
длине
$ passwd russ
Changing password for russ
(Изменение пароля для russ)
Enter new password (minimum of 5 characters)
(Введите новый пароль (минимум 5 символов))
Please use combination of upper, lowercase letters
and numbers
(Просьба использовать комбинации чисел и букв в
верхнем и нижнем регистрах)
New password: junk
(Новый пароль: junk)
Too short. Password unchanged.
(Слишком короткий. Пароль не изменен)
$
PR
вывести многоколоночный
список имен файлов
ls $@ | pr -5t
напечатать файлы из списка
pr 'find . -name "*.c" -print | sort'
PS
напечатать полную информацию
обо всех активных процессах
ps -aef
напечатать информацию обо всех
процессах, управляемых Вашим
терминалом
ps -f
напечатать информацию о
процессах, связанных с
терминалом tty00
ps -ft00
напечатать информацию о
процессах, связанных с
пользователем russ
ps -furuss
BSD синтаксис для печати всех
процессов
ps -aux
BSD синтаксис для печати всех
процессов, связанных с
терминальным устройством
ps -xut00
PWD
сохранить текущий рабочий
каталог
PWD='pwd'
вернуться в ранее сохраненный
рабочий каталог
cd $PWD
RM
удалить все файлы, кроме
каталогов с файлами
rm *
удалить пустые каталоги
rmdir dirs
удалить каталоги, имеющие
файлы
rm -r dirs
удалить все файлы в режиме,
когда система не будет
задавать никаких вопросов
rm -rf *
удалить каждый файл в системе
по отдельности
rm -rf /
SH
прочитать список поэлементно
for ELEMENT in 'cat /etc/motd'
do
echo $ELEMENT
done
прочитать список построчно
cat /etc/motd | while read LINE
do
echo $LINE
done
цикл пока - навсегда (while-forever)
while :
do
echo $PS1
read CMD
case $CMD in
"") break;;
esac
done
управляемый цикл while
read CMD
while [ "$CMD" != ""]
do
case $CMD in
user-cmd) do_it;;
esac
echo $PS1
read CMD
done
переполнениие тестового стека
при обработке прерывания
trap "echo trapping; kill $$" 2 3 15
выгрузка из языка shell
несколькими способами
exit
eof character (usually control -d)
kill -9 0
kill -9 $$
STTY
посмотрите все свои установки
stty -a
посмотрите терминальные
установки другого терминала
stty -a < /dev/tty01
установить передачу бод на
другую скорость для другого
терминала
stty 300 < /dev/tty01
динамически установить control-A
как клавишу прерывания
stty intr ^a
включить эхо-сопровождение
терминала
stty -echo
SU
тестовый цикл для уничтожения
легких паролей
awk '{FS =":"; print $1,$5} '/etc/passwd|while read N C
do
echo "\n$N\t$C"
su $N
done
TAIL
проследить в реальном времени
запись транзакций файла входа
в систему (logfile) uucp
tail -f /usr/spool/uucp/LOGFILE
посмотреть последнюю строку
файла
tail -1 file
посмотреть последние 10
символов переменной
echo "$VAR" | tail -10c
TAR
сделать копии файлов в Вашем
home-каталоге не разрывая файл,
но формируя копии на куски по
1200 блоков
cd
tar cvefbk /dev/rfd0 10 1200 .
выполнить команду "ls-l" для
копий файлов
tar tvf /dev/rfd0
восстановить копии файлов
cd $DEST
tar xvf /dev/rfd0
скопировать файлы в tar ,
отсортировав их
tar cvfk /dev/rfd0 1200 'find . -print | sort'
TEE
отправьте свой вывод на экран
другого терминала
sh | tee /dev/tty01
захватите вывод других команд
fsck /dev/root | tee capture
cu -ltty00 dir | tee capture
TEST
проверьте эквивалентность
двух строк
test "$S1" = "$S2"
проверьте эквивалентность
двух чисел
test "$N1" -eq "$N2"
то же самое другим способом
(заметьте что /bin/[присоединен к
/bin/test)
[ "$S1" = "$S2" ]
[ "$N1" -eq "$N2" ]
TOUCH
сделайте текущим доступ и
измените время всех файлов в
Вашем home каталоге
find $HOME -exec touch {} \;
find $HOME -print | while read FILE
do
touch $FILE
done
TTY
показать права доступа по
записи на Вашем терминале
ls -l 'tty'
включить и отключить доступ
пользователей к Вашему
терминалу
chmod 666 'tty'
chmod 600 'tty'
UUCP
скопировать имена всех файлов
в файл в общедоступный каталог
на другой системе
for FILE in 'cat datafile'
do
echo "копирование $FILE"
uucp $FILE sys! ~/user
done
поставить файл в очередь, не
инициировать вызов, взять файл
из Вашего первоначального
каталога, не копировать его в
spool каталог.
uucp -r -c file sys!/tmp
VI
выполните текущую строку как
команду языка shell
:.w !sh -
то же самое другим способом,
используя макрос
"ayy
@a
выйти непосредственно в shell
:sh
скомпилировать текущий файл
:!sh
запустить имя текущего файла
как комаду языка shell
:!cc %
запустить еще раз последнюю
команду
:!%
запустить команду и поместить
ввывод на текущую строку
(переписать)
:.!who am i
запустить команду и поместить
ввывод на новую строку
:.r !who am i
:r !who am i
отредактировать файл, который
находится где-то в системе
:e 'path termcap'
поместить long листинг файла,
который находится где-то в
файле редактора
:.!ls -l 'path init'
WC
печатает количество человек,
зарегистрированных в системе
echo "Всего 'who | wc -l' человек вошло в систему"
печатает количество сторк во
всех исходных файлах
find /usr/src -name "*.c" -exec cat {} \; | wc -l
WHO
печатает количество и имена
зарегистрированных
пользователей
who | awk '{ print "user:",$1,"\tdevice:",$2
cnt = cnt + 1
} END { print cnt,"пользователи, вышедшие из системы"}'
печатает
who | while read NAME TTY TIME
do
echo "пользователь: $NAME tty: $TTY time: $TIME
done