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
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Linux Kernel 2.6...5170 
 Trees...940 
 Максвелл 3...871 
 Go Web ...823 
 William Gropp...803 
 Ethreal 3...787 
 Gary V.Vaughan-> Libtool...773 
 Ethreal 4...771 
 Rodriguez 6...766 
 Ext4 FS...755 
 Clickhouse...755 
 Steve Pate 1...754 
 Ethreal 1...742 
 Secure Programming for Li...732 
 C++ Patterns 3...716 
 Ulrich Drepper...698 
 Assembler...695 
 DevFS...662 
 Стивенс 9...650 
 MySQL & PosgreSQL...632 
 
  01.01.2024 : 3621733 посещений 

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
 
 
Оставьте свой комментарий !

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

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