Основные команды linux

Linux > Основные команды linux
11.12.2014 16:31:25



Статья:

 Основные команды

# ls -lash /home                     # Просмотр содержимого католога
# pwd                                # Путь к текущему каталогу
# su -                               # стать root + его переменные окружения 
# cd /home                           # Переход в другой каталог

# touch index.htm                    # Создать новый файл
# mkdir -p /home/name/www/{tools,i}  # Создать каталог с подкаталогами
# cp www/index.htm .                 # Копируем файл в текущий каталог
# cp -la /dir1 /dir2                 # Архивирование каталога с подкаталогами
# cp -R /home/name /home/name_bak    # Копируем каталог
# cp index.htm{,.bak}                # Копируем файл с новым расширением, быстрый backup
# mv -v /home/name_bak /home/name    # Перемещение/переименование файлов и каталогов
# rm -Rf /home/name/www              # Удаление каталога со всем содержимым
# shred /home/name/www/*             # Удаление с перезаписью случайными числами 25 раз

# which ls                           # Полный путь имени/расположение команды
# whatis ls                          # Очень короткая справка о команде
# whereis grep                       # Путь к исполняемым файлам, исходным файлам и справочному рук-ву
# ldd /bin/grep                      # Список необходимых библиотек для работы команды
# ldconfig -n /path/to/libs/         # Добовляем путь к библиотеке(настройка динамического связывания)

# date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
# date 031713402011                  # Устанавливаем дату: Чтв Мар 17 13:40:00 MSK 2011
# time ls -lash /root                # Время выполнение команды
# cal -3                             # Календарь на 3 месяца
# set | grep $USER                   # Список переменных окружения

# openssl md5 index.htm.bak          # Делаем md5 hash файла

Объединение команд

# cd /home/name; ls -la                  # ; - последовательное выполнение команд
# ls file.txt && echo "DATA" >>file.txt  # && - выполнение команды при условии успешного завершения предыдущих
# ls file1.txt || echo "DATA" >file1.txt # || - выполнение команды при условии, что предыдущая завершилась с ошибкой
# touch $(echo $(date "+%Y-%m-%d").txt)  # $() - использование выходных данных одной команды при вызове другой команды
# ls -la /usr/bin | more                 # | - передача выходных данных одной команды на вход другой команды
# ls > menu.txt                          # > - перенаправление выходных данных в файл
# wc -l < menu.txt                       # < - использование содержимого файла в качестве входных данных
# find / -name .profile 2>&1 |less       # 2>&1 - поток ошибок туда, куда направлен вывод 

stdin  | 0 | поток ввода  | клавиатура
stdout | 1 | поток вывода | терминал
stdin  | 2 | поток ошибок | терминал

Просмотр содержимого файлов

# cat .bashrc; cat index.htm i/index.htm               # вывод содержимого файла\файлов
# less -N /etc/named.conf                              # постраничный вывод текста с нумерацией строк (с прокруткой файла)
# head -t 20 /etc/named.conf                           # вывод первых 20 строк файла
# tail -f -n 100 /var/log/messages                     # вывод последних 100 строк + вывод добавленных строк в реальном времени
# more /etc/named.conf                                 # вывод содержимого файла на экран отдельными страницами
# nano /etc/named.conf                                 # просмотр и релактирование файла    

Версия системы, дистрибутив

# uname -a                           # Версия ядра (kernel version)
# lsb_release -a                     # Информация о дистрибутиве
# cat /etc/redhat-release            # Информация о версии Centos/Redhat
# cat /etc/debian_version            # Информации о версии Debian

# uptime                             # Как долго система работает
# hostname                           # Имя системы (hostname)
# man hier                           # Информация о системных каталогах, справка 
# last reboot                        # История перезагрузок системы

Оборудование определенное ядром

# dmesg                              # Обнаруженные устройства и сообщения выводимые при загрузке
# lsdev                              # информация об установленном оборудовании
# dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 # Читаем BIOS

# cat /proc/cpuinfo                  # информация о CPU 
# cat /proc/meminfo                  # информация о RAM и swap
# watch -n1 'cat /proc/interrupts'   # Просмотр изменений прерываний
# cat /proc/devices                  # Конфигурация устройств
# lspci -tv                          # Смотреть PCI устройства
# lsusb -tv                          # Смотреть USB устройства
# lshal                              # Смотрим список устройств и их свойства
# dmidecode                          # Смотреть DMI/SMBIOS: hardware информация из BIOS

# grep HIGHMEM /boot/config-$(uname -r) # Узнать максимально возможный размер RAM в системе
# grep --color=tty pae /proc/cpuinfo    # если pae-то с ним будет работать xen; vmx(intel),svm(AMD)-для полной виртуализации

Ресурсы RAM и HDD

# free -m                            # Используемая и свободная оперативная память (-m for MB)
# grep MemTotal /proc/meminfo        # Информация о RAM

# df                                 # Показать свободное пространство на дисках и смонтированные устройства
# du -sh *                           # Размер каталога (листинг файлов и подкаталогов)
# du -csh                            # Размер текущей директории
# du -ks * | sort -n -r              # Сортировать по размеру (kbytes)
# ls -lSr                            # Показать файлы с сортировкой по размеру

Статистика

# top                                # Статистика процессов cpu
# htop                               # Текущее состояние системы
# iotop                              # Анализа потребления дисковой полосы
# atop                               # Статистика загрузки cpu, блочных устройств, сетевых интерфейсов
# iftop                              # Наблюдение за трафиком в реальном времени (сеть)
# powertop                           # Показывает время, затраченное на обслуживание процессором
# dnstop                             # Анализатор DNS-трафика на интерфейсе
# iptstate                           # Монитор contrack из iptables, показывает активные трансляции с возможностью их убить
# mpstat 1                           # Статистика загрузки процессора
# vmstat 2                           # статистика использования виртуальной памяти
# iostat 2                           # Статистика I/O (2 s интервал)
# tail -n 500 /var/log/messages      # Последнии 500 kernel/syslog сообщений
# tail /var/log/warn                 # Предупреждения об ошибках, см. syslog.conf

Ограничения shell/script

# ulimit -a                 # Смотрим ограничения
# ulimit -n 10240           # Меняем ограничение на количество открытых файлов, только shell

Ограничения user/process

# cat /etc/security/limits.conf
*   hard    nproc   250              # Ограничения пользовательских процессов
asterisk hard nofile 409600          # Ограничения на открытые файлы приложения

Ограничения на всю систему

# sysctl -a                          # Смотрим системные ограничения
# sysctl fs.file-max                 # Максимальное количество открытых файлов
# sysctl fs.file-max=102400          # Меняем максимальное каличество открытых файлов
# echo "1024 50000" > /proc/sys/net/ipv4/ip_local_port_range  # диапазон портов
# cat /etc/sysctl.conf
fs.file-max=102400                   # Ввод по умолчанию sysctl.conf
# cat /proc/sys/fs/file-nr           # Сколько дескрипторов файлов используется
Отключаем ответы сервера на ping
# sysctl net.ipv4.icmp_echo_ignore_all       # проверяем значение
# sysctl -w net.ipv4.icmp_echo_ignore_all=1  # отключаем ответ на ping
# чтоб сохранялось при перегрузке
# nano /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all=1              # выставляем 1 и сохраняем
<PID> - уникальный номер(идентификатор) процесса
# ps -auxefw                         # Расширенный список всех запущенных процессов
# ps axww | grep cron
  586  ??  Is     0:01.48 /usr/sbin/cron -s
# ps axjf                             # Процессы как дерево процессов 
# ps aux | grep 'ss[h]'               # Найти все ssh pids без grep pid
# pgrep -l sshd                       # Найти PIDs процессов по имени (части имени)
# echo $$                             # PID нашего shell
# fuser -va 22/tcp                    # Процессы использующие порт 22
# pmap PID                            # Карта памяти процесса (поиск утечки памяти), используемые библиотеки
# fuser -va /home                     # Процессы работаюшие с разделом /home

Права

1 --x execute/выполнять       |       Mode 764 = exec/read/write | read/write | read
2 -w- write/писать            |       For:       |--  Owner  --|   |- Group-|   |Oth|
4 r-- read/читать             |
  ugo=a                              u=user, g=group, o=others, a=everyone
  
# chmod [OPTION] MODE[,MODE] FILE    # MODE имеет вид [ugoa]*([-+=]([rwxXst]))
# chmod 640 /var/log/maillog         # Установили log -rw-r-----
# chmod u=rw,g=r,o= /var/log/maillog # Установили log -rw-r-----
# chmod -R o-r /home/*               # Рекурсивно запрещаем чтение всем пользователям в /home/*
# chmod u+s /path/to/prog            # Устанавливаем SUID bit
# find / -perm -u+s -print           # Находим все программы использующие SUID bit
# chown user:group /path/to/file     # Меняем хозяина и группу файла
# chgrp group /path/to/file          # Меняем группу файла
# chmod 640 `find ./ -type f -print` # Меняем права на 640 для всех файлов
# chmod 751 `find ./ -type d -print` # Меняем права на 751 для всех директорий

# umask 0174 /test
# touch /test/foo
# mkdir /test/dir  
# ls -la /test
  drw-----wx 2 root root 512 Sep  1 20:59 dir
  -rw-----w- 1 root root   0 Sep  1 20:59 foo  

Информация о дисках

# hdparm -I /dev/sda                 # Информация о IDE/ATA (Linux)
# fdisk /dev/ad2                     # Работа с таблицей разделов
# smartctl -a /dev/ad2               # Отобразить информацию SMART

Точки монтиования, разделы, использование дисков

# mount | column -t                  # Смонтированные файловые системы
# df                                 # Свободное пространство на дисках
# cat /proc/partitions               # Все зарегетсрированные разделы (Linux)
# du -sh *                           # Список с размерами папок
# du -csh                            # Размер текущей папки (сумма поддиректорий)
# du -ks * | sort -n -r              # Размер в kilobytes с сортировкой
# ls -lSr                            # Показать файлы, большие в конце

Mount/remount

# mount /cdrom                          #если есть в /etc/fstab
/dev/cdrom   /media/cdrom  subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0  #строчка из /etc/fstab
# mount -t auto /dev/cdrom /mnt/cdrom   # монтруем CD-ROM
# mount /dev/hdc -t iso9660 -r /cdrom   # IDE
# mount /dev/scd0 -t iso9660 -r /cdrom  # SCSI CD-ROM
# mount /dev/sdc0 -t ntfs-3g /windows   # SCSI

# mount -o remount,ro /                 # перемонтирование без размонтирования
# mount -n -o remount,rw /              # перемонтировать в режиме чтения|записи

4.6 Увеличиваем SWAP

Иногда нужно увеличить swap, прямо сейчас, на лету
# dd if=/dev/zero of=/swap2gb bs=1024k count=2000
# mkswap /swap2gb                    # создаем место для swap
# swapon /swap2gb                    # запускаем swap. сейчас используется swap
# swapoff /swap2gb                   # отключаем swap
# rm /swap2gb

4.7 Монтируем SMB share

cifs использует ip или DNS имя
# smbclient -U user -I 192.168.1.2 -L //smbshare/    # Смотрим шары
# mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare
# mount -t cifs -o username=winuser,password=winpwd //192.168.1.2/myshare /mnt/share
Если используется mount.cifs, то можно хранить учетные данные в файле /home/user/.smb:
username=winuser
password=winpwd
Монтируем:
# mount -t cifs -o credentials=/home/user/.smb //192.168.1.2/myshare /mnt/smbshare

 Монтируем image (образ)

# mount -t iso9660 -o loop file.iso /mnt                # Монтируем CD-image
# mount -t ext3 -o loop file.img /mnt                   # Монтируем образ с ext3 fs

 Создание и запись ISO образа

Без conv=notrunc содержимое будет меньше объема диска, если данные не занимают весь диск (DVD запишем на CD).
# dd if=/dev/hdc of=/tmp/mycd.iso bs=2048 conv=notrunc
Используем mkisofs для создания CD/DVD образа из файлов в папке. Для переодоления ограничений на имена файлов: -r разрешает Rock Ridge расширения для UNIX истем, -J разрешает Joliet расширения используемые Microsoft ОС. -L разрешает имена согласно ISO9660.
# mkisofs -J -L -r -V TITLE -o imagefile.iso /path/to/dir
Запись:
# cdrecord -scanbus                  # Находим устройство для записи (1,0,0)
# cdrecord dev=1,0,0 imagefile.iso

# cdrecord dev=ATAPI -scanbus        # Можно использовать native ATAPI
Конвертируем Nero .nrg файл в .iso
# dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300  # Nero просто добавляет 300Kb заголовок к нормальному iso

 Монтируем образ (файл как образ)

# dd if=/dev/zero of=/usr/vdisk.img bs=1024k count=1024
# mkfs.ext3 /usr/vdisk.img
# mount -o loop /usr/vdisk.img /mnt
# umount /mnt; rm /usr/vdisk.img                      # Очистили
/dev/zero быстрее urandom, но менее безопасный.
# dd if=/dev/urandom of=/usr/vdisk.img bs=1024k count=1024
# losetup /dev/loop0 /usr/vdisk.img                   # Создали и определили /dev/loop0
# mkfs.ext3 /dev/loop0
# mount /dev/loop0 /mnt
# losetup -a                                          # Проверка использования loops
# umount /mnt
# losetup -d /dev/loop0                               # Удаление
# rm /usr/vdisk.img

 Memdisk

Tmpfs очень быстрая файловая система для IO приложений. Создадим 64 MB раздел, смонтируемый в /memdisk:
# mount -t tmpfs -osize=64m tmpfs /memdisk

Производительность дисков

# time dd if=/dev/ad4s3c of=/dev/null bs=1024k count=1000     # Читаем и пишим 1GB в /home (/dev/ad4s3c)
# time dd if=/dev/zero bs=1024k count=1000 of=/home/1Gb.file
# hdparm -tT /dev/hda      

5.1 Устранение ошибок (+ анализ трафика)

# arping 192.168.1.2        # Ping на канальном уровне (ethernet layer)
# tcptraceroute -f 5 zabrosov.ru  # Используем tcp вместо icmp для трассировки через firewalls
# ping zabrosov.ru          
# traceroute zabrosov.ru    # Маршрут до zabrosov.ru
# netstat -s                # Сетевая статистика для каждого протокола системы
Работа с NIC
# ethtool eth0              # Смотрим свойства nic
# ethtool -s eth0 speed 100 duplex full # Устанавливаем 100Mbit Full duplex
# ethtool -s eth0 autoneg off # Отключаем auto negotiation
# ethtool -p eth1           # Мигнуть светодиодом (если поддерживается)
# ip link show              # Показать все интерфейсы (или ifconfig)
# ip link set eth0 up       # Включить eth0 (или отключить - down)
# ifconfig eth0 up          # Включить eth0 (или отключить - down)
# ip addr show              # Посмотреть все IP (аналог ifconfig)
# ip neigh show             # arp
# arp -a                    # Работа с arp
eth0 из shell
# Вывод списка NIC с сортировой
# ifconfig | sed 's/  / /g' | cut -d" " -f1 | uniq | grep -E "[a-z0-9]+" | sort -r
# Вывод всех IP машины с сортировой
# ifconfig | sed '/.*inet addr:/!d;s///;s/ .*//'|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n

# nano /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
HWADDR=00:C0:26:30:EA:32
IPADDR=192.168.1.2
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
GATEWAY=192.168.1.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes

5.2 Routing

# route -n
# netstat -rn
# ip route
Добавить/удалить маршрут
# route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.1.2
# ip route add 192.168.20.0/24 via 192.168.1.2       # Аналог
# route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0
# route add default gw 192.168.1.2
# ip route add default via 192.168.1.2 dev eth0      # Аналог
# route delete -net 192.168.20.0 netmask 255.255.255.0

5.3 Дополнительный IP

# ifconfig eth0 192.168.50.254 netmask 255.255.255.0       # Первый IP
# ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0     # Второй IP
# ip addr add 192.168.50.254/24 dev eth0                   # Аналог
# ip addr add 192.168.51.254/24 dev eth0 label eth0:1

5.4 Сменить MAC

# ifconfig eth0 down
# ifconfig eth0 hw ether 00:01:02:03:04:05    
Wireless:

5.5 Занятые порты

# netstat -an | grep LISTEN
# lsof -i                  # Просмотр всех соединений
# socklist                 # Список открытых сокетов
# netstat -anp --udp --tcp | grep LISTEN 
# netstat -tup             # Активные соединения
# netstat -tupl            # Список открытых портов системы

5.6 Firewall

# iptables -L -n -v                  # Листинг правила
Open the iptables firewall
# iptables -P INPUT       ACCEPT     # Разрешить все
# iptables -P FORWARD     ACCEPT
# iptables -P OUTPUT      ACCEPT
# iptables -Z                        # Обнулить все счетчики во всех цепочках
# iptables -F                        # Очистить все цепочки
# iptables -X                        # Удалить все цепочки

5.7 Разрешить роутинг

# cat /proc/sys/net/ipv4/ip_forward  # Проверка IP forward 0=off, 1=on
# echo 1 > /proc/sys/net/ipv4/ip_forward

или редактируем /etc/sysctl.conf with:
net.ipv4.ip_forward = 1

5.8 NAT

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE	# NAT
# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT \
--to 192.168.1.44:22                                     # Проброс 20022 порта  на внутренний IP порт ssh
# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT \
--to 192.168.16.254:993-995                              # Проброс портов 993-995
# iptables -L -t nat                                     # Состояние NAT
# netstat-nat -n                                         # смотрим сесси с IPS
Проброс портов можно отменить, заменив в правиле -A на -D.

 DNS

Настройки DNS храняться в /etc/resolve.conf:
nameserver 8.8.8.8
search mydomain.local studdomain.lab
domain mydomain.local

# hostname -d                        # Имя системы ( аналог: dnsdomainname)
dig - утилита для тестирования DNS. В качестве DNS сервера используем свободный google dns с ip: 8.8.8.8
# dig zabrosov.ru
;; ANSWER SECTION:
zabrosov.ru.		600	IN	A	77.221.130.2
;; SERVER: 8.8.8.8#53(8.8.8.8)
Некоторые полезные запросы:
# dig MX zabrosov.ru
# dig @127.0.0.1 NS zabrosov.ru         # Тест локального DNS-сервера (если есть)
# dig @8.8.8.8 NS MX zabrosov.ru        # Запрос к внешнему DNS-сервер
# dig AXFR @ns1.infobox.org zabrosov.ru # Получить зону (zone transfer)
# аналог dig
# host -t MX zabrosov.ru                # Посмотреть MX записи
# host -t NS -T zabrosov.ru             # Получить NS записи через tcp
# host -a zabrosov.ru                   # Вся информция по домену
Имя по IP адресу (in-addr.arpa. , обратная зона). Используется dig, host and nslookup:
# dig -x 77.221.130.2
# host 77.221.130.2
# nslookup 77.221.130.2
Для локального преобразовния имен (в рамках системы) можно использовть файл /etc/hosts:
# cat /etc/hosts
127.0.0.1      myibm	localhost.localdomain	localhost
192.168.1.2    myibm.zabrosov.local	 myibm

 DHCP

Интерфейс используемый по умолчанию - eth0
# dhcpcd -n eth0           # Обновить (не всегда работает)
# dhcpcd -k eth0           # Освободить
Полная информация о аренде:
/var/lib/dhclient/dhclient-eth0.leases

 Анализ трафика

Bmon - консольный монитор загрузки сетевых интерфейсов.

Sniff с tcpdump

# tcpdump -nl -i eth0 not port ssh and src \(192.168.1.10 or 192.168.1.15\)
# tcpdump -n -i eth0 net 192.168.1.15             # трафик с/на IP
# tcpdump -n -i eth0 net 192.168.1.0/24           # трафик с/в сеть
# tcpdump -l > dump && tail -f dump               # Вывод с записью в файл
# tcpdump -i eth0 -w traffic.eth0                 # Информация о трафике записывается в бинарный файл traffic.eth0
# tcpdump -i eth0 -s 0 -w traffic.eth0            # Запись + загрузка в бинарник
# tcpdump -r traffic.eth0                         # Читаем из файла
# tcpdump port 80                                 # Весь трафик на 80 порт и ответы
# tcpdump host google.com                         # Весь с/на google.com
# tcpdump -i eth0 -X port \(110 or 143\)          # Проверка pop и imap на безопасность
# tcpdump -n -i eth0 icmp                         # Ловим pings
# tcpdump -i eth0 -s 0 -A port 80 | grep GET      # -s 0 весь пакет, -A для ASCII
Важные опции:
-A Отображает каждый пакет в открытом виде (текст), без заголовка
-X Показывает пакеты в hex и ASCII
-l Вывод в буффер
-D Печать всех доступных интерфейсов (# tcpdump -D)

Nmap

nmap - сканер портов с возможностью определения OS.
# nmap -sP 192.168.1.0/24        # Узнать занятые IP в сети 1.0/24 (IP, MAC, hostname)
# nmap -sS -sV -O cb.vu          # Скрытое SYN сканирование с определением типа и версии ОС

# nmap -sX -p 22 192.168.10.10-250 -oN /data/host.txt  # Сканирование машин с ip от 10 по 250 \
                                                       # на порт ssh с записью в файл
# grep  192.168.10 /data/host.txt > /data/host         # Пишем строки с ip адресами в файл
# sed 's/Interesting ports on //g' /data/host | sed 's/://g' |sed 'w /data/host.txt' 
# Итог: получаем файл с IP машин, у который открыт ssh порт 
 pdsh -w root@192.168.10.[10-100] "uptime" | sort -n   # параллельная работа с несколькими машинами

tar - архивирование файлов и директорий. Сам по себе tar, это не сжатый архив, сжатые архивы имеют расширения .tgz или .tar.gz (gzip) или .tbz (bzip2).

Создание архива tar:

# cd /
# tar -cf home.tar home/        # Создать архив, поместив в него директорию /home ( ключ -c, для создания )
# tar -czf home.tgz home/       # То-же, но с gzip компрессией
# tar -cjf home.tbz home/       # То-же, но с bzip2 компрессией

# Рекомендуется использовть относительные пути, чтоб можно было распаковать в любое место
# tar -C /usr -czf local.tgz local/etc local/www # Cоздаlbv архив, содержащий директории /usr/local/etc,
                                                 # /usr/local/www, директория local/ должна быть началом дерева
# tar -C /usr -xzf local.tgz    # Распаковать архив директорию local в дерево /usr
# cd /usr; tar -xzf local.tgz   # То-же, что выше

Распаковать архив tar:

# tar -tzf home.tgz             # Просмотр содержимого архива без его распаковки (листинг)
# tar -xf home.tar              # Распаковать архив в текущую папку(ключ "x" для распаковки)
# tar -xzf home.tgz             # То-же для архива с zip компрессией
# tar -xjf home.tbz             # То-же для архива с bzip2 компрессией
# tar -xjf home.tbz home/zabrosov.ru/file.txt    # Распаковать один файл

Полезно:

# tar c dir/ | gzip | ssh user@remote 'dd of=dir.tgz' # Создать архив, содержащий директорию dir/ и сохранить удаленно
# tar cvf - `find . -print` > backup.tar              # Создать архив с текущей директорией
# tar -cf - -C /etc . | tar xpf - -C /backup/etc      # Копировать директории
# tar -cf - -C /etc . | ssh user@remote tar xpf - -C /backup/etc      # Удаленное копирование
# tar -czf home.tgz --exclude '*.o' --exclude 'tmp/' home/            # Создать архив с сжатием, исключив '*.o', tmp/
Regexp - регулярные выражения
[\^$.|?*+()           # Специальные символы, остальные символы означают самих себя
\                     # Экранирует специальные символы
*                     # Повтор 0 или 1 раз
.                     # Любой символ, за исключением символа новой строки
.*                    # Совпадает 0 или более символов
^                     # Начало строки
$                     # Конец строки
.$                    # Совпадает с одним любым символ в конце строки
^ $                   # Совпадает со строкой, состоящей из одного пробела
[^A-Z]                # Любые символы, не входящие в диапазон от А до Z

11.7 Доп. команды

# sort -t. -k1,1n -k2,2n -k3,3n -k4,4n         # Отсортировать IPv4 ip адреса
# echo 'Test' | tr '[:lower:]' '[:upper:]'     # Смена регистра символов
# echo foo.bar | cut -d . -f 1                 # Вернет foo
# PID=$(ps | grep script.sh | grep bin | awk '{print $1}')    # PID запущенного скрипта
# PID=$(ps axww | grep [p]ing | awk '{print $1}')             # PID процесса ping
# IP=$(ifconfig $INTERFACE | sed '/.*inet addr:/!d;s///;s/ .*//') 
# cat /etc/master.passwd | grep -v root | grep -v \*: | awk -F":" \ # Создание файла паролей http passwd
# '{ printf("%s:%s\n", $1, $2) }' > /usr/local/etc/apache2/passwd

# testuser=$(cat /usr/local/etc/apache2/passwd | grep -v \    # Проверить пользователя в passwd
# root | grep -v \*: | awk -F":" '{ printf("%s\n", $1) }' | grep ^user$)
# :(){ :|:& };:                                # bash fork bomb :). Машина зависнет!
# tail +2 file > file2                         # Удалить первую строку из файла

Изменить расширение для кучи файлов

# ls *.cxx | awk -F. '{print "mv "$0" "$1".cpp"}' | sh # .cxx в .cpp
# ls *.c | sed "s/.*/cp & &.$(date "+%Y%m%d")/" | sh   # Копировать файлы *.c в *.c.20080401
# rename .cxx .cpp *.cxx                               # Переименовать все файлы .cxx в cpp
# for i in *.cxx; do mv $i ${i%%.cxx}.cpp; done        # Встроенными средствами