Справочник сc для unix список функций


Содержание

Часто используемые unix команды

Команды которые должны быть в голове, а если Вы новичок, то эти команды Вам обязательно пригодятся.

Файловые команды

ls – список файлов и каталогов в текущей директории

ls -al – форматированный список со скрытыми каталогами и файлами

чтобы посмотреть список файлов и их дату модификации:

find . -maxdepth 1 -printf «%T@ %Tc %p\n» | sort -n

  • %Tk: File’s last modification time in the format specified by k.
  • @: seconds since Jan. 1, 1970, 00:00 GMT, with fractional part.
  • c: locale’s date and time (Sat Nov 04 12:02:33 EST 1989).
  • %p: File’s name.

отсортировать по Change:

cd /dir – перейти в директорию /dir

cd – сменить на домашний каталог, аналог: cd

pwd – показать текущий каталог

mkdir dir – создать каталог dir

показать разницу файлов в указанных директория:

diff -r dir1 dir2 — покажет файлы существующие только в dir1 and и только существующие в dir2
diff -r dir1 dir2 | grep dir1 — покажет файлы существующие только в dir1
diff -r dir1 dir2 | grep dir1 | awk ‘‘ > difference1.txt

echo > /dir/file — пресечь файл до нулевой длинны

rm file – удалить file

rm -r dir – удалить каталог dir

rm -f file – удалить форсированно file

rm -rf dir – удалить форсированно каталог dir *

cp file1 file2 – скопировать file1 в file2

cp -r dir1 dir2 – скопировать dir1 в dir2; создаст каталог dir2, если он не существует

примеры:

скопировать файл: cp -rp /dir/ file /to/dir/

скопировать директорию dir целиком: cp -rp / dir /to/dir/

скопировать только содержимое директории dir : cp -rp / dir / /to/dir/

mv file1 file2 – переименовать или переместить file1 в file2. если file2 существующий каталог – переместить file1 в каталог file2

ln -s file link – создать символическую ссылку link к файлу file

touch file – создать file

cat > file – направить стандартный ввод в file

more file – вывести содержимое file

head file – вывести первые 10 строк file

tail file – вывести последние 10 строк file (просмотр последних записей в лог-файл: tail -f /var/log/maillog)

tail -f file – вывести содержимое file по мере роста, начинает с последних 10 строк

sed — потоковый текстовый редактор, который может не только удалять строки, но и менять значения в них:

примеры:

простая замена: sed -e ‘s|это|на это|g’ /в/файле.txt > /записать/в/файл.txt

замена с экранированем: /usr/bin/sed -e «s|old\[‘SYSTEM’\]|new|g» /input.txt > /output.txt

Несколько замен объединены в одном файле subst.sed: sed -f subst.sed inputFileName > outputFileName

содержание файла subst.sed приблизительно может быть таким:

В свою очередь для замены в множестве файлов советую использовать такой баш-скрипт:

for file in $(find . -type f -name ‘*.php’)
do
sed -f /usr/home/replace.txt $file > tempfile
mv tempfile $file
echo «Modified: » $file
done

а запускать его так:
cd /usr/dir
/bin/bash /usr/dir/replace

find — утилита поиска файлов

примеры:

нахождение php-файлов в которые внесены изменения:

c расширением php в прошедшие 7 дней (от текущего дня): find /dir/ -type f -mtime -7 -name ‘*.php’ -print

измененные файлы и директории за последние 10 секунд: find /dir/ -cmin +1 -cmin -10

измененные между 2500 и 2800 минутами тому назад: find -cmin +2500 -cmin -2800

c расширением php между 15 и 17 днями тому назад (от текущего дня): find /dir/ -type f -mtime +15 -mtime -17 -name ‘*.php’ -print

найти и удалить все файлы в директории, кроме файла file.tgz: find /dir/ ! -name ‘file.tgz’ -delete

найти и удалить все файлы в директории, кроме файлов file1.txt и file2.txt: find /dir/ -type f ! -name ‘file1.txt’ ! -name ‘file2.txt’ -delete

узнать количество файлов в директории:

  • find /dir/ -type f | wc -l
  • ls /dir/ | wc -l

найти и удалить директории в глубине уровня 3, относительно указанной find /dir/name/path/ -mindepth 3 -maxdepth 3 -type d | xargs rm -rf

xargs — выполнение любой команды используя результаты предыдущей команды

пример в котором находится директория и копируется:

ls -Art /var/www/builds/ | grep myFolder- | tail -n 1 | xargs -I<> cp -r ‘/var/www/builds/’<> /var/www/builds/myFolderClone

пример удаления найденных директорий:

ls /my/dir/ | grep folder-name | xargs -I<> rm -rf ‘/my/dir/<>‘

Управление процессами

ps – вывести ваши текущие активные процессы (примеры: ps ax uf | more или ps ax -u | more)

top – показать все запущенные процессы

kill pid – убить процесс с id pid (kill -s 9 SID — чтобы наверняка)

killall proc – убить все процессы с именем proc *

bg – список остановленных и фоновых задач; продолжить выполнение остановленной задачи в фоне

fg – выносит на передний план последние задачи

fg n – вынести задачу n на передний план

kill -STOP 7727 – поставить на паузу процесс 7727. The eyes will stop moving when they are paused.

kill -CONT 7727 – снять с паузы процесс 7727

Права доступа на файлы

chmod octal file – сменить права file на octal, раздельно для пользователя, группы и для всех добавлением:

  • 4 – чтение (r)
  • 2 – запись (w)
  • 1 – исполнение (x)

chmod 777 – чтение, запись, исполнение для всех
chmod 755 – rwx для владельца, rx для группы и остальных.

посмотреть octal файла можно так: stat -c «%a» /path/file

примеры:

изменяем владельца и группу для директории: chown R yapro:www /usr/home/dir

изменяем владельца и группу всем дочерним директориям и файлам: chown -v -R yapro:www /usr/home/dir/

изменение прав доступа к файлам и папкам, рекурсивно: chmod -R 775 /home/dir/

использование вместе с командой поиска:

выставляем права директориям: find /home/dir/ -type d -exec chmod 775 <> \;

выставляем права php-файлам: find /home/dir/ -type f -name ‘*.php’ -exec chmod 644 <> \;

Дополнительные опции: man chmod.

SSH

ssh user@host – подключится к host как user

ssh -p port user@host – подключится к host на порт port как user

ssh-copy-id user@host – добавить ваш ключ на host для user чтобы включить логин без пароля и по ключам

Поиск

locate file – найти все файлы с именем file

grep pattern files – искать pattern в files

grep -r pattern dir – искать рекурсивно pattern в dir
например найти в текущей директории и вывести пути к файлам: grep -r -l mytext ./*

command | grep pattern – искать pattern в выводе command

примеры:

grep -rl ‘text’ /dir/ — рекурсивный поиск строки во всех файлах директории

grep -rl —include=»*.php» «my text» /dir/ — поиск только по файлам с расширением .php

grep -rl ‘text’ /path/ | grep -v ‘\.svn’ — поиск строки в файлах, расширение которых не заканчивается на .svn

grep pattern file.txt —поиск pattern в файле file.txt, с выводом полностью совпавшей строкой
grep -o pattern file.txt —поиск pattern в файле file.txt и вывод только совпавшего куска строки
grep -i pattern file.txt —игнорирование регистра при поиске
grep -bn pattern file.txt —показать строку (-n) и столбец (-b), где был найден pattern
grep -v pattern file.txt —инверсия поиска (найдет все строки, которые не совпадают с шаблоном pattern)
grep -A 3 pattern file.txt —вывод дополнительных трех строк, после совпавшей
grep -B 3 pattern file.txt —вывод дополнительных трех строк, перед совпавшей
grep -C 3 pattern file.txt —вывод три дополнительные строки перед и после совпавшей
grep -r pattern $HOME —рекурсивный поиск по директории $HOME и всем вложенным
grep -c pattern file.txt —подсчет совпадений
grep -L pattern *.txt —вывести список txt-файлов, которые не содержат pattern
grep -l pattern *.txt —вывести список txt-файлов, которые содержат pattern
grep -w pattern file.txt —совпадение только с полным словом pattern
grep -f patterns.txt file.txt —поиск по нескольким pattern из файла patterns.txt, шаблоны разделяются новой строкой
grep -I pattern file.txt —игнорирование бинарных файлов
grep -v -f file2 file1 > file3 —вывод строк, которые есть в file1 и нет в file2
grep -in -e ‘python’ `find -type f` —рекурсивный поиск файлов, содержащих слово python с выводом номера строки и совпадений
grep -inc -e ‘test’ `find -type f` | grep -v :0 —рекурсивный поиск файлов, содержащих слово python с выводом количества совпадений
grep . *.py —вывод содержимого всех py-файлов, предваряя каждую строку именем файла
grep «Http404» apps/**/*.py —рекурсивный поиск упоминаний Http404 в директории apps в py-файлах
tail -n12345 /var/log/apache2/other_vhosts_access.log | grep -v » 200 » | grep -v » 304 » — посмотреть неудачные ответы на запросы (посмотрите так же др. классные примеры по работе с логами apache)

Системная информация

date – вывести текущую дату и время ( синтаксис: yy]mm]dd]HH]MM[.ss] )

пример установки времени на сервере (секунды вводить не обязательно):

date 1230100509.45 # в Linux и Solaris; или
date 0912301005.45 # в FreeBSD

cal – вывести календарь на текущий месяц

uptime – показать текущий аптайм

w – показать пользователей онлайн

whoami – имя, под которым вы залогинены

finger user – показать информацию о user

uname -a – показать информацию о ядре

cat /proc/version — более подробно

file /sbin/init — узнать разрядность ОС (или так: getconf LONG_BIT)

cat /etc/issue — реальное имя OC или на чем базируется данная OC

cat /proc/cpuinfo – информация ЦПУ

cat /proc/meminfo – информация о памяти

df – показать инф. о использовании дисков

du – вывести “вес” текущей директории

примеры:

вес указанной директории: du -shc /dir
вес директории указанной директории : du -shc /dir/*
размеры всех всех дочерних директории и файлов: du -hc /dir
размеры всех директории (включая скрытые) в текущей директории: du -sch .[!.]* * |sort -h

free – использование памяти и swap

whereis app – возможное расположение программы app

which app – какая app будет запущена по умолчанию

Архивация

tar cf file.tar dir – создать tar-архив с именем file.tar содержащий files

tar xf file.tar – распаковать file.tar

tar czf file.tar.gz dir – создать архив tar с сжатием Gzip

/bin/tar -czf archive.tar.gz dir dir2/image.gif — запаковать сразу из двух мест

tar xzf file.tar.gz – распаковать tar с Gzip

tar cjf file.tar.bz2 – создать архив tar с сжатием Bzip2

tar xjf file.tar.bz2 – распаковать tar с Bzip2

gzip file – сжать file и переименовать в file.gz

gzip -d file.gz – разжать file.gz в file

примеры:

распаковываем zip-архив: unzip /home/file.zip -d /home/to/dir

создание tar-архива: tar -cz -f «file.tgz» «/home/dir/»

распаковка tar-архива: tar -xz —directory=»/usr/home/dir/» -f «file.tgz»

Жесткий диск

измерить скорость жесткого диска: dd if=/dev/zero of=testfile bs=64k count=16k conv=fdatasync

Сеть

ping host – пропинговать host и вывести результат

whois domain – получить информацию whois для domain

dig domain – получить DNS информацию domain

dig -x host – реверсивно искать host

netstat — показать содержимое различных структур данных, связанных с сетью, например проверим открытый порт 9123 и какая программа его открыла:

telnet — богатая утилита, но обычно я ей проверяю открыт ли порт, например:

Как видите, подключение установлено, а чтобы выйти (прервать подключение) нажмите одновременно две клавиши Ctrl + ] затем введите quit и нажмите клавишу Enter.

например:

или посмотрим открытые порты:

sudo lsof -i
sudo netstat -lptu
sudo netstat -tulpn

wget file – скачать file

wget -c file – продолжить остановленную закачку

примеры:

скачивание файла с фтп-сервера: ftp http://site.ru/file.tgz

скачивание файла по http: wget http://site.ru/file.tgz

Почта

отправить содержимое файла на почту:

cat /dir/file | mail -s «my config» user@site.ru

отправить приатаченный файл на почту:

mail -a /dir/file -s «my config» user@site.ru

и программа mail даст возможность ввести сообщение, написали — нажимайте Ctrl+D и письмо отправится.

MySQL

mysqlcheck -u root -pPWD DB_NAME TABLE_NAME -r — починить таблицу

mysqlcheck -u root -pPWD DB_NAME TABLE_NAME -o — оптимизировать таблицу

Клавиатурные сочетания

Ctrl+C – завершить текущую команду

Ctrl+Z – остановить текущую команду, продолжть с fg на переднем плане или bg в фоне

Ctrl+D – разлогиниться, тоже самое, что и exit

Ctrl+W – удалить одно слово в текущей строке

Ctrl+U – удалить строку

!! – повторить последнюю команду

man command – показать мануал для утилиты по имени command

Полный список UNIX-команд можно найти на Википедии

p.s. чтобы работать с командами было веселей (удобней), советую разукрасить консоль:

иногда, вместо файла .bashrc используется файл .bash_profile

10.18 Краткий справочник по командам UNIX

Семенов Ю.А. (ИТЭФ-МФТИ)
Yu. Semenov (ITEP-MIPT)

Номер раздела Название раздела Объем в страницах Объем в кбайт
10.18.1 Сервер Apache и сетевая безопасность в Red Hat 15 64
Итого

Первая версия UNIX была создана в 1971 году, в 1979 году была подготовлена 7-я редакция (Bourne Shell и компилятор С, разработанная Керниганом и Ритчи; тогда же фирма Microsoft купила права и разработала свою версию для РС — XENIX). Первая версия BSD (Беркли) была подготовлена в 1978 году. В 1981 году закончена версия, поддерживающая стек протоколов TCP/IP (4.2BSD). В 1990 году в UNIX была встроена система NFS. Несколько лет назад в университете Хельсинки (Линусом Торвальдсом) была разработана версия UNIX, известная под названием LINUX.

UNIX имеет двухуровневую структуру: ядро, где сконцентрированы базовые услуги и оболочка, куда входят редакторы, интерпретаторы, например СС, а также lp, routed, inetd, init и т.д.

Код UNIX написан на Си (на 30% больше по объему и на 20% ниже по производительности, чем версия на ассемблере). Система открытая, рассчитанная на многозадачность и большое число пользователей.

Интерфейс системных вызовов предоставляет набор услуг ядра и определяет формат запросов. Ядро состоит из трех частей:

  1. Файловая система
  2. Система управления процессами и памятью
  3. Система ввода/вывода.

Файловая система обеспечивает интерфейс доступа к данным на дисковых накопителях и в периферийных устройствах ввода/вывода. Одни и те же функции open(), read(0, write() могут использоваться при чтении/записи на диске и при выводе данных на принтер или терминал. Файловая система управляет правами доступа и привилегиями. Она обеспечивает перенаправление запросов, адресованных периферийным устройствам.


Система управления процессами ЭВМ, причем их число обычно превышает число ЦПУ. Специальной задачей ядра является планирование выполнением процессов (scheduler). Сюда входит управление ресурсами системы (временем ЦПУ, дисковым пространством, распределением памяти и т.д.). Данная система занимается созданием и удалением процессов, синхронизацией их работы и взаимодействием процессов (например, обменом данными).

Система ввода/вывода обслуживает запросы файловой системы и системы управления процессами для доступа к периферийным устройствам (дискам, лентам, печати, терминалам). Эта система организует взаимодействие с драйверами этих устройств.

Файловая система UNIX представляет собой древовидную структуру. Каждый файл имеет имя, которое определяет его место на дереве файловой системы. Корнем этой системы является корневой каталог с именем /.

В этом каталоге обычно содержатся каталоги:

/bin Каталог наиболее популярных системных команд и утилит.
/dev Каталог файлов для периферийных устройств, например дисковых накопителей (/dev/cdrom, /dev/mem, /dev/null или /dev/ttyp10).
/etc Здесь находятся конфигурационные файлы и утилиты администрирования, среди них скрипты инициализации системы.
/lib Каталог библиотечных файлов языка Си и других языков.
/lost+found Каталог “потерянных” файлов. Ошибки при неправильном выключении ЭВМ могут привести к появлению безымянных файлов (содержимое корректно, но нет ссылок на этот файл ни в одном из каталогов).
/mnt Каталог для установления временных связей (монтирования) физических файловых систем с корневой системой. Обычно каталог пуст.
/home Служит для размещения каталогов пользователей (в прежних версиях для этого служил каталог /usr.
/var Предназначен для размещения сервисных подкаталогов, например, электронной почты (/usr/spool), утилит UNIX (/usr/bin), программ, исполняемых на данной ЭВМ (/usr/local), файлов заголовков (/usr/include), системы справочника (/usr/man).
/tmp Служит для записи временных файлов.

Полные имена остальных файлов содержат путь — список каталогов, размещенных между / и данным файлом. По этой причине полное имя любого файла начинается с символа / (не содержит в отличие от Windows имени диска (например, CD), другого внешнего устройства или удаленной ЭВМ).

UNIX, тем не менее, не предполагает наличия лишь одной файловой системы. Число таких файловых систем в этой ОС не лимитировано, они могут располагаться на одном дисковом накопителе, на разных устройствах или даже на разных ЭВМ.

Каждый файл имеет сопряженные с ним метаданные, записанные в индексных дескрипторах — inode . Имя файла является указателем на его метаданные (метаданные не содержат указателя на имя файла). Существует 6 типов файлов:

  1. Обычный файл (regular)
  2. Каталог (directory)
  3. Файл внешнего устройства
  4. Канал с именем (FIFO)
  5. Связь (link)
  6. socket

Для установления связи можно установить соответствие: link file1 file2; при этом устанавливается связь file2 к существующему файлу file1.

Обычный файл является наиболее распространенным типом. Для операционной системы такой файл представляется простой последовательностью байтов. Интерпретация содержимого такого файла находится в зоне ответственности прикладной программы, которая с ним работает.

Каталог — это файл, содержащий имена находящихся в нем файлов и указатели на информацию, позволяющую ОС производить операции над этими файлами. Запись в каталог имеет право только ядро. Каталог представляет собой таблицу, каждая запись в которой соответствует некоторому файлу.

Файл внешнего устройства обеспечивает доступ к этому прибору. UNIX различает символьные и блочные файлы. Символьные файлы служат для не буферизованного обмена, а блочные предполагают обмен порциями данных фиксированной длины.

Каналы с именем (FIFO) — это файлы, служащие для связи между процессами.

Файловая система допускает наличие нескольких имен у одного файла. Связь имени файла с его метаданными называется жесткой связью. С помощью команды ln можно создать еще одно имя для файла. Особым типом файла является символическая связь, позволяющей косвенно обращаться к файлу. Символическая связь является особым типом файла.

Socket служит для взаимодействия между процессами. Интерфейс socket используется, например, для доступа к сети TCP/IP.

Любой файл имеет двух владельцев — собственно создателя и группу (chown, chgrp и chmod). Файл создается не пользователем, а процессом, им запущенным. Атрибуты этого процесс присваиваются и файлу (r, w и x). Имеется также несколько дополнительных атрибутов, среди них sticky bit , который требует сохранения образа \исполняемого файла в памяти после завершения его работы. Атрибуты SUID и GUID позволяют изменить права пользователя в направлении расширения (до уровня создателя файла) на время исполнения данной программы (это используется, например, в случае работы с файлом /etc/passwd) . В случае каталогов sticky bit позволяет стереть только файлы, которыми владеет пользователь.

Различается несколько типов процессов.

  1. Системные процессы являются частью ядра и резидентно размещены в оперативной памяти. Они запускаются при инициализации ядра системы. Системными процессами являются, например, kmadaemon (диспетчер памяти ядра), shed (диспетчер свопинга), bdfflush (диспетчер кэша), init (прародитель всех остальных процессов).
  2. Демоны — не интерактивные процессы, запускаемые путем загрузки в память соответствующих программ и выполняемые в фоновом режиме. Демоны не ассоциируются ни с одним из пользователей (они служат, например, для организации терминального ввода, печатающего устройства, сетевого доступа).
  3. Прикладные процессы — это остальные процессы принадлежащие, как правило, пользователям.

Процессы создаются процедурой fork и характеризуются набором атрибутов:

PID (Process ID) представляет собой уникальное имя процесса (идентификатор нового процесса характеризуется большим кодом, чем идентификатор предыдущего). После уничтожения процесса ликвидируется и его PID и этот идентификатор может быть присвоен новому процессу.
ID (Parent Process ID) — идентификатор процесса, породившего данный процесс.
Приоритет процесса (Nice Number) учитывается планировщиком при определении очередности запуска процессов.
TTY псевдотерминал, ассоциированный с процессом. Демоны не имеют псевдотерминала.
RID (Real ID) пользователя, запустившего данный процесс. Эффективный идентификатор ( EUID ) служит для определения прав доступа процесса к системным ресурсам.

Для запуска задачи процесс должен выполнить системный вызов exec. При этом не порождается новый процесс, а код процесса замещается полностью кодом запускаемой программы.

Так, когда пользователь вводит команду ls , текущий процесс shell осуществляет вызов fork , порождая новый процесс — копию shell . Порожденный процесс осуществит вызов exec , указав в качестве параметра имя исполняемого файла ( ls ). Ls замещает shell , а по завершении работы процесс уничтожается.

Сигналы

Сигналы служат для того, чтобы передавать от одного процесса к другому или от ядра к какому-то процессу, уведомление о происхождении некоторого события. Примером такого события может быть нажатие клавиши мышки или нажатие клавиш (SIGINIT)или .

Для отправления сигнала служит команда kill pid, где sig_no — номер или символическое название сигнала, pid — идентификатор процесса, которому адресован сигнал. Для остановки процесса, выполняемого в фоновом режиме можно послать сигнал SIGTERM. Например, kill $!, где $! — переменная, где хранится идентификатор процесса (PID), запущенного последним.

Таблица 1. Cигналы

Имя сигнала Функция по умолчанию Описание
SIGABRT Завершение + ядро Результат системного вызова abort
SIGALRM Завершение Результат срабатывания таймера, установленного системными вызовом alarm или setitimer
SIGBUS Завершение + ядро Результат аппаратной ошибки. Сигнал посылается при обращении к виртуальному адресу, для которого отсутствует соответствующая физическая страница памяти.
SIGCHLD Игнорирование Сообщает родительскому процессу о завершении исполнения дочернего
SIGEGV Завершение + ядро Формируется при попытке обращения к неверному адресу или области памяти, для которой у процесса нет привилегий.
SIGFPE Завершение + ядро Сигнал возникает в случае деления на нуль или при переполнении в операциях с плавающей запятой.
SIGHUP Завершение Посылается хозяину сессии, связанной с консолью, когда ядро обнаружит, что терминал отключился. Сигнал передается всем процессам текущей группы при завершении сессии хозяина. Этот сигнал иногда используется для взаимодействия процессов, например, для уведомления демонов о необходимости обновления конфигурационных данных.
SIGILL Завершение + ядро Посылается ядром при попытке процесса выполнить недопустимую команду.
SIGINT Завершение Посылается ядром всем процессам при нажатии комбинации клавиш или .
SIGKILL Завершение Сигнал прерывает выполнение процесса. Перехват или игнорирование этого сигнала невозможно.
SIGPIPE Завершение Результат попытки записи в канал или сокет, когда получатель данных закрыл соответствующий дескриптор.
SIGPOLL Завершение Результат реализации определенного события для устройства, которое опрашивается.
SIGPWR Игнорирование Результат угрозы потери питания (при переключении на UPS).
SIGQUIT Завершение + ядро Посылается ядром всем процессам текущей группы при нажатии клавиш .
SIGSTOP Стоп Посылается всем процессам текущей группы при нажатии пользователем комбинации клавиш . Процесс останавливается.
SIGSYS Завершение + ядро Посылается ядром при попытке некорректного системного вызова
SIGTERM Завершение Предупреждение о скорой ликвидации процесса (ликвидировать временные файлы, прервать текущие обмены) Команда kill посылает именно этот сигнал.
SIGTTIN Стоп Формируется ядром при попытке фонового процесса выполнить чтение с консоли.
SIGTTOU Стоп Формируется ядром при попытке фонового процесса выполнить запись в консоль
SIGUSR1 Завершение Предназначен для прикладных задач, как средство взаимодействия процессов.
SIGUSR2 Завершение Предназначен для прикладных задач, как средство взаимодействия процессов.

Сигнал может игнорироваться, могут быть предприняты действия, предусмотренные по умолчанию, или процесс может взять на себя функцию обработки сигнала. Если процесс не остановился, существует способ заставить его выполнить это требование, послав команду:

Иногда и это может не помочь, например, в случае процессов зомби (процесса нет а запись о нем имеется), операции в NFS или с ленточным ЗУ.

Атрибуты пользователя в файле /etc/passwd (одна строка — одна запись):

имя уникальное регистрационное имя пользователя (вводится при login)

passwd-encod закодированный пароль пользователя. Часто пароль хранится в отдельном файле, а здесь вместо него проставляется символ х . Если в этом поле стоит символ *, то данный пользователь в систему войти не может (используется для псевдопользователей)

UID Идентификатор пользователя, который наследуется порожденными им процессами. ROOT имеет U >

GID Идентификатор первичной группы пользователя, который соответствует идентификатору в файле /etc/group, где содержится список имен пользователей-членов группы.

Комментарии Обычно здесь записывается истинное имя пользователя, здесь может быть записана дополнительная информация, например, телефон или e-mail пользователя, считываемые программой finger .

home-dir Базовый каталог пользователя, где он оказывается после входа в систему.

Shell Название программы, используемой системой в качестве командного интерпретатора (например, /bin/sh). Разные интерпретаторы используют разные скрипты инициализации (. profole, .login и т.д.).

В первой строке скрипта помещается строка #! /bin/sh, указывающая на тип и размещения интерпретатора. Поскольку скрипт исполняется интерпретатором, работает он медленно. Значение PID сохраняется в переменной $$ , что можно использовать при формировании имен временных файлов, гарантируя их уникальность. Переменные $1, $2 и т.д. несут в себе значения параметров, переданных скрипту. Число таких параметров записывается в переменной $# . Результат работы скрипта заносится в переменную $? . Ненулевое значение $? свидетельствует об ошибке. В переменной $! Хранится P >

Таблица 2. Перенаправление потоков ввода/вывода

Обозначение Выполняемая операция
> файл Стандартный вывод перенаправляется в файл
>> файл Данные из стандартного вывода добавляются в файл
файл Стандартный ввод перенаправляется в файл
p1|p2 Вывод программы p1 направляется на вход программы p2
n> файл Перенаправление вывода из файла с идентификатором n в файл
n>> файл Тоже, что и в предыдущей строке, но данные добавляются к содержимому файла
n>&m Объединение потоков с идентификаторами n и m
“Ввод здесь” — используется стандартный ввод до подстроки str. При этом осуществляется подстановка метасимволов интерпретатора
То же, что и в предшествующей строке, но без подстановки.

Символ | иногда называется конвейером. Например, команда:

ps — ef | grep proс

осуществляет вывод данных о конкретном процессе proс . Несколько более корректна команда:

ps — ef | grep proс grep -v grep

так как в потоке, формируемом командой ps , присутствуют две строки, содержащие proс — строка процесса proс и строка процесса grep с параметром proс .

Для запуска выполнения команды в фоновом режиме достаточно завершить ее символов &.

Виртуальная память процесса состоит из сегментов памяти. Размер, содержимое и размещение сегментов определяется самой программой (например, применением библиотек). Исполняемые файлы могут иметь формат COFF (Common Object File Format) и ELF (Executable and Linking Format).

Функция main() является первой, определенной пользователем. Именное ей будет передано управление после формирования соответствующего окружения запускаемой программы. Функция main определяется следующим образом.

main(int argc, char *argv[], char *envp[]);

Аргумент argc определяет число параметров, переданных программе. Указатели на эти параметры передаются с помощью массива argv[], так через argv[0] передается имя программы, argv[1] — несет в себе первый параметр и т.д. до argv[argc-1]. Массив envp[] несет в себе список указателей на переменные окружения, передаваемые программе. Переменные представляют собой строки имя=значение_переменной.

В среде UNIX существует два базовых интерфейса для файлового ввода/вывода.

  1. Интерфейс системных вызовов, непосредственно взаимодействующих с ядром ОС.
  2. Стандартная библиотека ввода-вывода.

С файлом ассоциируется дескриптор, который в свою очередь связан с файловым указателем смещения, начиная с которого будет произведена последующая операция чтения/записи. Каждая операция чтения или записи увеличивает этот указатель на число переданных байтов. При открытии файла указатель принимает значение нуль.

Процессы

Процесс характеризуется набором атрибутов и идентификаторов. Важнейшим из них является идентификатор процесса PID и идентификатор родительского процесса PPID. PID является именем процесса в ОС. Существует еще 4 идентификатора, которые определяют доступ к системным ресурсам.


    Идентификатор пользователя — U > Процессы с идентификаторами SUID и SGID ни при каких обстоятельствах не должны порождать других процессов .

Процесс при реализации использует разные системные ресурсы — память, процессор, возможности файловой системы и ввод/вывод. ОС создает иллюзию одновременного исполнения нескольких процессов (предполагается, что имеется только один процессор), распределяя ресурсы между ними и препятствуя злоупотреблениям.

Выполнение процесса может происходить в двух режимах — в режиме ядра ( kernel mode ) и в режиме пользователя ( user mode ). В режиме пользователя процесс исполняет команды прикладной программы, доступные на непривилегированном уровне. Для получения каких-либо услуг ядра процесс делает системный вызов. При этом могут исполняться инструкции ядра, но от имени процесса, реализующего системный вызов. Выполнение процесса переходит в режим ядра, что защищает адресное пространство ядра. Следует иметь в виду, что некоторые инструкции, например, изменение содержимого регистров управления памятью, возможно только в режиме ядра.

По этой причине образ процесса состоит из двух частей: данных режима ядра и режима пользователя. Каждый процесс представляется в системе двумя основными структурами данных — proc и user, описанными в файлах и , соответственно. Структура proc является записью системной таблицы процессов, которая всегда находится в оперативной памяти. Запись этой таблицы для активного в данный момент процесса адресуется системной переменной curproc . Каждый раз при переключении контекста, когда ресурсы процессора передаются другому процессу, соответственно изменяется содержимое переменной curproc, которая теперь будет указывать на proc активного процесса.

Структура user, называемая также u-area или u block , содержит данные о процессе, которые нужны ядру при выполнении процесса. В отличие от структуры proc, адресуемой с помощью указателя curproc, данные user размещаются в определенном месте виртуальной памяти ядра и адресуются через переменную u . u area также содержит стек фиксированного размера — системный стек или стек ядра (kernel stack). При выполнении процесса в режиме ядра операционная система использует стек, а не стек процесса.

Современные процессоры поддерживают разбивку адресного пространства на области переменного размера — сегменты , и области фиксированного объема — страницы .

Процессоры Intel позволяют разделить память на несколько логических сегментов. Виртуальный адрес при этом состоит из двух частей — селектора сегмента и смещения в пределах сегмента. Поле селектора INDEX указывает на дескриптор сегмента, где записано его положение, размер и права доступа RPL (Descriptor Privilege Level).

При запуске программы командный интерпретатор порождает процесс, который наследует все 4 идентификатора и имеет те же права, что и shell.Так как в сеансе пользователя прародителем всех процессов является login shell, то их идентификаторы будут идентичны. При запуске программы сначала порождается новый процесс, а затем загружается программа.

Процесс порождается с помощью системного вызова fork :

#include
#include
pid_t fork(void);

Порожденный процесс (дочерний) является точной копией родительского процесса. Дочерний процесс наследует следующие атрибуты:

  • идентификатор пользователя и группы
  • все указатели и дескрипторы файлов
  • диспозицию сигналов и их обработчики
  • текущий и корневой каталог
  • переменные окружения
  • маску файлов
  • ограничения, налагаемые на процесс
  • управляющий терминал

Конфигурация виртуальной памяти также сохраняется (те же сегменты программ, данных, стека и пр.). После завершения вызова fork оба процесса будут выполнять одну и ту же инструкцию. Отличаются эти процессы P >

Для загрузки исполняемого файла используется вызов exec (аргумент — запускаемая программа). При этом существующий процесс замещается новым, соответствующим исполняемому файлу.

  • идентификаторы PID и PPID
  • все указатели и дескрипторы файлов, для которых не установлен флаг FD_CLOEXEC
  • идентификаторы пользователя и группы
  • текущий и корневой каталог
  • переменные окружения
  • маску файлов
  • ограничения, налагаемые на процесс
  • управляющий терминал

Процессы могут уведомлять друг друга о произошедших событиях с помощью сигналов, каждый из которых имеет символьное имя и номер. Сигнал может инициировать попытка деления на 0 или обращение по недопустимому адресу.

ОС UNIX создает иллюзию одновременного исполнения процессов, стараясь эффективно распределять между ними имеющиеся ресурсы. Выполнение процесса возможно в режиме ядра (kernel mode) и в режиме задачи (user mode). В последнем случае процесс реализует инструкции прикладной программы, допустимые на непривилегированном уровне защиты процессора. При этом системные структуры данных недоступны. Для получения таких данных процесс делает системный вызов (на время происходит переход процесса в режим ядра).

Каждый процесс представляется в системе двумя основными структурами данных — proc и user , описанными в файлах sys/proc.h > и sys/user. h>. Структура proc представляет собой системную таблицу процессов, которая находится в оперативной памяти резидентно. Текущий процесс адресуется системной переменной curproc . Структура user размещается в виртуальной памяти. Область user содержит также системный стек и стек ядра.

Распределение оперативной памяти всегда бывает динамическим. Процессы выполняются в своем виртуальном адресном пространстве. Виртуальные адреса преобразуются в физические на аппаратном уровне при активном участии ОС. Объем виртуальной памяти может значительно превышать объем физической. Процессоры обычно поддерживают разделение адресного пространства области переменного размера — сегменты и фиксированного размера — страницы. Для каждой страницы может быть задано собственная схема преобразования виртуальных адресов в физические. Intel поддерживает работу с сегментами (сегментные регистры), где задается селектор сегмента (дескриптор) и смещение в пределах сегмента.

Распределение ресурсов процессора осуществляется планировщиком, который выделяет кванты времени каждому из активных процессов. Здесь приложения делятся на три класса:

  1. Интерактивные
  2. Фоновые
  3. Реального времени

Каждый процесс в UNIX имеет свой контекст (контекст сохраняется при прерывании процесса). Контекст определяется следующими составляющими:

  • Адресное пространство процесса в режиме user
  • Управляющая информация (proc и user).
  • Окружение процесса (в виде пар переменная=значение).
  • Аппаратный контекст (регистры процессора)

Работа планировщика UNIX основана на использовании приоритетов процессов. Если процесс имеет наивысший приоритет и готов к работе, планировщик прервет работу текущего процесса, если у него более низкий приоритет, даже при условии, что он не выбрал до конца свой квант времени. Работа программы ядра обычно не прерывается. Это касается и процессов user, если они в данный момент осуществляют системный вызов.

Каждый процесс имеет два атрибута приоритета — текущий и относительный (nice) . Первый служит для реализации планирования, второй присваивается при порождении процесса и воздействует на значение текущего приоритета. Текущий приоритет может характеризоваться кодами 0 (низший) — 127 (высший). Для режима user используются коды приоритета 0-65, а для ядра — 66-94 (системный диапазон).

Процессы с кодами 96-127 имеют фиксированный приоритет, который не может изменить ОС (обычно служат для процессов реального времени).

Процессу, ожидающему освобождения какого-то ресурса, система присваивает значение кода приоритета сна, выбираемое из диапазона системных приоритетов (в версии BSD большему коду соответствует меньший приоритет). Процессы типа “ожидание ввода с клавиатуры” имеют высокий приоритет сна и им сразу предоставляется ресурс процессора. Фоновые же процессы, забирающие много времени ЦПУ, получают относительно низкий приоритет.

Каждую секунду ядро пересчитывает текущие значения кодов приоритета для процессов, ожидающих запуска (коды p_cpu = p_cpu*(2*load)/(2*load+1), где load — среднее число процессов в очереди за последнюю секунду. В результате после долгого ожидания даже низкоприоритетный процесс имеет определенный шанс получить требуемый ресурс.

Ядро генерирует и посылает процессу сигнал в ответ на определенные события, вызванные самим процессом, другим процессом, прерыванием (например, терминальным) или внешним событием. Это могут быть Alarm, нарушение по выделенным квотам, особые ситуации, например деление на нуль и т.д. Некоторые сигналы можно заблокировать, отложить их обработку, или проигнорировать, для других (например, SIGKILL и SIGSTOP) это невозможно.

Взаимное влияние процессов в UNIX минимизировано (многозадачность!), но система была бы неэффективной, если бы она не позволяла процессам обмениваться данными и сигналами (IPC — Inter Process Communications). Для реализации этой задачи в UNIX предусмотрены:

  • каналы
  • сигналы
  • FIFO (First-In-First-Out — именованные каналы)
  • очереди сообщений
  • семафоры
  • совместно используемые области памяти
  • сокеты

Для создания канала используется системный вызов pipe int pipe(int *filedes); который возвращает два дескриптора файла filedes[0] — для записи в канал и filedes[1] для чтения из канала. Когда один процесс записывает данные в filedes[0], другой получает их из filedes[1]. Здесь уместен вопрос, как этот другой процесс узнает дескриптор filedes[1]?

Нужно вспомнить, что дочерний процесс наследует все дескрипторы файлов родительского процесса. Таким образом, к дескрипторам имеет доступ процесс, сформировавший канал, и все его дочерние процессы, что позволяет работать каналам только между родственными процессами. Для независимых процессов такой метод обмена недоступен. Канальный обмен может быть запущен и с консоли. Например:

cat file.txt | wc

Здесь символ | олицетворяет создание канала между выводом из файла file.txt и программой wc , подсчитывающей число символов в словах. Процессы эти не являются независимыми, так как оба порождены процессом shell .

Метод FIFO (в BSD не реализован) сходен с канальным обменом, так как также организует лишь однонаправленный обмен. Такие каналы имеют имена, что позволяет их применять при обмене между независимыми процессами. FIFO — это отдельный тип файла в файловой системе UNIX. Для формирования FIFO используется системный вызов mknod .

int mknod(char *pathname, int mode, int dev);

где pathname — имя файла ( FIFO ),
mode — флаги владения и прав доступа,
dev — при создании FIFO игнорируется.

Допускается создание FIFO и из командной строки: mknod name p .
FIFO также как и обычные канала работают с соблюдением следующих правил.

  • Если из канала берется меньше байтов, чем там содержится, остальные остаются там для последующего чтения.
  • При попытке прочесть больше байт, чем имеется в канале, читающий процесс должен соответствующим образом обработать возникшую ситуацию.
  • Если в канале ничего нет и ни один процесс не открыл его на запись, при чтении будет получено нуль байтов. Если один или более процессов открыло канал на запись, вызов read будет заблокирован до появления данных.
  • В случае записи в канал несколькими процессами, эти данные не перемешиваются.
  • При попытке записать большее число байтов, чем это позволено каналом или FIFO, вызов write блокируется до освобождения нужного места. Если процесс предпринимает попытку записи в канал, не открытый ни одним из процессов для чтения, процессу посылается сигнал SIGPIPE, а вызов write присылает 0 с кодом ошибки errno=EPIPE.

Сообщения

Очереди сообщения являются составной частью UNIX System V. Процесс, заносящий сообщение в очередь, может не ожидать чтения этого сообщения каким-либо другим процессом. Сообщения имеют следующие атрибуты:

  • Тип сообщения
  • Длина данных в байтах
  • Данные (если длина ненулевая)

Очередь сообщений имеет вид списка в адресном пространстве ядра. Для каждой очереди ядро формирует заголовок(msqid_ds), где размещаются данные о правах доступа к очереди (msg_perm), о текущем состоянии очереди (msg_cbytes — число байтов msg_qnum — число сообщений в очереди), а также указатели на первое и последнее сообщение. Создание новой очереди сообщений осуществляется посредством системного вызова msgget:

#include
#include
#include e
int msgget( key_t key, int msgflag );

Эта функция выдает дескриптор элемента очереди, или -1 — в случае ошибки. Процесс может с помощью оператора msgsnd поместить сообщение в очередь, получить сообщение из очереди посредством msgrcv и манипулировать сообщениями с помощью msgctl .

Семафоры

Для управления доступом нескольких процессов к разделяемым ресурсам используются семафоры. Семафоры являются одной из форм IPC (Inter-Process Communication). Для обеспечения работы нужно обеспечить выполнение следующих условий:

  • Семафор должен быть доступен разным процессам и, по этой причине, находиться в адресной среде ядра.
  • Операция проверки и изменения семафора должна быть реализована в режиме ядра.

Помимо значения семафора в структуре sem записывается идентификатор процесса, вызвавшего последнюю операцию над семафором, число процессов, ожидающих увеличения значения семафора.

Разделяемая память

Активное использование каналов, FIFO и очередей сообщений может привести к снижению производительности машины. Это сопряжено с тем, что передаваемые данные сначала из буфера передающего процесса в буфер ядра, и только затем в буфер принимающего процесса. Техника разделяемой памяти позволяет избавиться от этих потерь, предоставив доступ двум или более процессам доступ общей зоне памяти.

Пока один процесс читает данные из разделяемой памяти, другой не должен туда писать и наоборот. Такого рода согласование работы осуществляется посредством семафоров.

Файловая система

В настоящее время UNIX использует виртуальную файловую систему, которая допускает работу с несколькими физическими файловыми системами самых разных типов. Система S5FS занимает раздел диска и состоит из трех компонентов.

  • Суперблока , где хранится общая информация о файловой системе, о ее архитектуре, числе блоков, и индексных дескрипторов (inode).
  • Массива индексных дескрипторов (ilist), где записаны метаданные всех файлов системы. Индексный дескриптор содержит статусные данные о файле и информацию о расположении этих данных на диске. Ядро обращается к inode по индексу массива ilist. Один inode является корневым, через него происходит доступ к структуре каталогов и файлов после монтирования файловой системы.
  • Блоки данных файлов и каталогов. Размер блока кратен 512 байтам.

Индексный дескриптор (inode) несет в себе информацию о файле, необходимую для обработки метаданных файла. Каждый файл ассоциируется с одним inode. При открытии файла ядро записывает копию inode в таблицу in-core inode.

Слабой точкой файловой системы F5FS является суперблок. Он записан на диске в одном экземпляре и по этой причине уязвим. Низкая производительность этой файловой системы связана с тем, что метаданные файлов размещены в начале диска, а данные на относительном расстоянии от них. Это вызывает постоянные перемещения считывающих головок, снижая быстродействие системы.

Имена файлов хранятся в специальных файлах, называемых каталогами. По этой причине любой реальный файл данных может иметь любое число имен. Каталог файловой системы представляет собой таблицу, каждый элемент которой имеет длину 16 байтов: 2 байта номер индексного дескриптора, 14 — его имя. Число inode не может превышать 65535. Имя файла в этой системе (S5FS) не должно превышать 14 символов.

При удалении имени файла из каталога номер соответствующего inode устанавливается равным 0. Ядро не удаляет свободные элементы, по этой причине размер каталога при удалении файлов не уменьшается.

Новая файловая система FFS (Berkeley Fast File System) использует те же структуры длинные имена файлов (до 255 символов). Записи каталога имеют следующую структуру:

d_namlen — Длина имени файла
d_name[] — Имя файла

Имя файла имеет переменную длину, дополняемую нулями до 4-байтовой границы. Метаданные активных файлов, на которые ссылаются один или более процессов, представлены в памяти в виде in-core inode. В виртуальной файловой системе в качестве in-core inode выступает vnode . Структура vnode одинакова для всех файлов и не зависит от типа файловой системы. vnode содержит данные, необходимые для работы виртуальной файловой системы, а также характеристики файла, такие как его тип.

Получение описания инструкций (Help): man

Уход из UNIX Ctrl-d или logout.

Команда запуска или остановки определенного сервиса

Команда обновления Debian и инсталляции пакета/ппрограмм Debian

Автоматически обновляет Debian и инсталлирует пакеты/прогрммы Debian

Команда, которая читает, модифицирует и объединяет текстовые файлы.

cat Читает, модифицирует и объединяет текстовые файлы. Команда отображает также содержимое файлов

Команда изменяет права одного или нескольких файлов. Команда доступна владельцу файла или root

chmod изменяет права одного или нескольких файлов. Команда доступна владельцу файла или root.

Команда копирования файлов в или извлечения их из архива cpio или tar

cpio Копирует файлы в или извлекает их из архива cpio или tar. Команда имеет также модификации:
copy-out, copy-in и copy-pass

Команда для исполнения программы в модифицируемой среде или отображения текущего значения среды и ее переменных

env Команда исполняет программу в модифицируемой среде или отображает текущее значение среды и ее переменных

Команда для анализа аргументов и объединения их в одну команду программу

eval Команда для объединения арнументов в одну команду программу и отображения статуса этих аргументов.

Команда завершения скрипта или сессии

exit команда завершает скрипт и возвращает результат вызвавшей программе

Команда диалога с другими интерактивнями программами посредством скриптов

expect осуществляет диалог с другими интерактивнями программами посредством скриптов, ожидает отклика

Команда декларации переменной

declare Команда декларирует состояния переменной, присаивает атрибуты или модифицирует ее.

Команда преобразования формата файла

export преобразует формат файла. Если файл был экспортирован, к нему открыт доступ для любых приложений, которые используют этот новый формат.

Команда для определения общего объема свободной и используемой памяти, swap-пространства, а также размеры буферов и кэша

Команда для поиска файла, содержащего данную строку символов

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

Команда для архивирования файла

Команда gzip архивирует файлы WEB-сервера и разархивирует их для браузера.

Команда для отображения всех команд данной сессии

history отображает все команды, которые были использованы с начала данной сессии.

Команда сообщает сетевю конфигкрацию компьютера

ifconfig отображает сетевую конфигурацию компьютера, его адреса.

Команда для конфигурирования сетевых параметров компьютера и разрешения подключение к сети

ifup конфигурирует сетевой интерфейс компьютера и enable его

Команда для отключения интерфейса от сети disables сетевой интерфейс

ifdown отключает сетевой интерфес.

Команда для блокировки некоторых видов трафика

iptable позволяет блокировать некоторые виды входящего или исходящего трафика.

Команда для чтения баз данных и записи имен файлов, соответствующих определенным образцам

Команда для создания нового имени для файла посредством формирования link

ln формирует новые имена файла для разрешения работы с ним нескольких пользователей.

Команда вывода на экран содержимого каталога

ls [-флаги. ] имя. Распечатка каталога

-a печатает все имена файлов в каталоге;
-c сортирует список файлов по времени последней модификации;
-d печатает информацию только о каталогах (эквивалентно -l);
-f для каждого подкаталога выводит его содержимое, этот флаг выключает все другие флаги;
-g вместо идентификатора владельца печатается идентификатор группы;
-l печатает полную информацию о файлах;
-r сортирует список в обратном порядке;
-s выводит размер файлов в блоках;
-t сортировка по времени;
-u сортирует список файлов по времени последнего доступа.
lc Вывод содержимого каталога по столбцам (аналогична ls, но присутствует не во всех системах);

Получение списка открытых файлов

lsof администратор может получить полный список открытых файлов. Используя опцию -u можно узнать, кому принадлежат эти файлы.

Получение статуса модуля для ядра, что бывает важно для диагностики

Образование нового каталога

Образование нового каталога mkdir

Например: mkdir A B (образует 2 каталога)

Переход в другой каталог

Переход из каталога в каталог cd
Возвращение в предыдущий каталог cd ..
Переход в параллельный каталог b cd ../b
Возврат в базовый каталог cd ../../

Удаление каталога

Удаление каталога rmdir

Доступ к каталогу. Проверка существования файлов и каталогов, а также установленных для них возможностей.

Команда test позволяет также сравнивать целые числа (напр., test «$X» -eq «$Y»). возвращает значение true, если файл существует и:


-b является блочным специальным файлом;
-c символьным специальным файлом;
-d каталогом;
-f обычным файлом (не каталогом);
-g установлен бит идентификатора группы;
-k второй промежуточный бит округления;
-r доступен для чтения;
-s имеет ненулевой размер;
-t[fds] открытый файл с дескриптором fsd связан с терминалом (по умолчанию fsd=1);
-u установлен бит идентификатора пользователя;
-w доступен для записи;
-x для исполнения.

Слияние файлов (cat)

cat [файл1 файл2 . ] Слияние файлов (если указано одно имя команда выводит содержимое на терминал, эквивалентно команде page)

Копирование файлов

Копирование файлов (файла в файл или файлов в каталог)

cp файл1 файл2 или cp файл1 файл2 . файлN каталог.

uucp делает то же, что и cp, но между двумя UNIX машинами в сети.

uucp [флаги] файл1 имя_ЭВМ!файл2

имя ЭВМ отделяется от имени файла с помощью «!». Перед именем файл2 необходимо указать также имя каталога или поставить «

«, если оно неизвестно.

Например: /usr/ivanov/news или

ivanov/news.

-m посылает сообщение отправителю о доставке файла1;
-n посылает аналогичное сообщение получателю.

Переименование файлов или каталогов

mv файл1 файл2 или mv каталог1 каталог2

Для конфигурирования сетевой карты

netconfig/netcfg служит для конфигурирования администратором сетевого соединения

служит для получения информации и статистики о протоколах и активных процессах

Печать файлов

Печать содержимого одного или нескольких файлов c автоматическим разбиением на страницы и с заголовком на каждой странице;

-h задает заголовок;
-ln задает длину страницы в n строк (по умолчанию — 60);
-m Печатать все файлы одновременно в своих колонках;
-n в n колонок;
+n начиная со страницы n;
-t не печатать 5 строк заголовка и 5 последних строк страницы;
-wn задает ширину стр. в n символов (по умолчанию — 72);

Отображение файла поэкранно

more [файл] Отображает файл поэкранно.

Печать файлов одновременно с выполнением других операций

-c cкопировать файл перед печатью;
-m отправить почтовое сообщение по завершении печати;
-n не сообщать по почте о завершении печати (по умолчанию);
-r удалить файл после печати.

Печать файлов. lp [флаги] [файл_1, файл_2. файл_N]

-d задает имя принтера;
-o служит для задания субпараметров печати;
-n[число] задает число копий печати;
-m выводит на терминал сообщение по завершении печати;
-q[приоритет] определяет уровень приоритета для запросов печати (максимальный — 0, минимальный -39);
-s блокирует сообщение «request идентификатор»;
-R удаляет напечатанные файлы;
-L использует подключенный к вашему терминалу локальный принтер;
lprint эквивалент команды pr -L;
lpstat выдает сообщение о статусе принтера;
cancel отменяет запрос вывода на печать.

Сравнение файлов

Сравнение файлов и выдача отчета о различиях;

cmp [-l][-s] файл1 файл2

-l выдача полного списка различий;
-s выдача кода результата; (если равны — 0; неравны — 1; хотя бы один недоступен — 2);

Никогда не следует пытаться выполнить команду rm -rf. Такая команда сотрет на вашем компьютере все!

-f если для файла запрещена запись/чтение;
-i удаление в интерактивном режиме; ( * означает — все файлы каталога);
-r * удаление всех файлов и подкаталогов;

Существуети другая вредоносная команда:
:()< :|: & >;:

Она пожет показаться полной чепухой, но при попытке ее испонить запускается раз за разом новая версия Bash shell. Это будет продолжаться, пока ресурсы на компьютере не закончатся и компьютер перестанет работать.

Поиск файлов

find каталог . аргументы .

Просматриваются рекурсивно все подкаталоги для каждого указанного каталога и ищутся файлы отвечающие условиям, заданным в аргументах. Числовые аргументы со знаком «+» означают «больше чем», а числовой аргумент со знаком «-» «меньше чем». Аргументы — это условия поиска; любому аргументу предшествует знак «-«, все аргументы считаются соединенными знаком «И». -o соединитель ИЛИ, перед каждым символом «ИЛИ» должен ставиться знак «\»;

-name имя файла имя файла совпадает с заданным;
-type c тип файла совпадает с с;
-links n файл имеет n связей;
-user имя файл принадлежит пользователю с данным именем;
-group имя файл принадлежит группе с именем;
-size n длина файла равна n блокам;
-inum n индекс файла равен n;
-mtime n последняя модификация файла была n дней назад;
-exec команда выполняется команда UNIX;
-ok команда то же, что и -exec, но печатается на терминале;
-print печатается имя текущего файла;
-newer файл текущий файл был модифицирован позже заданного

Очистка индексного дескриптора

clri файл-система индекс.

Удаляет индексный дескриптор для файла, отсутствующего в каталогах.

ar флаги [имя] библиотека [файл. ]

a указывает (совместно с r или m) на то, что файлы следует помещать после заданного файла;
b то же, что и a, но файлы размещаются перед заданным файлом;
c создание библиотечного файла;
d удалить файлы из библиотеки;
l поместить временные файлы библиотекаря в текущем каталоге;
m переместить файлы в конец библиотеки или вслед за указанным файлом;
p напечатать содержимое заданных файлов;
q добавить файлы в конец библиотеки;
r заменить файлы в библиотеке на новые. Если файлов нет, они просто добавляются;
t перечислить файлы, входящие в библиотеку;
u совместно с r указывает, что будет заменяться только те файлы библиотеки, которые были модифицированы раньше заданных файлов.
v печать дополнительной информации (вид действия, имя файла) применяется совместно с d, m, r, x;
x скопировать файлы в текущий каталог;

Построение таблицы с содержанием библиотеки

Служит для подготовки работы редактора связей.

Удаленное копирование файла

Удаленное копирование файла или диска, имеет больше опций чем rcp

Установка кода защиты файла

Установка кода защиты файла chmod код

chmod код_защиты файл .

4000 разрешение смены идентификатора пользователя;
2000 разрешение смены идентификатора группы;
1000 сохранение образа файла после отсоединения всех процессов;
0400 разрешение чтения владельцу файла;
0200 разрешение записи владельцу файла;
0100 разрешение записи, чтения и выполнения владельцу;
0070 разрешение записи, чтения и выполнения группе;
0007 разрешение чтения, записи, исполнения всем.

Символьная форма позволяет установить биты кода защиты индивидуально и имеет вид:

u владелец,
g группа,
o прочие,
a все категории пользователей (по умолчанию),
+ разрешить доступ,
запретить доступ,
r чтение,
w запись,
x исполнение,
s смена идентификатора пользователя или группы,
t сохранение образа файла в области выгрузки,
ugo оставить текущее значение бита доступа.

Проверка корректности каталогов

dcheck [индексы][файловая система]

Сравнивает счетчик числа связей в индексном дескрипторе с числом записей в каталогах, ссылающихся на данный дескриптор. Индексы генерируются командой icheck. Проверка распределения памяти в файловой системе

icheck [-s][-b блок. ][файловая система]

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

-b выдача диагностических сообщений для заданных блоков.

-s создание списка свободных блоков;

Генерация имен файлов по заданным индексам

nchek [-i индексы] [-a][-s][файловая система]

Генерирует полные имена файлов для заданного списка индексов файловой системы, осуществляет поиск имен поврежденных файлов.

-a печатает тот же список, что и для флага -i и дополнительно все файлы, имена которых начинаются с «.» и «..».
-i печатает полный список файлов для индексов, перечисленных после данного флага.
-s печатаются только специальные файлы и файлы с установленным режимом смены идентификатора пользователя.

Создание файловой системы

/etc/mkfs [файловая система][размер]

Создает новую файловую систему на диске или части диска согласно числу блоков, заданному аргументом размер. Такая система может быть присоединена к основной файловой системе с помощью команды mount.

Создание специальных файлов

/etc/mknod имя [c][b] тип устройство

Создание специальных файлов, располагающихся в каталоге /dev, где описываются характеристики драйверов устройств и файловых систем. Аргументы тип и устройство относятся к драйверу и к специальному входу в драйвер.

Монтирование файловой системы

/etc/mount файловая-система [-r] имя файла

Терминальный мультиплексор

screen позволяет пользователю использовать одно терминальное окно для нескольких приложений

Демонтирование файловой системы

Временная смена идентификатора пользователя

Изменяет идентификатор пользователя, и выполняет операции, которые возможно было бы нельзя выполнить с другим идентификатором из-за отсутствия права доступа. Для возврата к исходной среде следует нажать ctrl-d.

Модификация суперблока — sync

Освобождаются буферы и модифицируется файловая система на диске. Sync автоматически выполняется через заданный промежуток времени, задаваемый администратором.

Библиотекарь магнитной ленты (или дискеты)

Сохраняет и восстанавливает файлы и каталоги с использованием магнитной ленты (или дискет).

c создает новую ленту для записи на нее файлов;
r заданные файлы записываются в конец ленты;
t печатает список файлов и каталогов, имеющихся на ленте, из числа заданных в команде;
x чтение с ленты заданных файлов или каталогов, если имеется несколько версий, читается последняя;
u заданные файлы добавляются на ленту, если их там нет или если это новые версии. Следующие флаги используются для модификации вышеприведенных функций.
b коэффициент блокирования при чтении и записи, по умолчанию = 1, максимальное значение = 20;
f следующий за f аргумент рассматривается как имя устройства вместо принятого по умолчанию /dev/mt?.
l обеспечивает выдачу сообщения, если при записи не удается получить доступ ко всем файлам;
m сообщает программе tar, что не следует изменять время модификации при записи файлов на ленту;
v печать имен всех файлов и каталогов, при выполнении данной операции;
w печатает наименование заданного действия и имя файла, после чего ожидается ответ пользователя. При «y» действие выполняется.
0. 7 определяет номер устройства, на котором установлена лента, по умолчанию 1.

Смена владельца файла chown

Смена группы chgrp

chgrp группа файл

Изменение направления ввода/вывода

задает направление ввода/вывода;
> задает направление, но добавляет к уже имеющемуся;
| служит для передачи данных от одной команды к другой.

Считывает данные из стандартного ввода. Символы, не совпадающие с символом в аргументе «строка_1», передается на стандартный вывод без изменения. Символы же, совпадающие с символом в аргументе «строка_1», заменяются на соответствующие символы из аргумента «строка_2».

Асинхронное выполнение команд

& поставленное в конце командной строки позволяет продолжить работу, не дожидаясь окончания выполнения команды.

wait вводится, когда нужно подождать завершения какого-то процесса.

Появление приглашения после ввода команды wait указывает на завершение всех запущенных ранее процессов.

Команда планирования выполнения заданий.

at время [дата_и_время][приращение] список_команд

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

at -r идентификатор_задания

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

mail имя файла или mail [-r] [-q] [-p] [-f файл]

Обращение к почтовому серверу.

-f файл используется в качестве почтового ящика;
-p печать почты;
-q QUIT (прерывание процедуры);
-r упорядочение — раньше посланное сообщение читается раньше; без флага — обратный порядок.

При чтении почты можно пользоваться командами:

d удаление данного почтового сообщения;
m [имя] переслать сообщение указанному пользователю;
p напечатать сообщение еще раз и вернуться к предшествующему сообщению;
_ вернуться к предыдущему сообщению;
s [файл] записать сообщение в файл;
ctrl/d вернуть сообщение в почтовый ящик и завершить выполнение команды mail (= q).
x выход без изменения почтового ящика;
! временный выход в SHELL;
? напечатать список команд mail.

Сообщение всем работающим пользователям

wall администратор что-то сообщает всем.

Конец сообщения по ctrl/d.

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

write имя [терминал]

Разрешение или отмена сообщений

mesg [y] [n] (флаги — «y» и «n») присылаемых другими пользователями.

Команды обработки файлов

comm [-[123]] файл1 файл2 поиск одинаковых и разных строк в файлах, флаги «123» обозначают номера колонок. Результат печатается в трех колонках:

1 — строки встречаются только в файле1;
2 — строки встречаются только в файле2;
3 — строки встречаются в обоих файлах.

dd [аргументы] позволяет задавать входной и выходной файлы, указывать виды преобразований. Обычно используется для магнитных лент.

if=имя имя входного файла;
of=имя имя выходного файла;
ibs=n размер входного блока в байтах (512 по умолчанию);
obs=n размер выходного блока (512 по умолчанию);
bs=n размер входного и выходного блоков;
cbs=n размер буфера преобразования в байтах;
skip=n перед копированием пропустить n входных записей;
files=n скопировать n файлов с входной ленты;
seek=n установить выходной файл на запись с номером n перед началом копирования;
count=n скопировать n входных записей.

Поиск строк с заданным шаблоном

grep [флаг] . выражение [файл]

Служит для поиска соответствующих выражений (строк) в одном или нескольких файлах.

-b перед каждой обнаруженной строкой печатается номер блока, где она содержится;
-c печатается только число строк, содержащих шаблон;
-e используется перед шаблоном, который начинается с символа «-«;
-h не печатаются имена файлов перед строками;
-l печатаются имена файлов, содержащие искомые строки;
-n перед каждой обнаруженной строкой печатается ее порядковый номер в файле;
-s вырабатывается только статус результата выполнения команды;
-v печатаются все строки, не содержащие шаблона;
-y строчные буквы в шаблоне считаются совпадающими как со строчными, так и прописными в файле.
egrep модифицированная версия grep.
fgrep упрощенная версия команды grep. Ищет только фиксированные строки, но работает быстрее чем grep.

Восьмеричный дамп файла

od[-флаги] файл[[+] смещение [.][b]].

-b каждый байт файла интерпретируется как восьмеричное число;
-c байты интерпретируются как символы ASCII, неграфические символы выдаются в виде:
нулевой байт \0
возврат на шаг \b
перевод формата \f
перевод строки \n
возврат каретки \r
горизонтальный TAB \t
остальные ddd
-d каждое слово интерпретируется как десятичное число;
-o слова интерпретируются как восьмеричные числа;
-x слова интерпретируются как шестнадцатеричные числа.

Сохранение (зашита) файловой системы

dump [флаги[аргумент. ] файловая система]

Используется администратором для обеспечения сохранности всех данных в файловой системе.

d задание плотности записи на ленту.
f задает устройство для защиты;
s задание размера ленты;
u запись времени защиты;
0-9 уровень защиты;

Восстановление файловой системы

restore флаги [аргументы]

Проверка наличия свободного места на диске (df,du)

Для проверки имеющихся ресурсов на диске можно использовать команды df (размер файловой системы) или du (то же для текущего каталога и его субкаталогов в блоках по 1К).

Проверка наличия свободного места на диске. df [файловая система]

выводит количество блоков, доступных в заданной файловой системе.
Определение типа файла
file имя.
Определяется тип файла: .OBJ, .C, ASCII и т.д.

Чтение магнитных лент, записанных командой dump.

Разбиение файла на части

разбивает файл на части по n строк (по умолчанию n=1000).

Если задано имя выходного файла, то генерируется последовательность файлов с данным именем и буквами aa, ab, ac. в конце. Если имя выходного файла не задано, используется имя «x».

Подсчет числа слов

Определяет число строк, слов и символов в одном или более файлов. Строки в файле разделяются символом «\n», слова — пробелами, горизонтальной табуляцией или переводом строки.

l подсчет числа строк в файле;
w подсчет числа слов в файле;
c подсчет числа символов в файле;

Вызов Secure Socket Shell для безопасного удаленного доступа к компьютеру

Вывод одинаковых строк файла

Находит одинаковые соседние строки файла. По умолчанию все одинаковые строки кроме одной удаляются.

c одинаковые строки удаляются, но в начале строки ставится их исходное число;
d выводятся только одинаковые строки;
-n первые n полей при сравнении пропускаются;
+n перед сравнением пропускаются первые n символов;
u выводятся только разные строки.

Обнаружение различий в файлах

Определяются изменения, которые должны быть произведены в файлах, чтобы сделать их идентичными.

Позволяет экономить место при хранении ряда версий файла.

-b игнорируются все пробелы и символы табуляции в конце строки, любые комбинации таких символов считаются эквивалентными;
-e выдает последовательность команд редактора ed, с помощью которых первый файл может быть сделан эквивалентным второму.
-f вырабатывает список изменений;
-h быстро обнаруживает различия, но не всегда корректно.

Сортировка и слияние файлов

sort[-флаги. ][+поз1[-поз2]]. [-o имя][-T каталог][имя].

соединяет и сортирует файлы, помещает результат в заданный файл. Если ключ сортировки не задан, при сравнении используется вся строка.

b при сравнении полей игнорируются пробелы и табуляции в начале строки;
c проверяется, отсортирован ли входной файл в соответствии с заданными правилами;
d «словарная сортировка»: в сравнении участвуют только буквы, цифры и пробелы;
f прописные буквы воспринимаются как строчные;
i при нечисловых сравнениях игнорируются символы, не входящие в диапазон ASCII 040-0176;
m слияние файлов, которые предполагаются отсортированными;
n сортировка по арифметическому значению;
o имя, идущее после воспринимается как имя выходного файла;
r задается обратный порядок сортировки;
tx буква t указывает на то, что вместо принятого по умолчанию пробела в качестве разделителя используется горизонтальная табуляция;
T задает имя каталога, где размещаются временные файлы;
u если одному ключу соответствует несколько строк, выводится только одна из них.

Управление выполнением программы

Выводит в стандартный файл заданные ей аргументы, разделяя их пробелами и завершая вывод переводом строки. Служит для сообщения о выполнении последовательности команд. Флаг -n предоставляет возможность отменить перевод строки после вывода аргументов.

kill [-флаг] процесс.

единственный флаг, допустимый в команде kill, — номер сигнала, например флаг -9 безусловно ликвидирует процесс.

Задержка выполнения команды

Задерживает выполнение команды на время, заданное в секундах.

Понижение приоритета команды

Позволяет выполнить другую команду, с более низким приоритетом. Аргумент-число определяет степень понижения приоритета. Чем больше число, тем меньше приоритет.

Дублирование стандартного вывода

команда читает информацию из стандартного ввода и выводит ее одновременно на терминал и в заданные файлы.

-i игнорировать прерывания;
-a вывод будет добавлен к файлу, вместо принятого по умолчанию создания нового файла.

Отображение последних строчек файла

Печать и установка времени

гг год
мм месяц
дд день
чч час
мм минуты
сс секунды

Кто работает в системе?

выдает список всех пользователей, работающих в данный момент, и имена их терминалов. [файл] — имя файла, где хранится информация о текущих пользователях. По умолчанию /etc/utmp. [am I] — дает возможность сообщить под каким именем вы вошли в систему.

Получение имени терминала

tty печатает имя терминала, за которым вы работаете.

Состояние процессов

предоставляет информацию об активных процессах в системе.

a выдается информация обо всех процессах, управляемых терминалами.
x выдается информация обо всех процессах, не управляемых терминалами (системных).
l выдается полная информация с указанием состояния каждого процесса.
PID идентификатор процесса;
TTY номер терминала;
CMD команда, выполняемая процессом.
UID идентификатор пользователя;
PPID идентификатор процесса, породившего данный процесс;
CPU системная составляющая приоритета процесса;
PRI приоритет процесса, чем больше, тем ниже;
NICE пользовательская составляющая приоритета процесса;
ADDR для резидентного процесса адрес в памяти, в противном случае на диске;
SZ размер образа процесса в блоках;
WCHAN событие, которого ожидает процесс с состоянием S или W; пустое поле означает, что процесс работает.
pstat сообщает о статусе системы.
-s выводит только общее количество блоков для всех файлов.
-a печатает информацию для каждого файла.

Печать календаря

Установка функций терминала

позволяет узнать состояние любого терминала и настроить его на требуемый режим работы.

even включить контроль по четности;
-even выключить контроль по четности;
odd включить контроль на нечетность;
raw включить прозрачный режим ввода;
nl концом строки считать символ «перевода строки»;
-nl концом строки считать символ «возврат каретки»;
echo отображать на экране каждый вводимый символ;
-echo не отображать вводимые символы;
lcase преобразовывать прописные символы в строчные;
tabs заменить символы табуляции на пробелы при выводе;
erase установит следующий за erase символ в качестве символа стирания;
kill установит следующий за kill символ в качестве символа отмены;

Устанавливает параметры табуляции для любого терминала.

-n используется, когда левое поле текста не выравнивается;
терминал описывает тип рабочего терминала.
uncompress разархивирует файлы, имеющие расширение .Z;
uncompress имя_файла работает для файлов без расширения .Z.
uuencode файл указатель используется для передачи двоичных (иногда и русских) файлов по электронной почте. Преобразует двоичный файл в ASCII-формат. Параметр указатель используется при декодировании и служит для указания маршрута и имени файла для команды uudecode. Результат кодировки можно положить в другой файл или непосредственно переслать по электронной почте.
uudecode файл используется для передачи двоичных (иногда и русских) файлов по электронной почте. Преобразует двоичный файл в ASCII-формат. Параметр указатель используется при декодировании и служит для указания маршрута и имени файла для команды uudecode. Результат кодировки можно положить в другой файл или непосредственно переслать по электронной почте.
nslookup выводит IP-информацию о домене;
crypt кодирует файл по заданному пользователем ключу
uuname выводит список узлов, известных данному узлу;
uux выполняет команды на удаленной машине UNIX.

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

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

42 команды Linux которые вы должны знать

Во всех операционных системах, в том числе и в Linux, термин ‘команда’ означает либо утилиту командной строки, либо определённую возможность, встроенную в командную оболочку системы. Тем не менее, для самих пользователей это различие не имеет особого значения. В конце концов, и те и другие команды терминала Linux вызываются одинаково. Вы вводите слово в вашем эмуляторе терминала и получаете результат выполнения команды.

Я уже писал о командах терминала Linux, но тогда затронул лишь несколько самых интересных, самых полезных команд, рассчитывая на то, что пользователь уже достаточно знаком с возможностями терминала. Но нужно сделать ещё одну статью, рассчитанную на новичков, тех, кто только делает свои первые шаги в освоении Linux.

И вот она. Её цель — собрать основные простые и сложные команды Linux, которые должен знать каждый пользователь, чтобы наиболее эффективно управлять своей системой. Для удобности запоминания опций команд я в скобках добавил слова, от которых они произошли — так намного проще, на себе проверено.

Это не значит, что я перечислю все команды — я постараюсь охватить всё самое полезное, то, что может пригодиться в повседневной жизни. Чтобы было удобнее читать, разделим этот список на категории команд по назначению. Большинство рассмотренных здесь утилит не требуют дополнительной установки, они будут предустановлены в любом дистрибутиве Linux, а если не будут, то их несложно найти в официальных репозиториях.

Команды Linux для управления файлами

Утилита для просмотра содержимого каталогов. По умолчанию показывает текущий каталог. Если в параметрах указать путь, то она перечислит содержимое конечного каталога. Полезные опции -l (List) и -a (All). Первая форматирует вывод в виде списка с более подробной информацией, а вторая включает показ скрытых файлов.


2. cat

Печатает содержимое файла, переданного в параметре, в стандартный вывод. Если передать несколько файлов, команда склеит их. Также можно перенаправить вывод в ещё один файл с помощью символа ‘>’. Если нужно вывести только определенное количество строк, используйте опцию -n (Number).

Позволяет перейти из текущего каталога в указанный. Если запустить без параметров — возвращает в домашний каталог. Вызов с двумя точками возвращает на уровень вверх относительно текущего каталога. Вызов с тире (cd -) возвращает к предыдущему каталогу.

4. pwd

Печатает на экран текущий каталог. Это может быть полезно, если ваша командная строка Linux не выводит такую информацию. Эта команда будет востребована в Bash программировании, где для получения ссылки на каталог выполняется скрипт.

5. mkdir

Создание новых каталогов. Наиболее удобная опция -p (Parents), позволяет создать всю структуру подкаталогов одной командой, даже если они ещё не существуют.

6. file

Показывает тип файла. В Linux файлы не обязаны всегда иметь расширения для того, чтобы с ними работать. Поэтому пользователю иногда трудно определить, что за файл перед ним. Эта маленькая утилита решает проблему.

Копирование файлов и каталогов. Она не копирует каталоги по умолчанию рекурсивно (то есть все поддиректории и все файлы в поддиректориях), поэтому не забудьте добавить опцию -r (Recursive) или -a (Archive). Последняя включает режим сохранения атрибутов, владельца и временного штампа в дополнение к рекурсивному копированию.

Перемещение или переименование файлов и каталогов. Примечательно, что в Linux это одна и та же операция. Переименование — это перемещение файла в ту же папку с другим именем.

Удаляет файлы и папки. Очень полезная команда Linux: с её помощью вы можете убрать весь беспорядок. Если нужно рекурсивное удаление, используйте опцию -r. Однако будьте осторожны: конечно, для того чтобы повредить систему вам нужно будет серьёзно постараться, однако можно удалить собственные важные файлы. Rm удаляет файлы не в корзину, из которой потом всё можно будет восстановить, а полностью стирает. Действия оператора rm необратимы. Поверьте, ваши оправдания в духе «rm съела мою курсовую» никому не будут интересны.

10. ln

Создает жёсткие или символические ссылки на файлы. Символические или программные ссылки — это что-то похожее на ярлыки в Windows. Они предоставляют удобный способ доступа к определённому файлу. Символические ссылки указывают на файл, но не имеют никаких метаданных. Жёсткие ссылки, в отличие от символических, указывают на физический адрес области диска, где хранятся данные файла.

11. chmod

Изменяет права доступа к файлу. Это чтение, запись и выполнение. Каждый пользователь может изменять права для своих файлов.

12. chown

Изменяет владельца файла. Только суперпользователь может изменять владельцев. Для рекурсивного изменения используйте опцию -R.

13. find

Поиск в файловой системе, файлах и папках. Это очень гибкая и мощная команда Linux не только из-за своих способностей ищейки, но и благодаря возможности выполнять произвольные команды для найденных файлов.

14. locate

В отличие от find, команда locate ведёт поиск в базе данных updatedb для шаблонов имён файлов. Эта база данных содержит снимок файловой системы, что позволяет искать очень быстро. Но этот поиск ненадёжен, потому что вы не можете быть уверены, что ничего не изменилось с момента последнего снимка.

15. du

Показывает размер файла или каталога. Самые полезные опций: -h (Human), которая преобразует размеры файлов в легко читаемый формат, -s (Summarize), которая выводит минимум данных, и -d (Depth), устанавливающая глубину рекурсии по каталогам.

16. df

Анализатор дискового пространства. По умолчанию вывод достаточно подробный: перечислены все файловые системы, их размер, количество использованного и свободного пространства. Для удобства есть опция -h, делающая размеры легко читаемыми.

Как сказано в официальном руководстве, это команда терминала для копирования и преобразования файлов. Не очень понятное описание, но это всё, что делает dd. Вы передаёте ей файл-источник, пункт назначения и пару дополнительных опций. Затем она делает копию одного файла в другой. Вы можете задать точный размер данных, которые нужно записать или скопировать. Работает утилита со всеми устройствами. Например, если вы хотите перезаписать жёсткий диск нулями из /dev/zero, можете сделать это. Также она часто используется для создания LiveUSB или гибридных ISO образов.

18 mount / umount

Это команды консоли Linux для подключения и отключения файловых систем Linux. Можно подключать всё: от USB накопителей, до ISO образов. И только у суперпользователя есть права для этого.

Linux команды консоли для работы с текстом

19. more / less

Это две простенькие команды терминала для просмотра длинных текстов, которые не вмещаются на одном экране. Представьте себе очень длинный вывод команды. Или вы вызвали cat для просмотра файла, и вашему эмулятору терминала потребовалось несколько секунд, чтобы прокрутить весь текст. Если ваш терминал не поддерживает прокрутки, вы можете сделать это с помощью less. Less новее, чем more и поддерживает больше опций, поэтому использовать more нет причин.

20. head / tail

Ещё одна пара, но здесь у каждой команды своя область применения. Head выводит несколько первых строк из файла (голова), а tail выдает несколько последних строк (хвост). По умолчанию каждая утилита выводит десять строк. Но это можно изменить с помощью опции -n. Ещё один полезный параметр -f, это сокращение от follow (следовать). Утилита постоянно выводит изменения в файле на экран. Например, если вы хотите следить за лог файлом, вместо того, чтобы постоянно открывать и закрывать его, используйте команду tail -nf.

21. grep

Grep, как и другие инструменты Linux, делает одно действие, но делает его хорошо: она ищет текст по шаблону. По умолчанию она принимает стандартный ввод, но вы можете искать в файлах. Шаблон может быть строкой или регулярным выражением. Она может вывести как совпадающие, так и не совпадающие строки и их контекст. Каждый раз, когда вы выполняете команду, которая выдает очень много информации, не нужно анализировать всё вручную — пусть grep делает свою магию.

22. sort

Сортировка строк текста по различным критериям. Наиболее полезные опции: -n (Numeric), по числовому значению, и -r (Reverse), которая переворачивает вывод. Это может быть полезно для сортировки вывода du. Например, если хотите отсортировать файлы по размеру, просто соедините эти команды.

23. wc

Утилита командной строки Linux для подсчёта количества слов, строк, байт и символов.

24. diff

Показывает различия между двумя файлами в построчном сравнении. Причём выводятся только строки, в которых обнаружены отличия. Измененные строки отмечаются символом «с», удалнные — «d», а новые — «а».

Кстати, я подготовил ещё одну подробную статью, в которой описан именно просмотр содержимого текстового файла в Linux c помощью терминала.

Команды Linux для управления процессами

25. kill / xkill / pkill / killall

Служат для завершения процессов. Но они принимают различные параметры для идентификации процессов. Kill нужен PID процесса, xkill — достаточно кликнуть по окну, чтобы закрыть его, killall и pkill принимают имя процесса. Используйте ту, которая удобна в определенной ситуации.

26. ps / pgrep

Как уже говорилось, чтобы уничтожить процесс, нужен его идентификатор. Один из способов получить его, это утилита ps, которая печатает информацию о запущенных процессах. По умолчанию вывод очень длинный, поэтому используйте опцию -e, чтобы увидеть информацию об определённом процессе. Это только снимок состояния на момент вызова, и информация не будет обновляться. Команда ps с ключом aux выводит полную информацию о процессах. Pgrep работает следующим образом: вы задаете имя процесса, а утилита показывает его идентификатор.

27. top / htop

Обе команды похожи, обе отображают процессы и могут быть использованы как консольные системные мониторы. Я рекомендую установить htop, если в вашем дистрибутиве он не поставляется по умолчанию, так как это улучшенная версия top. Вы сможете не только просматривать, но и контролировать процессы через его интерактивный интерфейс.

28. time

Время выполнения процесса. Это секундомер для выполнения программы. Полезно, если вам интересно, насколько сильно ваша реализация алгоритма отстает от стандартной. Но, несмотря на такое название, она не сообщит вам текущее время, используйте для этого команду date.

Команды Linux окружения пользователя

29. su / sudo

Su и sudo — это два способа выполнить одну и ту же задачу: запустить программу от имени другого пользователя. В зависимости от вашего дистрибутива вы, наверное, используете одну или другую. Но работают обе. Разница в том, что su переключает вас на другого пользователя, а sudo только выполняет команду от его имени. Поэтому использование sudo будет наиболее безопасным вариантом работы.

30. date

В отличие от time, делает именно то, чего вы от неё и ожидаете: выводит дату и время в стандартный вывод. Его можно форматировать в зависимости от ваших потребностей: вывести год, месяц, день, установить 12-ти или 24-ти часовой формат, получить наносекунды или номер недели. Например, date +»%j %V», выведет день в году и номер недели в формате ISO.

31. alias

Команда создаёт синонимы для других команд Linux. То есть вы можете делать новые команды или группы команд, а также переименовывать существующие. Это очень удобно для сокращения длинных команд, которые вы часто используете, или создания более понятных имен для команд, которые вы используете нечасто и не можете запомнить.

32. uname

Выводит некую основную информацию о системе. Без параметров она не покажет ничего полезного, кроме строчки Linux, но, если задать параметр -a (All), можно получить информацию о ядре, имени хоста и узнать архитектуру процессора.

33. uptime

Сообщает вам время работы системы. Не очень существенная информация, но может быть полезна для случайных вычислений или просто ради интереса, чтобы узнать, как давно был перезагружен сервер.

34. sleep

Вам, наверное, интересно как же её можно использовать. Даже не учитывая Bash-скриптинг, у неё есть свои преимущества. Например, если вы хотите выключить компьютер через определенный промежуток времени или использовать в качестве импровизированной тревоги.

Команды Linux для управления пользователями

35. useradd / userdel / usermod

Эти команды консоли Linux позволяют вам добавлять, удалять и изменять учетные записи пользователей. Скорее всего, вы не будете использовать их очень часто. Особенно если это домашний компьютер, и вы являетесь единственным пользователем. Управлять пользователями можно и с помощью графического интерфейса, но лучше знать об этих командах на всякий случай.

36. passwd

Эта команда позволяет изменить пароль учетной записи пользователя. Как суперпользователь вы можете сбросить пароли всех пользователей, даже несмотря на то, что не можете их увидеть. Хорошая практика безопасности — менять пароль почаще.

Linux команды для просмотра документации

37. man / whatis

Команда man открывает руководство по определённой команде. Для всех основных команд Linux есть man страницы. Whatis показывает, какие разделы руководств есть для данной команды.

38. whereis

Показывает полный путь к исполняемому файлу программы. Также может показать путь к исходникам, если они есть в системе.

Команды Linux для управления сетью

39. ip

Если список команд Linux для управления сетью вам кажется слишком коротким, скорее всего вы не знакомы с утилитой ip. В пакете net-tools содержится множество других утилит: ipconfig, netstat и прочие устаревшие, вроде iproute2. Всё это заменяет одна утилита — ip. Вы можете рассматривать её как швейцарский армейский нож для работы с сетью или как непонятную массу, но в любом случае за ней будущее. Просто смиритесь с этим.

40. ping

Ping — это ICMP ECHO_REQUEST дейтаграммы, но на самом деле это неважно. Важно то, что утилита ping может быть очень полезным диагностическим инструментом. Она поможет быстро проверить, подключены ли вы к маршрутизатору или к интернету, и дает кое-какое представление о качестве этой связи.

41. nethogs

Если у вас медленный интернет, то вам, наверное, было бы интересно знать, сколько трафика использует какая-либо программа в Linux или какая программа потребляет всю скорость. Теперь это можно сделать с помощью утилиты nethogs. Для того чтобы задать сетевой интерфейс используйте опцию -i.

42. traceroute

Это усовершенствованная версия ping. Мы можем увидеть не только полный маршрут сетевых пакетов, но и доступность узла, а также время доставки этих пакетов на каждый из узлов.

Выводы

Мы рассмотрели основные команды Linux, которые могут пригодиться вам при повседневном использовании системы. Если вы считаете, что есть другие команды, которые нужно добавить в этот список, напишите в комментариях!

Команды Linux. Справочник

Что представляют собой команды? Это — основа всех основ. Хотя информация о них подчас рассредоточена в разных местах, не всегда отличается полнотой, в ряде дистрибутивов на некоторые команды вообще отсутствует документация. Книга «Команды Linux. Справочник. Издание третье, переработанное и дополненное» содержит свыше 530 команд, классических и совсем новых, популярных и не очень, незаслуженно забытых или не нашедших у нас должного распространения. Их описания расположены в алфавитном порядке. Все команды также классифицированы по тематическим направлениям и представлены в разделе «Типовые операции».
Третье издание дополнено новыми командами по самым разным направлениям. Большое внимание уделено файловым системам cxt3 и ReiserFS и связанным с ними командам. Расширены приложения VI и VII.
Справочник рассчитан на пользователей Linux без привязки к определенному дистрибутиву, а также на пользователей FrceBSD и ОС Unix.

Справочник по C++

Написанное в данной статье верно для копилятора gcc.

Структура программы:

Необходимый набор в шаблоне прогораммы;

Комментарии в С++:

/* — начало комментария

*/— конец комментария

//— однострочный комментарий

Пример:

Заголовок программы:

#include

(в поздних версиях компилятора #include устаревший стиль)

Пример:

Пространство имени (|):

using namespace ‘название пространства имён’;

Пример:

Макросы:

#define ‘имя макроса’ ‘значение макроса’

Пример:

Таблица типов:

Диапазон шестнадцатиричных констант. Диапазон восьмеричных констант Тип.
0x0-0x7FF 0-077777 int
0x8000-0xFFFF 0100000-0177777 unsigned int
0x10000-0x7FFFFFFF 0200000-017777777777 long
0x80000000-0xFFFFFFFF 020000000000-037777777777 unsigneg long

Консольный ввод и вывод:

>-это оператор ввода.

count >‘имя переменной’;

Пример:

printf(‘строка вывода с кодами типов переменных ‘ ,’ссылки на переменные записанные в той же последовательности’)

scanf(‘коды переменных с разделителями’, ‘ссылки на переменные записанные в той же последовательности’)

Спецификатор Тип
отсутсвует int или unsigneg int
l long int или unsigned long int
hh Аргумент int или unsigned int. Приведение к типу signed char или unsigned char.
h Аргумент int или unsigned int. Приведение к типу short int или unsigned short int.
ll long long int или unsigned long long int
j intmax_t или uintmax_t
z size_t
t ptrdiff_t
L __int64 или unsigned __int64

Унарные опеарации:

Знак операции Операция Группа операций
* Умножение Мультипликативные code > [ attr rowspan = «3» ]
/ Деление
% Остаток от деления
+ Сложение Аддитивные code > code > [ attr rowspan = «2» ]
Вычитание
#171;lt; code > [ attr rowspan = «2» ]
#171;gt;>« Сдвиг в право
#171;lt;« Меньше Операция отношения code > [ attr rowspan = «6» ]
#171;gt;« Больше
#171;lt;=« Меньше или равно
#171;gt;=« Больше или равно
== Равно
!= Не равно
#171;amp;« Поразрядное И Поразрядные операции code > [ attr rowspan = «3» ]
| Поразрядное ИЛИ
^ Поразрядное исключающее ИЛИ
#171;amp;&« Логическое И Логические операции code > [ attr rowspan = «2» ]
|| Логическое ИЛИ
, Последовательное вычисление Последовательные вычисления
= Присваивание Операции присваивания code > [ attr rowspan = «11» ]
*= Умножение с присваиванием
/= Деление с присваиваниеме
%= Остаток от деления с присваиванием
-= Вычитание с присваиванием
+= Сложение с присваиванием
#171;lt; =« Сдвиг в право с присваиванием
#171;amp;=« Поразрядное И с присваиванием
|= Поразрядное ИЛИ с присваиванием
^= Поразрядное исключающее ИЛИ с присваиванием

Таблица управляющих последовательностей:


class ‘имя класса’<

‘закрытые функции и переменные класса’;

public:

‘имя класса’(‘список параметров’); //Конструктор

‘имя класса’(); //Деструктор

‘открытые функции и переменные класса’;

> ‘список объектов’;

Определение функции-члена:

‘тип возращаемого значения’ ‘имя класса’::‘имя функции’ (‘список параметров’)

‘тело функции’;

Определение конструктора:

‘имя класса’::‘имя класса’ (‘список параметров’)

‘тело конструктора’;

Определение деструктора

‘имя класса’ (‘список параметров’)

‘тело деструктора’;

Объявление класса:

‘имя класса’ ‘имя объекта’(‘список параметров’);

Обращение к членам класса:

‘имя класса’.‘член класса’;

‘имя класса’->‘член класса’;

Пример:

Структуры:

struct ‘имя структуры’<

‘имя структуры’(‘список параметров’);//Конструктор

‘имя структуры’(); //Деструктор

‘открытые функции и переменные структуры’;

private:

‘закрытые функции и переменные структуры’;

> ‘список объектов’;

Определение функции-члена, конструктора, деструктора, объявление структуры, обращение к членам структуры такие же как у класса.

Встраиваемые функции:

inline ‘тип возращаемого значения’ ‘имя функции’(‘список параметров’)

‘тело функции’;

Пример:

Встраиваемые функции в объявлении класса:

public:

‘тип возвращаемого значения’ ‘имя функции’(‘список параметров’)<‘тело функции’;>

Пример:

Дружеские функции:

class ‘имя класса’<

public:

friend ‘тип возвращаемого значения’ ‘имя функции’(‘список параметров’);

‘тип возвращаемого значения’ ‘имя функции’ (‘список параметров’);

Пример:

Комментарии:

Комментарии 4

1. Точка с запятой после using namespace std не нужна;
2. В for’е то, что стоит в круглых скобках разделяется точками с запятыми, а не запятыми;
3. Для кода на любом языке всегда используй моноширинный шрифт (Courier, Courier New, Consolas, monospace), даже если этот код не выделен в отдельный абзац;
4. Там, где написано «Обращение к членам класса» используется один символ двоеточия, не верно;
5. #include без .h — это не устаревший стиль, это заголовочные файлы, пришедшие из чистого С. В C++ заголовочные файлы часто без расширения и все идентификаторы, объявленные в этих заголовочных файлах группируются в пространство имён std.

А так, неплохой краткий справочник по синтаксису=)

Здравствуйте.
Большое спасибо, что вы захотели сделать мой справочник лучше, это мне очень льстит.

>1. Точка с запятой после using namespace std не нужна;
К сожалению многие компиляторы с вами не согласяться. Возможно вы имели ввиду конструкцию:
namespace std
<

>
Тогда да, точка с зяпятой после неё дейтсвительно не нужна.
Или можете сказать название компилятора или IDE, где это работает?

>2. В for’е то, что стоит в круглых скобках разделяется точками с запятыми, а не запятыми;
Да, косяк поправил.

>3. Для кода на любом языке всегда используй моноширинный шрифт (Courier, Courier New, Consolas, monospace), даже если этот код не выделен в отдельный абзац;
посмотрел на Courier, стало скучнее. �� Лан, пусть дети привыкают.

4. Там, где написано «Обращение к членам класса» используется один символ двоеточия, не верно;
>> поменял на точку и стрелочку.

>> 5. #include без .h — это не устаревший стиль, это заголовочные файлы, пришедшие из чистого С. В C++ заголовочные файлы часто без расширения и все идентификаторы, объявленные в этих заголовочных файлах группируются в пространство имён std.

Убрал слова «в поздних версиях компилятора». В данное время это вызывает смущение у людей.
То, что он прешёл из C оно не отменяет «устаревший стиль», это и было «в поздних версиях компилятора». Объясню, я хотел этим сказать себе, что данный стиль объявления библиотек использовать не стоит, так как он пришёл из «прошлого» и сейчас есть механизмы намного лучше.

>А так, неплохой краткий справочник по синтаксису=)

И ещё раз спасибо, что обратили внимания на данную статью.

Ещё одна проблема:
n=2 ? str=’да’ : str=’нет’;
некорректно.
Используй следующее:
str = (n == 2 ? «да» : «нет»);
Обрати внимание, что строки-константы заключаются в двойные кавычки.
Весь тернарный оператор возвращает либо часть между символами «?» и «:», либо часть после символа «:». Возвращать результат операции присваивания является избыточным, как в твоём примере.
Сорре, что так много написал, кратко просмотрел, просто хотелось, чтобы справочник был лучше, он же вылез одним из первых в google-поисковике, а значит меньше ошибок должно быть, особенно таких критических.

Я очень люблю фидбеки. Так что извинятся вообще не стоит. ��
здесь был вопрос в понятности этого написания для не подготовленного человека. ��
здесь str = (n == 2 ? «да» : «нет»); сильно много равно рядом, и глазу не за что зацепиться �� решил разбавить написал:
count

Linux.yaroslavl.ru

Материал этой главы относится к интерфейсу между с-программами и операционной системой UNIX. Так как большинство пользователей языка «Си» работают на системе UNIX, эта глава окажется полезной для большинства читателей. Даже если вы используете с-компилятор на другой машине, изучение приводимых здесь примеров должно помочь вам глубже проникнуть в методы программирования на языке «C».

Эта глава делится на три основные части: ввод/вывод, система файлов и распределение памяти. Первые две части предполагают небольшое знакомство с внешними характеристиками системы UNIX.

В главе 7 мы имели дело с системным интерфейсом, который одинаков для всего многообразия операционных систем. На каждой конкретной системе функции стандартной библиотеки должны быть написаны в терминах ввода-вывода, доступных на данной машине. В следующих нескольких разделах мы опишем основную систему связанных с вводом и выводом точек входа операционной системы UNIX и проиллюстрируем, как с их помощью могут быть реализованы различные части стандартной библиотеки.

Содержание

Дескрипторы файлов.

В операционной системе UNIX весь ввод и вывод осуществляется посредством чтения файлов или их записи, потому что все периферийные устройства, включая даже терминал пользователя, являются файлами определенной файловой системы. Это означает, что один однородный интерфейс управляет всеми связями между программой и периферийными устройствами.

В наиболее общем случае перед чтением из файла или записью в файл необходимо сообщить системе о вашем намерении; этот процесс называется «открытием» файла. Система выясняет,имеете ли вы право поступать таким образом (существует ли этот файл? Имеется ли у вас разрешение на обращение к нему?), и если все в порядке, возвращает в программу небольшое положительное целое число, называемое дескриптором файла. Всякий раз, когда этот файл используется для ввода или вывода, для идентификации файла употребляется дескриптор файла, а не его имя. (здесь существует примерная аналогия с использованием read (5. ) и write (6. ) в фортране). Вся информация об открытом файле содержится в системе; программа пользователя обращается к файлу только через дескриптор файла.

Для удобства выполнения обычных операций ввода и вывода с помощью терминала пользователя существуют специальные соглашения. Когда интерпретатор команд («shell») прогоняет программу, он открывает три файла, называемые стандартным вводом, стандартным выводом и стандартным выводом ошибок, которые имеют соответственно числа 0, 1 и 2 в качестве дескрипторов этих файлов. В нормальном состоянии все они связаны с терминалом, так что если программа читает с дескриптором файла 0 и пишет с дескрипторами файлов 1 и 2, то она может осуществлять ввод и вывод с помощью терминала, не заботясь об открытии соответствующих файлов.

Пользователь программы может перенаправлять ввод и вывод на файлы, используя операции командного интерпретатора shell » » : В этом случае интерпретатор команд shell изменит присваивание по умолчанию дескрипторов файлов 0 и 1 с терминала на указанные файлы. Нормально дескриптор файла 2 остается связанным с терминалом, так что сообщения об ошибках могут поступать туда. Подобные замечания справедливы и тогда, когда ввод и вывод связан с каналом. Следует отметить, что во всех случаях прикрепления файлов изменяются интерпретатором shell, а не программой. Сама программа, пока она использует файл 0 для ввода и файлы 1 и 2 для вывода, не знает ни откуда приходит ее ввод, ни куда поступает ее выдача.

Низкоуровневый ввод/вывод — операторы read и write.

Самый низкий уровень ввода/вывода в системе UNIX не предусматривает ни какой-либо буферизации, ни какого-либо другого сервиса; он по существу является непосредственным входом в операционную систему. Весь ввод и вывод осуществляется двумя функциями: read и write. Первым аргументом обеих функций является дескриптор файла. Вторым аргументом является буфер в вашей программе, откуда или куда должны поступать данные. Третий аргумент — это число подлежащих пересылке байтов. Обращения к этим функциям имеют вид: При каждом обращении возвращается счетчик байтов, указывающий фактическое число переданных байтов. При чтении возвращенное число байтов может оказаться меньше, чем запрошенное число. Возвращенное нулевое число байтов означает конец файла, а «-1» указывает на наличие какой-либо ошибки. При записи возвращенное значение равно числу фактически записанных байтов; несовпадение этого числа с числом байтов, которое предполагалось записать, обычно свидетельствует об ошибке.

Количество байтов, подлежащих чтению или записи, может быть совершенно произвольным. Двумя самыми распространенными величинами являются «1», которая означает передачу одного символа за обращение (т.е. без использования буфера), и «512», которая соответствует физическому размеру блока на многих периферийных устройствах. Этот последний размер будет наиболее эффективным, но даже ввод или вывод по одному символу за обращение не будет необыкновенно дорогим.

Об’единив все эти факты, мы написали простую программу для копирования ввода на вывод, эквивалентную программе копировки файлов, написанной в главе 1. На системе UNIX эта программа будет копировать что угодно куда угодно, потому что ввод и вывод могут быть перенаправлены на любой файл или устройство. Если размер файла не будет кратен BUFSIZE, то при некотором обращении к read будет возвращено меньшее число байтов, которые затем записываются с помощью write; при следующем после этого обращении к read будет возвращен нуль.

Поучительно разобраться, как можно использовать функции read и write для построения процедур более высокого уровня, таких как getchar, putchar и т.д. вот, например, вариант функции getchar, осуществляющий ввод без использования буфера. Переменная «c» должна быть описана как char, потому что функция read принимает указатель на символы. Возвращаемый символ должен быть маскирован числом 0377 для гарантии его положительности; в противном случае знаковый разряд может сделать его значение отрицательным. (Константа 0377 подходит для эвм pdp-11, но не обязательно для других машин).

Второй вариант функции getchar осуществляет ввод большими порциями, а выдает символы по одному за обращение.

Открытие, создание, закрытие и расцепление (unlink).

Кроме случая, когда по умолчанию определены стандартные файлы ввода, вывода и ошибок, вы должны явно открывать файлы, чтобы затем читать из них или писать в них. Для этой цели существуют две точки входа: open и creat.

Функция open весьма сходна с функцией fopen, рассмотренной в главе 7, за исключением того, что вместо возвращения указателя файла она возвращает дескриптор файла, который является просто целым типа int. Как и в случае fopen, аргумент name является символьной строкой, соответствующей внешнему имени файла. Однако аргумент, определяющий режим доступа, отличен: rwmode равно: 0 — для чтения, 1 — для записи, 2 — для чтения и записи. Если происходит какая-то ошибка, функция open возвращает «-1»; в противном случае она возвращает действительный дескриптор файла.

Попытка открыть файл, который не существует, является ошибкой. Точка входа creat предоставляет возможность создания новых файлов или перезаписи старых. В результате обращения возвращает дескриптор файла, если оказалось возможным создать файл с именем name, и «-1» в противном случае. Если файл с таким именем уже существует, creat усечет его до нулевой длины; создание файла, который уже существует, не является ошибкой.

Если файл является совершенно новым, то creat создает его с определенным режимом защиты, специфицируемым аргументом pmode. В системе файлов на UNIX с файлом связываются девять битов защиты информации, которые управляют разрешением на чтение, запись и выполнение для владельца файла, для группы владельцев и для всех остальных пользователей. Таким образом, трехзначное восьмеричное число наиболее удобно для спецификации разрешений. Например, число 0755 свидетельствует о разрешении на чтение, запись и выполнение для владельца и о разрешении на чтение и выполнение для группы и всех остальных.

Для иллюстрации ниже приводится программа копирования одного файла в другой, являющаяся упрощенным вариантом утилиты ср системы UNIX. (Основное упрощение заключается в том, что наш вариант копирует только один файл и что второй аргумент не должен быть справочником).

Существует ограничение (обычно 15 — 25) на количество файлов, которые программа может иметь открытыми одновременно. В соответствии с этим любая программа, собирающаяся работать со многими файлами, должна быть подготовлена к повторному использованию дескрипторов файлов. Процедура close прерывает связь между дескриптором файла и открытым файлом и освобождает дескриптор файла для использования с некоторым другим файлом. Завершение выполнения программы через exit или в результате возврата из ведущей программы приводит к закрытию всех открытых файлов.

Функция расцепления unlink (filename) удаляет из системы файлов файл с именем filename ( из данного справочного файла. Файл может быть сцеплен с другим справочником, возможно, под другим именем — примеч.переводчика). Упражнение 8-1. Перепишите программу cat из главы 7, используя функции read, write, open и close вместо их эквивалентов из стандартной библиотеки. Проведите эксперименты для определения относительной скорости работы этих двух вариантов.

Произвольный доступ — seek и lseek.

Нормально при работе с файлами ввод и вывод осуществляется последовательно: при каждом обращении к функциям read и write чтение или запись начинаются с позиции, непосредственно следующей за предыдущей обработанной. Но при необходимости файл может читаться или записываться в любом произвольном порядке. Обращение к системе с помощью функции lseek позволяет передвигаться по файлу, не производя фактического чтения или записи. В результате обращения текущая позиция в файле с дескриптором fd передвигается на позицию offset (смещение), которая отсчитывается от места, указываемого аргументом origin (начало отсчета). Последующее чтение или запись будут теперь начинаться с этой позиции. Аргумент offset имеет тип long; fd и origin имеют тип int. Аргумент origin может принимать значения 0,1 или 2, указывая на то, что величина offset должна отсчитываться соответственно от начала файла, от текущей позиции или от конца файла. Например, чтобы дополнить файл, следует перед записью найти его конец: Чтобы вернуться к началу («перемотать обратно»), можно написать: Обратите внимание на аргумент 0l; его можно было бы записать и в виде (long) 0.

Функция lseek позволяет обращаться с файлами примерно так же, как с большими массивами, правда ценой более медленного доступа. Следующая простая функция, например, считывает любое количество байтов, начиная с произвольного места в файле.

В более ранних редакциях, чем редакция 7 системы UNIX, основная точка входа в систему ввода-вывода называется seek. Функция seek идентична функции lseek, за исключением того, что аргумент offset имеет тип int, а не long. В соответствии с этим, поскольку на pdp-11 целые имеют только 16 битов, аргумент offset, указываемый функции seek, ограничен величиной 65535; по этой причине аргумент origin может иметь значения 3, 4, 5, которые заставляют функцию seek умножить заданное значение offset на 512 (количество байтов в одном физическом блоке) и затем интерпретировать origin, как если это 0, 1 или 2 соответственно. Следовательно, чтобы достичь произвольного места в большом файле, нужно два обращения к seek: сначала одно, которое выделяет нужный блок, а затем второе, где origin имеет значение 1 и которое осуществляет передвижение на желаемый байт внутри блока. Упражнение 8-2. Очевидно, что seek может быть написана в терминалах lseek и наоборот. Напишите каждую функцию через другую.

Пример — реализация функций fopen и getc.

Давайте теперь на примере реализации функций fopen и getc из стандартной библиотеки подпрограмм продемонстрируем, как некоторые из описанных элементов об’единяются вместе.

Напомним, что в стандартной библиотеке файлы описыватся посредством указателей файлов, а не дескрипторов. Указатель файла является указателем на структуру, которая содержит несколько элементов информации о файле: указатель буфера, чтобы файл мог читаться большими порциями; счетчик числа символов, оставшихся в буфере; указатель следующей позиции символа в буфере; некоторые признаки, указывающие режим чтения или записи и т.д.; дескриптор файла.

Описывающая файл структура данных содержится в файле stdio.h, который должен включаться (посредством #include) в любой исходный файл, в котором используются функции из стандартной библиотеки. Он также включается функциями этой библиотеки. В приводимой ниже выдержке из файла stdio.h. Имена, предназначаемые только для использования функциями библиотеки, начинаются с подчеркивания, с тем чтобы уменьшить вероятность совпадения с именами в программе пользователя.

В нормальном состоянии макрос getc просто уменьшает счетчик, передвигает указатель и возвращает символ. (если определение #define слишком длинное, то оно продолжается с помощью обратной косой черты). Если однако счетчик становится отрицательным, то getc вызывает функцию _filebuf, которая снова заполняет буфер, реинициализирует содержимое структуры и возвращает символ. Функция может предоставлять переносимый интерфейс и в то же время содержать непереносимые конструкции: getc маскирует символ числом 0377, которое подавляет знаковое расширение, осуществляемое на pdp-11, и тем самым гарантирует положительность всех символов.

Хотя мы не собираемся обсуждать какиe-либо детали, мы все же включили сюда определение макроса putc, для того чтобы показать, что она работает в основном точно также, как и getc, обращаясь при заполнении буфера к функции _flushbuf.

Теперь может быть написана функция fopen. Большая часть программы функции fopen связана с открыванием файла и расположением его в нужном месте, а также с установлением битов признаков таким образом, чтобы они указывали нужное состояние. Функция fopen не выделяет какой-либо буферной памяти; это делается функцией _filebuf при первом чтении из файла.

Функция _filebuf несколько более сложная. Основная трудность заключается в том, что _filebuf стремится разрешить доступ к файлу и в том случае, когда может не оказаться достаточно места в памяти для буферизации ввода или вывода. Если пространство для нового буфера может быть получено обращением к функции calloc, то все отлично; если же нет, то _filebuf осуществляет небуферизованный ввод/ вывод, используя отдельный символ, помещенный в локальном массиве. При первом обращении к getc для конкретного файла счетчик оказывается равным нулю, что приводит к обращению к _filebuf. Если функция _filebuf найдет, что этот файл не открыт для чтения, она немедленно возвращает EOF. В противном случае она пытается выделить большой буфер, а если ей это не удается, то буфер из одного символа. При этом она заносит в _flag соответствующую информацию о буферизации.

Раз буфер уже создан, функция _filebuf просто вызывает функцию read для его заполнения, устанавливает счетчик и указатели и возвращает символ из начала буфера.

Единственный оставшийся невыясненным вопрос состоит в том, как все начинается. Массив _iob должен быть определен и инициализирован для stdin, stdout и stderr: Из инициализации части _flag этого массива структур видно, что файл stdin предназначен для чтения, файл stdout — для записи и файл stderr — для записи без использования буфера. Упражнение 8-3. Перепишите функции fopen и _filebuf, используя поля вместо явных побитовых операций.

Упражнение 8-4. Разработайте и напишите функции _flushbuf и fclose.

Упражнение 8-5. Стандартная библиотека содержит функцию которая идентична функции lseek, исключая то, что fp является указателем файла, а не дескриптором файла. Напишите fseek. Убедитесь, что ваша fseek правильно согласуется с буферизацией, сделанной для других функций библиотеки.

Пример — распечатка справочников

Иногда требуется другой вид взаимодействия с системой файлов — определение информации о файле, а не того, что в нем содержится. Примером может служить команда ls («список справочника») системы UNIX. По этой команде распечатываются имена файлов из справочника и, необязательно, другая информация, такая как размеры, разрешения и т.д.

Поскольку, по крайней мере, на системе UNIX справочник является просто файлом, то в такой команде, как ls нет ничего особенного; она читает файл и выделяет нужные части из находящейся там информации. Однако формат информации определяется системой, так что ls должна знать, в каком виде все представляется в системе.

Мы это частично проиллюстрируем при написании программы fsize. Программа fsize представляет собой специальную форму ls, которая печатает размеры всех файлов, указанных в списке ее аргументов. Если один из файлов является справочником, то для обработки этого справочника программа fsize обращается сама к себе рекурсивно. Если же аргументы вообще отсутствуют, то обрабатывается текущий справочник.

Для начала дадим краткий обзор структуры системы файлов. Справочник — это файл, который содержит список имен файлов и некоторое указание о том, где они размещаются. Фактически это указание является индексом для другой таблицы, которую называют «i — узловой таблицей». Для файла i-узел — это то, где содержится вся информация о файле, за исключением его имени. Запись в справочнике состоит только из двух элементов: номера i-узла и имени файла. Точная спецификация поступает при включении файла sys/dir.h, который содержит

«Тип» ino_t — это определяемый посредством typedef тип, который описывает индекс i-узловой таблицы. На pdp-11 UNIX этим типом оказывается unsigned, но это не тот сорт информации, который помещают внутрь программы: на разных системах этот тип может быть различным. Поэтому и следует использовать typedef. Полный набор «системных» типов находится в файле sys/types.h.

Функция stat берет имя файла и возвращает всю содержащуюся в i-ом узле информацию об этом файле (или -1, если имеется ошибка). Таким образом, в результате структура stbuf наполняется информацией из i-го узла о файле с именем name. Структура, описывающая возвращаемую функцией stat информацию, находится в файле sys/stat.h И выглядит следующим образом: Большая часть этой информации об’ясняется в комментариях. Элемент st.mode Содержит набор флагов, описывающих файл; для удобства определения флагов также находятся в файле sys/stat.h.

Теперь мы в состоянии написать программу fsize. Если полученный от функции stat режим указывает, что файл не является справочником, то его размер уже под рукой и может быть напечатан непосредственно. Если же он оказывается справочником, то мы должны обрабатывать этот справочник отдельно для каждого файла; так как справочник может в свою очередь содержать подсправочники, этот процесс обработки является рекурсивным.

Как обычно, ведущая программа главным образом имеет дело с командной строкой аргументов; она передает каждый аргумент функции fsize в большой буфер.

Функция fsize печатает размер файла. Если однако файл оказывается справочником, то fsize сначала вызывает функцию directory для обработки всех указанных в нем файлов. Обратите внимание на использование имен флагов S_IFMT и _ifdir из файла stat.h.

Функция directory является самой сложной. Однако значительная ее часть связана с созданием для обрабатываемого в данный момент файла его полного имени, по которому можно восстановить путь в дереве.

Если некоторая дыра в справочнике в настоящее время не используется (потому что файл был удален), то в соответствующее i-узловое число равно нулю, и эта позиция пропускается. Каждый справочник также содержит запись в самом себе, называемую «.», и о своем родителе, «..»; они, очевидно, также должны быть пропущены, а то программа будет работать весьма и весьма долго.

Хотя программа fsize довольно специализированна, она все же демонстрирует пару важных идей. Во-первых, многие программы не являются «системными программами»; они только используют информацию, форма или содержание которой определяется операционной системой. Во-вторых, для таких программ существенно, что представление этой информации входит только в стандартные «заголовочные файлы», такие как stat.h И dir.h, и что программы включают эти файлы, а не помещают фактические описания внутрь самих программ.

Пример — распределитель памяти.

В главе 5 мы написали бесхитростный вариант функции alloc. Вариант, который мы напишем теперь, не содержит ограничений: обращения к функциям alloc и free могут перемежаться в любом порядке; когда это необходимо, функция alloc обращается к операционной системе за дополнительной памятью. Кроме того, что эти процедуры полезны сами по себе, они также иллюстрируют некоторые соображения, связанные с написанием машинно-зависимых программ относительно машинно-независимым образом, и показывают практическое применение структур, об’единений и конструкций typedef.

Вместо того, чтобы выделять память из скомпилированного внутри массива фиксированного размера, функция alloc будет по мере необходимости обращаться за памятью к операционной системе. Поскольку различные события в программе могут требовать асинхронного выделения памяти, то память, управляемая alloc, не может быть непрерывной. В силу этого свободная память хранится в виде цепочки свободных блоков. Каждый блок включает размер, указатель следующего блока и саму свободную память. Блоки упорядочиваются в порядке возрастания адресов памяти, причем последний блок (с наибольшим адресом) указывает на первый, так что цепочка фактически оказывается кольцом.

При поступлении запроса список свободных блоков просматривается до тех пор, пока не будет найден достаточно большой блок. Если этот блок имеет в точности требуемый размер, то он отцепляется от списка и передается пользователю. Если же этот блок слишком велик, то он разделяется, нужное количество передается пользователю, а остаток возвращается в свободный список. Если достаточно большого блока найти не удается, то операционной системой выделяется новый блок, который включается в список свободных блоков; затем поиск возобновляется.

Освобождение памяти также влечет за собой просмотр свободного списка в поиске подходящего места для введения освобожденного блока. Если этот освободившийся блок с какой-либо стороны примыкает к блоку из списка свободных блоков, то они об’единяются в один блок большего размера, так что память не становится слишком раздробленной. Обнаружить смежные блоки просто, потому что свободный список содержится в порядке возрастания адресов.

Одна из проблем, о которой мы упоминали в главе 5, заключается в обеспечении того, чтобы возвращаемая функцией alloc память была выровнена подходящим образом для тех об’ектов, которые будут в ней храниться. Хотя машины и различаются, для каждой машины существует тип, требующий наибольших ограничений по размещению памяти, если данные самого ограничительного типа можно поместить в некоторый определенный адрес, то это же возможно и для всех остальных типов. Например, на ibm 360/370,honeywell 6000 и многих других машинах любой об’ект может храниться в границах, соответствующим переменным типа double; на pdp-11 будут достаточны переменные типа int.

Свободный блок содержит указатель следующего блока в цепочке, запись о размере блока и само свободное пространство; управляющая информация в начале называется заголовком. Для упрощения выравнивания все блоки кратны размеру заголовка, а сам заголовок выровнен надлежащим образом. Это достигается с помощью об’единения, которое содержит желаемую структуру заголовка и образец наиболее ограничительного по выравниванию типа:

Функция alloc округляет требуемый размер в символах до нужного числа единиц размера заголовка; фактический блок, который будет выделен, Иодержит на одну единицу больше, предназначаемую для самого заголовка, и это и есть значение, которое записывается в поле size заголовка. Указатель, возвращаемый функцией alloc, указывает на свободное пространство, а не на сам заголовок.

Переменная base используется для начала работы. Если allocp имеет значение NULL, как в случае первого обращения к alloc, то создается вырожденный свободный список: он состоит из свободного блока размера нуль и указателя на самого себя. В любом случае затем исследуется свободный список. Поиск свободного блока подходящего размера начинается с того места (allocp), где был найден последний блок; такая стратегия помогает сохранить однородность диска. Если найден слишком большой блок, то пользователю предлагается его хвостовая часть; это приводит к тому, что в заголовке исходного блока нужно изменить только его размер. Во всех случаях возвращаемый пользователю указатель указывает на действительно свободную область, лежащую на единицу дальше заголовка. Обратите внимание на то, что функция alloc перед возвращением «p» преобразует его в указатель на символы.

Функция morecore получает память от операционной системы. Детали того, как это осуществляется, меняются, конечно, от системы к системе. На системе UNIX точка входа sbrk(n) возвращает указатель на «n» дополнительных байтов памяти.(указатель удволетворяет всем ограничениям на выравнивание). Так как запрос к системе на выделение памяти является сравнительно дорогой операцией, мы не хотим делать это при каждом обращении к функции alloc. Поэтому функция morecore округляет затребованное число единиц до большего значения; этот больший блок будет затем разделен так, как необходимо. Масштабирующая величина является параметром, который может быть подобран в соответствии с необходимостью.

Если больше не осталось свободного пространства, то функция sbrk возвращает «-1», хотя NULL был бы лучшим выбором. Для надежности сравнения «-1» должна быть преобразована к типу int. Снова приходится многократно использовать явные преобразования (перевод) типов, чтобы обеспечить определенную независимость функций от деталей представления указателей на различных машинах.

И последнее — сама функция free. Начиная с allocp, она просто просматривает свободный список в поиске места для введения свободного блока. Это место находится либо между двумя существующими блоками, либо в одном из концов списка. В любом случае, если освободившийся блок примыкает к одному из соседних, смежные блоки об’единяются. Следить нужно только затем, чтобы указатели указывали на то, что нужно, и чтобы размеры были установлены правильно.

Хотя распределение памяти по своей сути зависит от используемой машины, приведенная выше программа показывает, как эту зависимость можно регулировать и ограничить весьма небольшой частью программы. Использование typedef и union позволяет справиться с выравниванием (при условии, что функция sbrk обеспечивает подходящий указатель). Переводы типов организуют выполнение явного преобразования типов и даже справляются с неудачно разработанным системным интерфейсом. И хотя рассмотренные здесь подробности связаны с распределением памяти, общий подход равным образом применим и к другим ситуациям. Упражнение 8-6. Функция из стандартной библиотеки calloc(n,size) возвращает указатель на «n» об’ектов размера size, причем соответствующая память инициализируется на нуль. Напишите программу для calloc, используя функцию alloc либо в качестве образца, либо как функцию, к которой происходит обращение.

Упражнение 8-7. Функция alloc принимает затребованный размер, не проверяя его правдоподобности; функция free полагает, что тот блок, который она должна освободить, содержит правильное значение в поле размера. Усовершенствуйте эти процедуры, затратив больше усилий на проверку ошибок.

Упражнение 8-8. Напишите функцию bfree(р,n), которая включает произвольный блок «р» из «n» символов в список свободных блоков, управляемый функциями alloc и free. С помощью функции bfree пользователь может в любое время добавлять в свободный список статический или внешний массив.

Справочник основных команд Linux с примерами

1 Общая информация

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

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

1.3 Специальные символы (групповые операции)+(см. regexp)

В именах файлов нельзя использовать:
/ — использовать запрещено
— — нельзя ипользовать в начале имени файла или каталога
<>, *, ?, ‘, «, [ , ], \, >, — каждый из этих символовдолжен быть предварен \ . Применять не рекомендуется.

В конфигурационных файлах:
# — комментарий
// — комментарий

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

1.5 nano

nano — редактор файлов, более дружелюбный чем vim ;)

  • Ctrl-X — закрыть редактор
  • Ctrl-O — сохранить
  • Ctrl-C — номер строки\текущая позиция
  • Ctrl-W — поиск
  • Ctrl-W затем Ctrl-T — переход к строке №
  • Ctrl-K — вырезать строку
  • Ctrl-U — вставить из буфера
  • Alt-A — выделение (вне X)
  • Alt-6 — копировать в буфер

1.6 vim

vim — редактор файлов, более дружелюбный чем nano ;)

  • ZQ — закрыть редактор
  • ZZ — закрыть и сохранить

1.7 tmux

tmux — аналог screen с одновременным вводом команд в несколько окон

  • ZZ — закрыть редактор
  • ZQ — закрыть и сохранить

2 Система

2.1 Загрузка

Последовательность при загрузке:

Инициализация BIOS => Загрузчик (grub) => Инициализация ядра (kernel initialization) => выполнение init -> => virtual consoles => X

=> Инициализация BIOS:

=> Загрузчик:

=> Инициализация ядра:

=> Выполнение init:

2.2 Hardware

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

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

2.3 Ресурсы и статистика

Ресурсы RAM и HDD

2.4 Ограничения

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

Отключаем ответы сервера на ping

2.5 Runlevels

Ядро стартует init, init читает /etc/inittab и запускает rc, который в свою очередь стартует скрипты определенного уровня (runlevel). Скрипты находятся в /etc/init.d и ссылаются (линкуются) с /etc/rc.d/rcN.d где N номер runlevel
Уровень запуска по умолчанию указывается в /etc/inittab, обычно это 3 или 5.

Уровень запуска можно быстро поменять с init

chkconfig — конфигурирует какие программы будут запускаться при запуске OS с определенным runlevel

В Debian и основанных на Debian дистрибутивах используется update-rc.d для управления скриптами runlevels . По умолчанию стартует в 2,3,4,5 и выключается в 0,1 и 6.

2.6 Восстановить пароль root

Когда стартует grub, появляется возможность выбора режима загрузки в grub_boot_screen (иногда при загрузке нужно нажать F4)
1.Нажимем — попадаем в меню выбора вариантов загрузки kernel и initrd.
2.Нажимаем — для редактирования режима загрузки и дописывем S (загрузка в single user mode). 3.Нажимаем для загрузки с установленным параметром.
4.Выполняем команду и вводим нужный пароль.

В момент загрузки grub, задаем: Ядро примонтирует корневой раздел, init запустит shell. Выполняем:

1.Загружаемся с внешнего носителя в rescue mode (liveCD или installation CD).
2.Находим корневой раздел с помошью fdisk.
3.Выполняем:

2.7 kernel (update kernel)

Варианты ядра для x86:

Варианты ядра для x86_64:

2.8 grub

2.9 Пользователи

2.10 Память

Резидентная память — память в оперативке
Анонимная память (anon) — память без привязки к файлу
Page fault — обращение к памяти, trap

Все операции чтения и записи работают через пейджкэшь
pages recliming — освобождение памяти(sync, disareablw, swap, unreclaim)
LRU листы — организация очередей в cache может быть active innactive (meminfo)
page fault minor — выделение без чтения с диска
page fault major — с чтением диска

3 Процессы

3.1 Просмотр процессов

— уникальный номер(идентификатор) процесса

3.2 Приоритеты

3.3 Background/Foreground


3.4 Top, htop

3.5 Kill, signals

4 Файловая система

Права

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

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

4.4 Блокировка файлов, кто использует файлы?

4.5 Mount/remount

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

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

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

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

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

4.11 Memdisk

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

5 Сеть

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

5.2 Routing

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

5.4 Сменить MAC

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

5.6 Firewall

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

5.8 NAT

5.9 DNS

5.10 DHCP

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

Sniff с tcpdump

5.12 QoS

Ограничение скорости отдачи (Limit upload)

Качество обслуживания (QoS)

5.13 NIS

5.14 Netcat (nc)

Передать файл

Сканер портов

Hacks

6 SSH SCP

6.1 Public key аутентификация

Аутентификация — подтверждение подлинности; установление соответствия лица названному им идентификатору.
Авторизация — процесс предоставления определенному лицу прав на выполнение некоторых действий.
Идентификация — присвоение субъектам и объектам идентификатора и/или сравнение идентификатора с перечнем присвоенных идентификаторов.

Используем ssh-keygen для создания пары ключей.

/.ssh/id_dsa приватный ключ,

/.ssh/id_dsa.pub публичный ключ.
Копируем публичный ключ на сервер и добовляем его в файл

/.ssh/authorized_keys2 в вашу домашнюю папку. Соединяемся с хостом без пароля используя public key аутентификацию

6.2 Проверка подписи (fingerprint)

6.3 Безопасная передача файлов

6.4 Туннелирование (Tunneling)

Прямое перенаправление на шлюз

Форвардинг портов Netbios и RDP

Подключение клиентов, находящихся за NAT

Подключение к рабочему столу, расположенному за NAT

Multi-hop ssh tunnel

Мы не можете получить прямой доступ к ssh сервера,а возможно это только через промежуточные хосты(например из-за проблем с маршрутизацией), но получить соединение клиент-сервер необходимо, к примеру что-бы скопировать файлы через SCP или пробросить порт для SMB. Сделать это можно, организовав туннель из цепочки хостов. Допустим нам нужно перебросить ssh порт клиента к серверу, в два скачка. Когда туннель будет создан, будет возможно прямое подключение клиент — сервер.

Создание туннеля: cli -> host_1 -> host_2 -> сервер and dig tunnel 5678 client -> server используя туннель и порт 5678

Автосоединение (Autoconnect)

6.5 SSH tricks

7 VPN с SSH

OpenSSH поддерживает устройства tun/tap, позволяющие создавать шифрованный туннель. Плюс протокола SSH в том, что для реализации не нужно устанавливать и настраивать дополнительный софт, минус — низкая производительность на медленных линиях.

В /etc/ssh/sshd_config, должны стоять опции:

7.1 P-2-P

Соединим два хоста client и server. Соединение инициирует client к server, при этом он должен обладать правами root. Конечные адреса туннеля 10.0.0.1 (server) и 10.0.0.2 (client), кроме того мы создаем устройство tun1.

7.2 Lan-2-Lan

Есть две сети, их нужно соединить, сеть А с адресом 192.168.51.0/24 и сеть Б с адресом 192.168.16.0/24. 192.168.51.0/24 (сеть A)|шлюз A шлюз Б|192.168.16.0/24 (сеть Б)

8 Backup

8.1 rsync

8.2 tar

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

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

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

8.3 dd

dd ( disk dump или destroy disk ) — используется для копирования (конвертирования) дисков, разделов, и прочих операций копирования.

Размер входных данных по-умолчанию 512 байт (1 блок). Увеличение размера блока ускоряет процесс копирования, но требует больше памяти.

Резервное копирование и восстановление

Recover

dd считывает раздел поблочно, если на диске предположительно есть проблемы, нужно использовать опцию conv=sync,noerror, при этом dd будет пропускать битые блоки и записывать нули на диск назначения. Поэтому важно, установить размер блока, равным, или меньшим, чем размер блока на диске. Вполне подходящим будет размер блока в 1 килобайт, установить размер на входе и выходе можно опцией bs=1k. Если на диске имеются сбойные сектора, но основные данные нужно сохранить с данного раздела, можно создать файл образа, смонтировать образ и копировать данные на новый диск. С установленной опцией noerror, dd пропустит поврежденные блоки, записав на их место нули, при этом, потеряны будут, только данные, содержавшиеся в сбойных секторах диска.

Удаление данных

MBR содержит код загрузчика и таблицу разделов. Первый 466 байт отводятся под загрузчик, 466-512 байт под таблицу размещения разделов.

9 sudo

10 Управление пакетами

10.1 yum rpm apt-get

10.2 репозитории

10.3 update kernel, обновить OS

Обновить дистрибутив

Обновить ядро

11 Полезные команды

11.1 mail

11.2 screen

screen — оконный менеджер виртуальных терминалов

screen имеет две основные функции:
— Запуск нескольких сессий терминала, в одном окне.
— Запуск программ отдельно от терминала в фоновом режиме. Терминал может быть отключен и переподключен позже.

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

11.3 find

Будьте осторожны при использовании xargs или exec, они могут возвращать неверный результат если имена файлов или директорий содержат пробелы. Используйте -print0 | xargs -0, вместо | xargs. Опция -print0 должна быть последней.

11.4 sed

11.5 awk

11.6 Regexp

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

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

12 Shell

/.bashrc ( так-же может быть

+ — вводишь слово, с которым надо найти команду в истории. Повторные + перебирают все команды в истории с этим словом.

+ — удаление текста от курсора до начала строки, + — удаление от курсора до конца строки, + — вставить удаленный предыдущими примерами кусок текста, + — удаление всей строки (обычно работает как отмена команды).

+ — меняет местами символ под курсором и предыдущий набранный (при опечатке вида /dev/dsa вместо /dev/sda)

^^ — После попытки выполнить команду, набранную с ошибкой, строка вида ^ошибка^правильно запустит на выполнение исправленную команду.

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

13 Печать

14 Дисковые квоты

Квоты распределяются на уровне файловой системы и поддерживаются ядром.

Пакет quota, нужно установит дополнительно, затем активировать дисковые квоты в файле fstab и перемонтировать раздел

Инициализация файла quota.user с помощью quotacheck.

По-умолчанию, дисковые квоты не накладывают никаких ограничений (установлены в 0). Установить необходимые лимиты для пользовательских квот можно с помощью программы edquota. Так-же лимиты можно дублировать на других пользователей. Размер блока по-умочанию, 1 kб. Время действия можно установить с помощью edquota -t

Команда edquota -p используется для дублирования квот на других пользователей.

15 Поиск неисправностей

15.1 Поиск неисправностей

16 SSL сертификаты

SSL — Secure Socket Layer, криптографический протокол, использующий шифрование открытым ключем, для защиты передаваемых по сети данных. Протокол SSL, является важным элементом политики безопасности системы. SSL сертификат — электронный документ, используемый для подтверждения принадлежности транзакции тому или иному серверу и установления защищенного соединения между клиентом и сервером с шифрованием трафика. Часто используется на защищенных Веб серверах (https) или Mail серверах (imaps)

— Клиент должен создать сертификат, со всеми необходимыми данными

— Отправить запрос на сертификацию в один из «центров сертификации» (CA). Так-же на данном этапе, будет создан приватный ключ на локальной машине

— После обработки запроса, сертификат подписывается секретным ключем CA. Клиент имея публичный ключ CA, проверяет подлинность сертификата и далее может использовать его

— Если необходимо, можно объединить сертификат и ключ в один файл

Конфигурация OpenSSL

Создать сертификат полномочий

Если у нас нет сертификата, подписанного CA, и вы не планируете отправлять запрос на сертификацию, можно создать свой сертификат

Запрос сертификации (CSR)

Сохраним запрос (newreq.pem), он может быть отправлен снова, для следующего обновления, подпись ограничивает срок действия сертификата. Кроме того, в процессе, будет создан приватный ключ newkey.pem

Подпись сертификата

Подписанный CA сертификат является действующим.

Теперь servernamekey.pem — содержит приватный ключ а servernamecert.pem — сертификат сервера.

Создание объединенного сертификата

IMAP серверу нужно иметь все приватные ключи и серверные сертификаты в одном файле, файл должен храниться в безопасном месте.

Создадим файл servername.pem содержащий и сертификаты и ключи:

1.Открыть файл servernamekey.pem в текстовом редакторе и скопировать приватный ключ в файл servername.pem

2.Открыть файл servernamecert.pem в текстовом редакторе и скопировать сертификат в файл servername.pem

Информация о сертификате

17 Шифрование файлов

17.1 OpenSSL

Зашифровать и расшифровывать:

17.2 GPG

GnuPG известный способ шифрования и подписи электронных писем или других данных, кроме того gpg предоставляет расширенную систему управления ключами. В данных примерах рассматривается только шифрование файлов. Самым простым является симметричный шифр. В этом случае файл шифруется с помощью пароля, соответственно расшифровать его может тот, кто знает этот пароль, никаких ключей не требуется. GPG добавляет расширение «*.gpg» к имени зашифрованного файла

Шифрование с использованием ключей

Приватный ключ и публичный ключ, основа ассиметричной криптографии. О чем нужно помнить:

1.Ваш публичный ключ используется другими для шифрования файлов, которые, как получатель, можете расшифровать только вы (даже не тот, кто его шифровал).

2.Ваш приватный ключ зашифрован по паролю и используется для расшифровки файлов, зашифрованных Вашим публичным ключем. Приваиный ключ должен храниться в безопасном месте. Помните, если приватный ключ или пароль от него будут потеряны, вместе с ними пропадут и зашифрованные файлы.

3.Ключевой файл, может содержать несколько ключей.

Вначале нужно сгенерировать пару ключей. Значения по-умолчанию вполне подойдут, однако вам нужно будет ввести имя, адрес электронной почты и комментарий (не обязательно). Комментарий полезен при создании более одного ключа для данного имени/e-mail. Так-же вам нужно будет задать ключевую фразу (именно фразу а не слово).

Шифрование только для персонального использования

Не требует экспорта/импорта какого либо ключа, они у вас уже есть.

Шифрование и расшифровка с использованием ключей

Нам нужно экспортировать ваш публичный ключ, что-бы им могли пользоваться для расшифровки данных. Мы должны импортировать публичный ключ от Alice, что-бы шифровать файлы для нее. Ключи можно передать в обычном ascii файле. Например Alice экспортирует ключ, вы его импортируете себе, теперь вы можете шифровать для нее файлы и расшифровать их сможет только она.

Управление ключами

18 Шифрование разделов

18.1 LUKS

Используем Linux dm-crypt ( device-mapper ) на ядре 2.6. Шифровать будем раздел /dev/sdc1, это может быть любой раздел, диск, USB или файл, созданный losetup. Здесь мы будем использовать /dev/loop0, смотрите Файловая система. Device mapper использует метку для идентификации раздела, в данном примере sdc1, но это может быть любая другая строка.

LUKS с dm-crypt очень удобен для шифрования разделов диска, он позволяет иметь несколько паролей для одного раздела а так-же с легкостью менять их. Что-бы проверить доступно-ли у вас использование LUKS, наберите: cryptsetup —help.

18.2 dm-crypt

Делаем тоже самое, ( без создания fs ), что-бы переподключить раздел. При вводе некорректного пароля команда mount не будет выполнена. В таком случае просто удалите отображение sdc1 (cryptsetup remove sdc1) и создайте поновой.

Список функций C/С++ (анализ кода в Unix)

Поддерживаем ли мы незнакомый код или проверяем детали реализации модуля Apache, он может помочь, если мы сможем быстро пройти код и составить обзор того, что мы рассматриваем. Grep обслуживает большинство моих ежедневных потребностей, но есть случаи, когда это просто не будет.

Вот общий пример того, как он может помочь. Чтобы найти определение функции PHP, которое меня интересует, я могу ввести ее в командной строке:

Это может быть очень быстро адаптировано к C или С++, если мы знаем тип возвращаемого значения, но все усложняется, если, скажем, я хочу перечислить каждый метод, который предоставляет мой класс:

Так как нет единственного ключевого слова, которое обозначает функцию или метод в С++ и потому что это обычно более сложный синтаксис, я думаю, мне нужен какой-то инструмент для анализа статического кода, умное использование препроцессора C или слепая вера, которую следовал кодер строгие правила кода (# пробелов, положение колючек и т.д.), чтобы получить такие результаты.

Что вы порекомендовали бы?

Запустите это через doxygen. Он будет жаловаться на отсутствие комментариев, но все равно будет генерировать графики вызовов и перечислять все функции. Представлено в HTML со ссылками на пути к коду.

Я использовал его время от времени некоторое время назад и из текстового редактора, но ознакомьтесь со списком утилит/инструментов, которые могут его использовать:

Список функций C/С++ (анализ кода в Unix)

11 jond3k [2010-05-06 21:51:00]

Поддерживаем ли мы незнакомый код или проверяем детали реализации модуля Apache, он может помочь, если мы сможем быстро пройти код и составить обзор того, что мы рассматриваем. Grep обслуживает большинство моих ежедневных потребностей, но есть случаи, когда это просто не будет.

Вот общий пример того, как он может помочь. Чтобы найти определение функции PHP, которое меня интересует, я могу ввести ее в командной строке:

Это может быть очень быстро адаптировано к C или С++, если мы знаем тип возвращаемого значения, но все усложняется, если, скажем, я хочу перечислить каждый метод, который предоставляет мой класс:

Так как нет единственного ключевого слова, которое обозначает функцию или метод в С++ и потому что это обычно более сложный синтаксис, я думаю, мне нужен какой-то инструмент для анализа статического кода, умное использование препроцессора C или слепая вера, которую следовал кодер строгие правила кода (# пробелов, положение колючек и т.д.), чтобы получить такие результаты.

Справочник основных команд Linux с примерами

1 Общая информация

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

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

1.3 Специальные символы (групповые операции)+(см. regexp)

В именах файлов нельзя использовать:
/ — использовать запрещено
— — нельзя ипользовать в начале имени файла или каталога
<>, *, ?, ‘, «, [ , ], \, >, — каждый из этих символовдолжен быть предварен \ . Применять не рекомендуется.

В конфигурационных файлах:
# — комментарий
// — комментарий

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

1.5 nano

nano — редактор файлов, более дружелюбный чем vim ;)

  • Ctrl-X — закрыть редактор
  • Ctrl-O — сохранить
  • Ctrl-C — номер строки\текущая позиция
  • Ctrl-W — поиск
  • Ctrl-W затем Ctrl-T — переход к строке №
  • Ctrl-K — вырезать строку
  • Ctrl-U — вставить из буфера
  • Alt-A — выделение (вне X)
  • Alt-6 — копировать в буфер

1.6 vim

vim — редактор файлов, более дружелюбный чем nano ;)

  • ZQ — закрыть редактор
  • ZZ — закрыть и сохранить

1.7 tmux

tmux — аналог screen с одновременным вводом команд в несколько окон

  • ZZ — закрыть редактор
  • ZQ — закрыть и сохранить


2 Система

2.1 Загрузка

Последовательность при загрузке:

Инициализация BIOS => Загрузчик (grub) => Инициализация ядра (kernel initialization) => выполнение init -> => virtual consoles => X

=> Инициализация BIOS:

=> Загрузчик:

=> Инициализация ядра:

=> Выполнение init:

2.2 Hardware

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

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

2.3 Ресурсы и статистика

Ресурсы RAM и HDD

2.4 Ограничения

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

Отключаем ответы сервера на ping

2.5 Runlevels

Ядро стартует init, init читает /etc/inittab и запускает rc, который в свою очередь стартует скрипты определенного уровня (runlevel). Скрипты находятся в /etc/init.d и ссылаются (линкуются) с /etc/rc.d/rcN.d где N номер runlevel
Уровень запуска по умолчанию указывается в /etc/inittab, обычно это 3 или 5.

Уровень запуска можно быстро поменять с init

chkconfig — конфигурирует какие программы будут запускаться при запуске OS с определенным runlevel

В Debian и основанных на Debian дистрибутивах используется update-rc.d для управления скриптами runlevels . По умолчанию стартует в 2,3,4,5 и выключается в 0,1 и 6.

2.6 Восстановить пароль root

Когда стартует grub, появляется возможность выбора режима загрузки в grub_boot_screen (иногда при загрузке нужно нажать F4)
1.Нажимем — попадаем в меню выбора вариантов загрузки kernel и initrd.
2.Нажимаем — для редактирования режима загрузки и дописывем S (загрузка в single user mode). 3.Нажимаем для загрузки с установленным параметром.
4.Выполняем команду и вводим нужный пароль.

В момент загрузки grub, задаем: Ядро примонтирует корневой раздел, init запустит shell. Выполняем:

1.Загружаемся с внешнего носителя в rescue mode (liveCD или installation CD).
2.Находим корневой раздел с помошью fdisk.
3.Выполняем:

2.7 kernel (update kernel)

Варианты ядра для x86:

Варианты ядра для x86_64:

2.8 grub

2.9 Пользователи

2.10 Память

Резидентная память — память в оперативке
Анонимная память (anon) — память без привязки к файлу
Page fault — обращение к памяти, trap

Все операции чтения и записи работают через пейджкэшь
pages recliming — освобождение памяти(sync, disareablw, swap, unreclaim)
LRU листы — организация очередей в cache может быть active innactive (meminfo)
page fault minor — выделение без чтения с диска
page fault major — с чтением диска

3 Процессы

3.1 Просмотр процессов

— уникальный номер(идентификатор) процесса

3.2 Приоритеты

3.3 Background/Foreground

3.4 Top, htop

3.5 Kill, signals

4 Файловая система

Права

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

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

4.4 Блокировка файлов, кто использует файлы?

4.5 Mount/remount

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

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

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

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

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

4.11 Memdisk

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

5 Сеть

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

5.2 Routing

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

5.4 Сменить MAC

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

5.6 Firewall

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

5.8 NAT

5.9 DNS

5.10 DHCP

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

Sniff с tcpdump

5.12 QoS

Ограничение скорости отдачи (Limit upload)

Качество обслуживания (QoS)

5.13 NIS

5.14 Netcat (nc)

Передать файл

Сканер портов

Hacks

6 SSH SCP

6.1 Public key аутентификация

Аутентификация — подтверждение подлинности; установление соответствия лица названному им идентификатору.
Авторизация — процесс предоставления определенному лицу прав на выполнение некоторых действий.
Идентификация — присвоение субъектам и объектам идентификатора и/или сравнение идентификатора с перечнем присвоенных идентификаторов.

Используем ssh-keygen для создания пары ключей.

/.ssh/id_dsa приватный ключ,

/.ssh/id_dsa.pub публичный ключ.
Копируем публичный ключ на сервер и добовляем его в файл

/.ssh/authorized_keys2 в вашу домашнюю папку. Соединяемся с хостом без пароля используя public key аутентификацию

6.2 Проверка подписи (fingerprint)

6.3 Безопасная передача файлов

6.4 Туннелирование (Tunneling)

Прямое перенаправление на шлюз

Форвардинг портов Netbios и RDP

Подключение клиентов, находящихся за NAT

Подключение к рабочему столу, расположенному за NAT

Multi-hop ssh tunnel

Мы не можете получить прямой доступ к ssh сервера,а возможно это только через промежуточные хосты(например из-за проблем с маршрутизацией), но получить соединение клиент-сервер необходимо, к примеру что-бы скопировать файлы через SCP или пробросить порт для SMB. Сделать это можно, организовав туннель из цепочки хостов. Допустим нам нужно перебросить ssh порт клиента к серверу, в два скачка. Когда туннель будет создан, будет возможно прямое подключение клиент — сервер.

Создание туннеля: cli -> host_1 -> host_2 -> сервер and dig tunnel 5678 client -> server используя туннель и порт 5678

Автосоединение (Autoconnect)

6.5 SSH tricks

7 VPN с SSH

OpenSSH поддерживает устройства tun/tap, позволяющие создавать шифрованный туннель. Плюс протокола SSH в том, что для реализации не нужно устанавливать и настраивать дополнительный софт, минус — низкая производительность на медленных линиях.

В /etc/ssh/sshd_config, должны стоять опции:

7.1 P-2-P

Соединим два хоста client и server. Соединение инициирует client к server, при этом он должен обладать правами root. Конечные адреса туннеля 10.0.0.1 (server) и 10.0.0.2 (client), кроме того мы создаем устройство tun1.

7.2 Lan-2-Lan

Есть две сети, их нужно соединить, сеть А с адресом 192.168.51.0/24 и сеть Б с адресом 192.168.16.0/24. 192.168.51.0/24 (сеть A)|шлюз A шлюз Б|192.168.16.0/24 (сеть Б)

8 Backup

8.1 rsync

8.2 tar

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

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

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

8.3 dd

dd ( disk dump или destroy disk ) — используется для копирования (конвертирования) дисков, разделов, и прочих операций копирования.

Размер входных данных по-умолчанию 512 байт (1 блок). Увеличение размера блока ускоряет процесс копирования, но требует больше памяти.

Резервное копирование и восстановление

Recover

dd считывает раздел поблочно, если на диске предположительно есть проблемы, нужно использовать опцию conv=sync,noerror, при этом dd будет пропускать битые блоки и записывать нули на диск назначения. Поэтому важно, установить размер блока, равным, или меньшим, чем размер блока на диске. Вполне подходящим будет размер блока в 1 килобайт, установить размер на входе и выходе можно опцией bs=1k. Если на диске имеются сбойные сектора, но основные данные нужно сохранить с данного раздела, можно создать файл образа, смонтировать образ и копировать данные на новый диск. С установленной опцией noerror, dd пропустит поврежденные блоки, записав на их место нули, при этом, потеряны будут, только данные, содержавшиеся в сбойных секторах диска.

Удаление данных

MBR содержит код загрузчика и таблицу разделов. Первый 466 байт отводятся под загрузчик, 466-512 байт под таблицу размещения разделов.

9 sudo

10 Управление пакетами

10.1 yum rpm apt-get

10.2 репозитории

10.3 update kernel, обновить OS

Обновить дистрибутив

Обновить ядро

11 Полезные команды

11.1 mail

11.2 screen

screen — оконный менеджер виртуальных терминалов

screen имеет две основные функции:
— Запуск нескольких сессий терминала, в одном окне.
— Запуск программ отдельно от терминала в фоновом режиме. Терминал может быть отключен и переподключен позже.

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

11.3 find

Будьте осторожны при использовании xargs или exec, они могут возвращать неверный результат если имена файлов или директорий содержат пробелы. Используйте -print0 | xargs -0, вместо | xargs. Опция -print0 должна быть последней.

11.4 sed

11.5 awk

11.6 Regexp

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

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

12 Shell

/.bashrc ( так-же может быть

+ — вводишь слово, с которым надо найти команду в истории. Повторные + перебирают все команды в истории с этим словом.

+ — удаление текста от курсора до начала строки, + — удаление от курсора до конца строки, + — вставить удаленный предыдущими примерами кусок текста, + — удаление всей строки (обычно работает как отмена команды).

+ — меняет местами символ под курсором и предыдущий набранный (при опечатке вида /dev/dsa вместо /dev/sda)

^^ — После попытки выполнить команду, набранную с ошибкой, строка вида ^ошибка^правильно запустит на выполнение исправленную команду.

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

13 Печать

14 Дисковые квоты

Квоты распределяются на уровне файловой системы и поддерживаются ядром.

Пакет quota, нужно установит дополнительно, затем активировать дисковые квоты в файле fstab и перемонтировать раздел

Инициализация файла quota.user с помощью quotacheck.

По-умолчанию, дисковые квоты не накладывают никаких ограничений (установлены в 0). Установить необходимые лимиты для пользовательских квот можно с помощью программы edquota. Так-же лимиты можно дублировать на других пользователей. Размер блока по-умочанию, 1 kб. Время действия можно установить с помощью edquota -t

Команда edquota -p используется для дублирования квот на других пользователей.

15 Поиск неисправностей

15.1 Поиск неисправностей

16 SSL сертификаты

SSL — Secure Socket Layer, криптографический протокол, использующий шифрование открытым ключем, для защиты передаваемых по сети данных. Протокол SSL, является важным элементом политики безопасности системы. SSL сертификат — электронный документ, используемый для подтверждения принадлежности транзакции тому или иному серверу и установления защищенного соединения между клиентом и сервером с шифрованием трафика. Часто используется на защищенных Веб серверах (https) или Mail серверах (imaps)

— Клиент должен создать сертификат, со всеми необходимыми данными

— Отправить запрос на сертификацию в один из «центров сертификации» (CA). Так-же на данном этапе, будет создан приватный ключ на локальной машине

— После обработки запроса, сертификат подписывается секретным ключем CA. Клиент имея публичный ключ CA, проверяет подлинность сертификата и далее может использовать его

— Если необходимо, можно объединить сертификат и ключ в один файл

Конфигурация OpenSSL

Создать сертификат полномочий

Если у нас нет сертификата, подписанного CA, и вы не планируете отправлять запрос на сертификацию, можно создать свой сертификат

Запрос сертификации (CSR)

Сохраним запрос (newreq.pem), он может быть отправлен снова, для следующего обновления, подпись ограничивает срок действия сертификата. Кроме того, в процессе, будет создан приватный ключ newkey.pem

Подпись сертификата

Подписанный CA сертификат является действующим.

Теперь servernamekey.pem — содержит приватный ключ а servernamecert.pem — сертификат сервера.

Создание объединенного сертификата

IMAP серверу нужно иметь все приватные ключи и серверные сертификаты в одном файле, файл должен храниться в безопасном месте.

Создадим файл servername.pem содержащий и сертификаты и ключи:

1.Открыть файл servernamekey.pem в текстовом редакторе и скопировать приватный ключ в файл servername.pem

2.Открыть файл servernamecert.pem в текстовом редакторе и скопировать сертификат в файл servername.pem

Информация о сертификате

17 Шифрование файлов

17.1 OpenSSL

Зашифровать и расшифровывать:

17.2 GPG

GnuPG известный способ шифрования и подписи электронных писем или других данных, кроме того gpg предоставляет расширенную систему управления ключами. В данных примерах рассматривается только шифрование файлов. Самым простым является симметричный шифр. В этом случае файл шифруется с помощью пароля, соответственно расшифровать его может тот, кто знает этот пароль, никаких ключей не требуется. GPG добавляет расширение «*.gpg» к имени зашифрованного файла

Шифрование с использованием ключей

Приватный ключ и публичный ключ, основа ассиметричной криптографии. О чем нужно помнить:

1.Ваш публичный ключ используется другими для шифрования файлов, которые, как получатель, можете расшифровать только вы (даже не тот, кто его шифровал).

2.Ваш приватный ключ зашифрован по паролю и используется для расшифровки файлов, зашифрованных Вашим публичным ключем. Приваиный ключ должен храниться в безопасном месте. Помните, если приватный ключ или пароль от него будут потеряны, вместе с ними пропадут и зашифрованные файлы.

3.Ключевой файл, может содержать несколько ключей.

Вначале нужно сгенерировать пару ключей. Значения по-умолчанию вполне подойдут, однако вам нужно будет ввести имя, адрес электронной почты и комментарий (не обязательно). Комментарий полезен при создании более одного ключа для данного имени/e-mail. Так-же вам нужно будет задать ключевую фразу (именно фразу а не слово).

Шифрование только для персонального использования

Не требует экспорта/импорта какого либо ключа, они у вас уже есть.

Шифрование и расшифровка с использованием ключей

Нам нужно экспортировать ваш публичный ключ, что-бы им могли пользоваться для расшифровки данных. Мы должны импортировать публичный ключ от Alice, что-бы шифровать файлы для нее. Ключи можно передать в обычном ascii файле. Например Alice экспортирует ключ, вы его импортируете себе, теперь вы можете шифровать для нее файлы и расшифровать их сможет только она.

Управление ключами

18 Шифрование разделов

18.1 LUKS

Используем Linux dm-crypt ( device-mapper ) на ядре 2.6. Шифровать будем раздел /dev/sdc1, это может быть любой раздел, диск, USB или файл, созданный losetup. Здесь мы будем использовать /dev/loop0, смотрите Файловая система. Device mapper использует метку для идентификации раздела, в данном примере sdc1, но это может быть любая другая строка.

LUKS с dm-crypt очень удобен для шифрования разделов диска, он позволяет иметь несколько паролей для одного раздела а так-же с легкостью менять их. Что-бы проверить доступно-ли у вас использование LUKS, наберите: cryptsetup —help.

18.2 dm-crypt

Делаем тоже самое, ( без создания fs ), что-бы переподключить раздел. При вводе некорректного пароля команда mount не будет выполнена. В таком случае просто удалите отображение sdc1 (cryptsetup remove sdc1) и создайте поновой.

Илон Маск рекомендует:  Скрипт получает информацию от Google о сайте
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL