Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Languages
 С
 GNU С Library 
 Qt 
 STL 
 Threads 
 C++ 
 Samples 
 stanford.edu 
 ANSI C
 Libs
 LD
 Socket
 Pusher
 Pipes
 Encryption
 Plugin
 Inter-Process
 Errors
 Deep C Secrets
 C + UNIX
 Linked Lists / Trees
 Asm
 Perl
 Python
 Shell
 Erlang
 Go
 Rust
NEWS
Последние статьи :
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  JFS 10.06   
  B-trees 01.06   
 
TOP 20
 Go Web ...604 
 Trees...344 
 Ethreal 4...279 
 Python...256 
 2.0-> Linux IP Networking...252 
 Secure Programming for Li...245 
 Steve Pate 3...242 
 Mike Perry...223 
 Rubni-Corbet -> Глав...212 
 TCP 3...211 
 Stewens -> IPC 7...202 
 Rubni-Corbet -> Глав...200 
 TCP 2...197 
 Rodriguez 6...194 
 Rubni-Corbet -> Глав...193 
 Stevens-> Глава 25...189 
 C++ Templates 4...186 
 Стивенс 9...181 
 William Gropp...180 
 Rubni-Corbet -> Глав...180 
 
  01.11.2017 : 2330974 посещений 

iakovlev.org

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

grep

grep выводит строки из файла или потока , которые соответствуют шаблону. Например , если нужно распечатать строку из файла /etc/passwd , в которую входит root, используйте команду:
 	grep root /etc/passwd
Команда очень удобна при оперировании с множеством файлов. Например, если нужно найти файлы в каталоге /etc , в которые входит подстрока root, наберите :
 	grep root /etc/*
2 важнейших опции grep : -i (регистр) и -v (выдает обратный результат - т.е. печатает строки , которые не соответствуют шаблону). Существует 2-й вариант команды - egrep. grep понимает шаблоны , называемые регулярными выражениями . Регулярные выражения - более мощное средство, чем обычные шаблоны. Необходимо помнить о 2-х вещах
 	.*  - соответствует любому количеству символов
 	.   - соответсвует 1-му произвольному символу 
grep(1) manual page включает детализированное описание регулярных выражений.
more и less
Иногда вывод команды grep может быть слишком велик . Для текстовой навигации используются команды more и less. Для просмотра больших файлов используйте команду more . При ее выполнении вы увидите содержание большого файла, разбитого на экраны . Для навигации используйте клавиши пробел и q . Команда less аналогична more, но имеет большее количество опций . Вывод команды grep можно послать на ввод другой команды , например:
 	grep ie /usr/dict/words | less

pwd

Команда pwd выводит текущую рабочую директорию.

diff

diff показывает разницу между 2 файлами:
 	diff file1 file2
Из опций может пригодиться -c.

file

Команда file выводит формат файлов:
 	file file

find

Находит файл :
 	find dir -name file -print
При использовании в этой команде wildcard-символов их надо квотировать.

В shell возможны 2 типа переменных :
     1. shell variables
     2. environment variables
Отличие в том , что при выполнении в shell каких-то внешних программ этим внешним программам могут быть переданы environment variables. Пользователь может создавать переменные как первого типа , так и второго . Отличие в том , что во втором случае это делается в 2 приема , например
 	my_env_var=blablabla
 	export my_env_var


Следующая таблица выводит набор специальных символов . Особенность их в том , что они могут использоваться различными языками , например Perl .
Спец-символы

Символ

Наименование

Где используется

*

star

Регулярные выражения

.

dot

Текущая директория

!

bang

Логическое не ; история команд

|

pipe

pipes

/

(forward) slash

Разделитель каталогов , поисковая команда

\

backslash

Литерал , макрос (не путать с директорией)

$

dollar

Обозначение переменной , конец строки

'

tick, (single) quote

Литер-строка

`

backtick, backquote

Замена

"

double quote

Semi-literal строка

^

caret

Отрицание, начало строки

~

tilde, squiggle

Отрицание , ярлык каталога

#

hash, sharp, pound

Комментарий , препроцессор

[]

(square) brackets

Диапазон

{}

(curly) braces

Логический блок

_

underscore

Замена пробела



Если вы хотите вывести результат команды не на экран , а в файл , наберите :
 	команда > file 
Если файл уже существует , он будет перезаписан . Если вы хотите не перезаписывать файл , а добавить вывод в конец существующего , наберите
 	команда >> file 
Для того , чтобы послать вывод на ввод другой команды , нужно использовать пайпы :
 	head /proc/cpuinfo
 	head /proc/cpuinfo | tr a-z A-Z	
Число пайпов может быть неограниченным. Если выполнить некорректную операцию , например просмотр несуществующей директории :
 	ls /fffffffff >f 
то увидите сообщение об ошибке :
    ls: /fffffffff: No such file or directory
Для того , чтобы послать в файл и ошибку тоже , наберите :
 		ls /fffffffff >f 2>&1
Устройства и процессы в линуксе представлены в форме файлов . Рассмотрим команду :
 	echo blah blah > /dev/null  
Поскольку вывод посылается на /dev/null , то ядро просто его проигнорирует . Для вывода списка устройств наберите команду
 	ls -l
Утилита dd используется для конвертации и копирования . Она копирует данные поблочно фиксированного размера :
 	dd if=/dev/zero of=new_file bs=1024 count=1
 Здесь копируются данные из устройства /dev/zero в файл .
 Обозначения для дисков :  /dev/hd*
 Терминалы: /dev/tty*, /dev/pts/*, /dev/tty
 /dev/tty1 - первая виртуальная консоль.
 /dev/pts/0 - первый псевдо-терминал
 Порты: /dev/ttyS*
 Параллельные порты: /dev/lp0, /dev/lp1
 Аудио:  /dev/dsp, /dev/audio, /dev/mixer, /dev/snd/*
Для создания устройства нужно использовать команду mknod :
 	mknod /dev/hda2 b 3 2
Здесь b - блочное устройство , 3 и 2 - номера. Для создания группы устройств нужно использовать команду MAKEDEV.

Init

Для определения уровня привилегий - runlevels - нужно открыть файл /etc/inittab и найти строку типа :
 	id:5:initdefault:
Здесь же можо найти другую строку
 	1:2345:respawn:/sbin/mingetty tty1
которая инициализирует login prompts. Перед тем как пользователь залогинивается , программа init запускает системные сервисы
 	l5:5:wait:/etc/rc.d/rc 5
В зависимости от уровня привилегий , в каталоге rc.d существуют подкаталоги типа
 	/etc/rc.d/rc5.d
В этих каталогах лежат программы , которые запускаются командами типа
 	S10sysklogd start
 	S12kerneld start
Символ S в начале команды говорит о том , что она запускается в start mode . Символ K обозначает "kill". Цифра после этого указывает на порядковый номер команды . Как правило , эти программы - симлинки и представляют из себя скрипты , которые запускают другие уже бинарные программы . Сами скрипты лежат в /etc или /etc/rc.d . Вместо удаления таких симлинков их надо переименовывать , добавляя спереди символ _ . Программа init имеет ID=1 . Если нужно переключить runlevel , осторожно используйте команду
 	telinit 3
Для того , чтобы заставить init по новой прочитать файл inittab , можно запустить команду :
 	telinit q
Программа также контролирует shuts down и перезагрузку , например :
 	shutdown -h now
 или 
    reboot -r
Выполнить перезагрузку через 10 минут :
 	shutdown -r +10

System logging

Большинство системных команд ведет системный лог . В основном он находится в каталогге /var/log . Сообщения отличаются друг от друга приоритетом :
 	debug,info,notice,warning,err,crit,alert,emerg
Настраивается сислог в syslog.conf. Специальный демон klogd перехватывает сообщения от ядра и записывает их в лог . Можно настроить вывод сообщений ядра в отдельный файл - для этого в syslog.conf можно прописать :
 kern.*                   /var/log/kern.log
Если вы хотите что-то записать в лог ручками , выполните типа :
 	logger -p daemon.info что-то такое произошло

Cron

Крон выполняет программы с регулярной частотой . Например , он выполняет ротацию логов . Такие программы называются джоб-ами . Обычно правила прописываются в файле crontab . Например , для выполнения ежедневной процедуры в 9:15 :
 	15 09 * * * /home/juser/bin/spmake
Первые 5 обязательных полей идут в следующем формате :
 	минуты
 	часы
 	дни
 	месяцы
 	дни недели
Если вы хотите , чтобы эта команда выполнялась только 2 раза в месяц - 5 и 14-го числа :
 	15 09 5,14 * * /home/juser/bin/spmake
Если команда вызовет ошибку , крон ее отправит вам письмом . Ошибку можно перенаправить в /dev/null . Для сохранения конфигурационных изменений можно запустить :
          crontab file

Процессы

Команда ps выводит список процессов . Команда top показывает наиболее активные процессы на данный момент . Она имеет опции :
 	М - сортировка по памяти
 	Т - сортировка по использованию ЦПУ
 	u - показывать только твои процессы
Если нужно узнать , как та или иная команда использует процессор , можно набрать :
 	time ls
Последует примерно следующий вывод :
 0.05user 0.09system 0:00.44elapsed 31%CPU (0avgtext+0avgdata 0maxresident)k
 0inputs+0outputs (125major+51minor)pagefaults 0swaps
Команда lsof выдает список открытых файлов и процессов , которые их используют . lsof может просматривать сокеты , динамические библиотеки , пайпы . Обычно вывод команды lsof передается другой команде типа less , которая производит поиск . Следующая команда выведет лишь те файлы , которые лежат в /usr :
 	lsof /usr
Вывести файлы только для данного процесса
 	lsof -p pid
Команды strace и ltrace выводят информацию о том , что делают программы при своем запуске , например :
 	strace cat /dev/null

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

В системе есть 2 важнейших характеристики - load average и своппинг . load average - это возможное число процессов , готовых к выполнению в данный момент . Если запустить команду uptime , можно получить :
 	... up 91 days, ... load average: 0.08, 0.03, 0.01
Цифры указывают на занятость процессора . Чем меньше цифры , тем лучше . Цифра может быть 1 , 2 и выше , в зависимости от занятости . Высокая цифра может быть результатом thrashing - своп-пирования процессов на диск при недостатке памяти . Команда free при этом может показать недостаток памяти . Когда системе начинает не хватать памяти , возникает page fault . Команда vmstat может дать дополнительную информацию о свопе , цпу и других параметрах , ее можно запустить с числовым параметром , означающим частоту повторного запуска с интервалом в секундах .

sudo

В линуксе утилита sudo позволяет обычным пользователям выполнять команды с рутовыми правами . Для того , чтобы пользователю дать права рута , нужно отредактировать /etc/sudoers . Например , чтобы пользователям user1 , user2 дать полные админские права , можно записать :
 	User_Alias ADMINS = user1 , user2
 	ADMINS ALL = NOPASSWD: ALL
 	root   ALL=(ALL) ALL
При этом программа , выполняемая под sudo , будет иметь более одного user id :
 	essective id
 	real id
 	saved id
 
 
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье