Команды для работы с файлами:

touch <файл>    # Создает пустой файл
cat <файл>    # Просмотр текстового файла
tac <файл>    # Вывод содержимого текстового файла в обратном порядке, т.е. сначала выводится последняя строка, потом предпоследняя и т.д.
cp <файл1> <файл2>    # Копирует файл <файл1> в файл <файл2>. Если <файл2> существует, программа попросит разрешение на его перезапись
mv <файл1> <файл2>    # Перемещает файл <файл1> в файл <файл2>. Эту же команду можно использовать и для переименования файла
rm <файл>    # Удаляет файл
locate <файл>    # Производит быстрый поиск файла
which <программа>    # Выводит каталог, в котором находится программа, если она вообще установлена. Поиск производится в каталогах, указанных в переменной окружения PATH (это путь поиска программ)
less <файл>    # Используется для удобного просмотра файла с возможностью скроллинга (постраничной прокрутки)
more <файл>    # Используется для альтернативного less просмотра файла с возможностью скроллинга (постраничной прокрутки)

Вместо имени файла иногда очень удобно указать маску имени файла. Например, у нас есть много временных файлов, имена которых заканчиваются фрагментом tmp. Для их удаления нужно воспользоваться командой: rm *tmp.

Аналогично, можно использовать символ ?, который, в отличие от звездочки, заменяющей последовательность символов произвольной длины, заменяет всего один символ.

Команды для работы с каталогами:

mkdir <каталог>    # Создание каталога
cd <каталог>    # Изменение каталога
ls <каталог>    # Вывод содержимого каталога
rmdir <каталог>    # Удаление пустого каталога
rm -r <каталог>    # Рекурсивное удаление каталога
cp <каталог/файл>  <каталог/файл>    # копирование
mv <каталог/файл> <каталог/файл>    # перемещение
# монтирование каталога к каталогу (mount и параметр --bind)
mount --bind <исходный_каталог каталог_назначения>

Если в названии файла/каталога есть пробелы, то перед ними следует ставить /, либо писать данное название в кавычках. Для указания домашнего каталога используют знак ~ (тильда) .

Создание ссылок (ln):

  • Жесткие - нельзя удалить пока на файл указывает хотя бы одна подобная ссылка, не могут указывать на файл за пределами корневой файловой системы :
ln file.txt hard_link    # создание жесткой ссылки на файл
  • Символьные ссылки - могут указывать на несуществующий файл, либо на файл за пределами корневой ФС
ln -s file.txt symbolic_link    # создание символьной ссылки на файл

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

Перенаправление ввода/вывода:

Перенаправить вывод одной программы в файл или на ввод другой и т.п.

command_1 > command_2    # перенаправить вывод с команды command_1 на ввод команды command_2 (вывод команды слева от символа > будет направлен на ввод команды справа)
ifconfix > ifconfig.txt    # перенаправить вывод команды и перезаписать файл
ifconfig >> ifconfig.txt    # перенаправить вывод команды, но без перезаписи файла, и добавить новые данные в конец файла
cat big_text.txt | more    # перенаправить вывод команды cat (содержимое файла) на ввод команды more (удобнее будет less)
echo y | rm file.txt    # удалить файл без запроса подтверждения

Права доступа, владельцы и атрибуты файлов (chmod/chown/chattr):

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

Права:

  • чтение (r),
  • запись (w),
  • выполнение (x).

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

ls -l <файл/каталог>    # просмотреть установленные права

Примерный вывод:

-rwxwxwx 1 root root date file
# - признак каталога/файла (d - каталог)
# rwx права доступа для владельца файла/Каталога (чтение (r/-)/запись (w/-)/выполнение (x/-))
# rwx права доступа для членов группы владельца файла/каталога
# rwx права доступа для прочих пользователей
# root имя владельца файла/каталога
# root наименование группы владельца файла/Каталога
# r,w,x - символьный способ указания прав доступа

Абсолютный способ указания прав доступа использует восьмеричную систему счисления, например, чтение разрешено - 1, запись разрешена - 1, выполнение запрещено - 0, число 110 является 6 в восьмеричной с.с., т.е. rw- будет записано как 6 (права для владельца файла), и так для каждой группы, от 4 до 7, где 4 полное отсутствие прав (---), а 7 разрешение на любые действия (rwx), в итоге права будут иметь вид -467, что соответствует ----rw-rwx .

Символьный способ Двоичная с. с. Абсолютный способ Дополнительно
--- 000 0 +0
--x 001 1 +x
-w- 010 2 +w
-wx 011 3 +wx
r-- 100 4 +r
r-x 101 5 +rx
rw- 110 6 +rw
rwx 111 7 +rwx

Выставить права доступа:

chmod 640 <file/directory>    # выставить права доступа 640
# 644 - владельцу можно читать и изменять файл, остальным пользователям - только читать
# 666 - читать и изменять файл можно всем пользователям
# 777 - всем можно читать, изменять и выполнять файл
chmod +x script    # сделать файл исполнимым (-x снять право исполнения)

Права на выполнение каталога - это права на просмотр его оглавления.


chown username <file/catalog>    # сделать другого пользователя владельцем

Сделав владельцем другого пользователя возможно потерять доступ к файлу.

Специальные права доступа SUID (Set User ID root) и SGID (Set Group ID root) позволяют обычным пользователям/группам получить для запуска файла root права.

chmod u+s /usr/sbin/<file/catalog>    # предоставить права root на запуск

Каждая подобная программа (файл/каталог) будет являться потенциальной дырой в безопасности системы, поэтому лучше использовать sudo и su .

Изменить атрибуты файла возможно при помощи chattr:

"+" устанавливает атрибут, а "-" снимает

chattr _i /boot/grub/menu.lst    # установить атрибут i, запрещающий любое изменение, переименование и удаление файла.
    # j - сохранять в журнале ext4 все данные перед изменением файла/каталога, имеет смысл при монтировании с опциями daya=ordered/data=writedack, т.к. стандартно журнал ведется для всех файлов.

Команды для поиска файлов (find/which/locate):

find <список_поиска> <выражение>
find / -name a.out     # найти файлы с подстрокой в имени a.out
find / -name '*.txt'     # поиск по маске
find . -size 0c     # найти файлы нулевого размера, поиск с текущего каталога
find . -empty     # поиск пустых файлов
find ~ -size +100M -size -150M     # найти файлы в домашнем каталоге размером от 100 до 150 Мбайт
find / -name *.tmp -ok rm {} \;     # найти все временные файлы и удалить их (rm)
    -ok    # запрашивать подтверждение на команду после
    -exec    # не запрашивать подтверждения
find | grep <filename>    # поиск файла при помощи регулярных выражений и grep
find / -user <username>    # найти файл и директорию принадлежащие пользователю                                # username. Поиск начать с корня (/)
find /home/username -name "*.bin"    # Найти все файлы и директории, имена которых                                         # оканчиваются на '. bin'. Поиск начать с                                             # домашней директории пользователя username                                          # '/home/username'
find /usr/bin -type f -atime +100    # найти все файлы в '/usr/bin', время последнего                                      # обращения к которым  более 100 дней
find /usr/bin -type f -mtime -10    # найти все файлы в '/usr/bin', созданные или                                        # изменённые в течении последних 10 дней
find / -name *.rpm -exec chmod 755 '{}' \;    # найти все фалы и директории, имена которых оканчиваются на '.rpm', и изменить права доступа к ним
find / -xdev -name "*.rpm"    # найти все фалы и директории, имена которых оканчиваются на '.rpm', игнорируя съёмные носители, такие как cdrom, floppy.. 
find /var -size +100000k    # найти все файлы в директории /var размером больше 100мегабайт.
find /var -size +100M    # найти все файлы в директории /var размером больше 100мегабайт.

find /var/www/site/data/mod-tmp/ -type f -name "sess*" -mmin +60    # найти все файлы в директории с именем, начинающимся на "sess" и старше 60 мин
find /var/www/site/data/mod-tmp/ -type f -name "sess*" -mmin +60 -delete    # найти все файлы в директории с именем, начинающимся на "sess" и старше 60 мин и удалить
locate updatedb    # обновить базу данных демона locate
locate <file>    # поиск файлов в БД демона located
locate "*.ps"    # поиск всех файлов с окончанием названия на .ps
whereis halt    # показать полный путь к бинарным файлам, исходным кодам, руководствам и прочему, что относится к файлу/программе halt
which <program/script>    # полный путь к программе или сценарию (заданным в PATH)

# поиск с помощью регулярных выражений (опция regextype, значения ed, gep, sed, posix-basic и
# др.), учитывать заданный путь.
find . -type f -regextype sed -regex  "./[^-3]*\(HTML\)\+[^-3]*/[^0-9/]*3[0-9]\{3,4\}[^0-9/]*.\(png\|jpg\)"
    . - искать от текущего каталога
    -type f - ищем файлы
    -regextype sed - тип регулряного выражения
    -regex - опция, после которой в двойных кавычках идет само регулярное выражение
    ./  [^-3]* \(HTML\)\+  [^-3]*  /  [^0-9/]*  3 [0-9]\{2,4\}  [^0-9/]*  . \(png\|jpg\)
        ./  - строка начинается с этих символов
        [^-3]* - все символы, кроме дефиса и цифры 3 (класс), ^ - отрицание перечисленных символов
        \(HTML\)\+ строка HTML должна обязательно присутствовать хотя бы один раз (+), 3 слеша являются экранирующими символами  
        [^-3]* - все символы, кроме дефиса и цифры 3 (класс)
        / - косая черта, тривиальный текстовый символ  
        [^0-9/]* - класс символов, в который не входят цифры и косая черта, количество повторов символов- от 0 до бесконечности (*)
        3 - тривиальный текстовый символ
        [0-9]\{2,4\} - класс символов, состоящий из цифр от 0 до 9, \{2,4\} - число повторений указанных цифр - от 2 до 4, 2 слеша - экранирующие
        [^0-9/]* - класс символов, в который не входят цифры и косая черта, количество повторов символов- от 0 до бесконечности (*)
        . - тривиальный текстовый символ "точка".
        \(png\|jpg\) - класс строк (png или jpg), все 3 слеша - экранирующие.

Сжатие с помощью Gzip и Zip:

Сжатые файлы занимают меньше места на диске и загружаются из сети быстрее, чем большие, несжатые файлы. Вы можете сжать файлы Linux свободно распространяемыми утилитами сжатия Gzip или Zip, такой формат распознаётся большинством операционных систем. По умолчанию, сжатые файлы получают расширение .gz. Команда Gzip создаёт сжатый файл с расширением .gz; Gunzip извлекает сжатые файлы и удаляет файл .gz. Чтобы сжать файл, в приглашении оболочки введите следующая команду:

gzip filename.ext    # сжать файл и сохранить под именем filename.ext.gz
gunzip filename.ext.gz    # распаковать сжатый файл и заменить им архив
gzip filename.gz file1 file2 file3 directory    # сжать несколько файлов и каталог

Если вы обмениваетесь файлам с пользователям не Linux, вероятно лучше использовать zip, чтобы избежать проблем совместимости. Linux может легко открыть zip или gzip файлы, но не Linux операционные системы могут не справиться с файлами gzip.

zip -r filename.zip filesincludeinarchive    # сжать файл с помощью zip
unzip filename.zip    # распаковать архив

Архивация с помощью Tar:

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

tar -cvf filename.tar files/directories    # создать файл .tar
tar -cvf foo.tar /home/mine/work /home/mine/school    # пример создания архива tar
tar -tvf foo.tar    # просмотреть содержимое файла tar
tar -xvf foo.tar    # извлечь содержимое tar
tar -czvf foo.tar    # сжать файлы в архиве tar
tar -xzvf foo.tgz    # развернуть сжатый файл

Вы можете использовать абсолютные или относительные пути для этих файлов или каталогов. Разделите имена файлов и каталогов пробелами. Сжатые файлы обычно имеют расширение .tgz и сжимаются при помощи gzip.

Команды для работы с текстом:

cmp [параметры] file1 file2    # сравнение двух файлов, при различиях выводит номер строки и номер символа в строке, откуда начинается различие (сравнение как текстовых так и двоичных файлов, в отличии от diff).# вывод отличающихся символов
    -i n    # игнорировать первые n символов
    -l    # вывод позиций всех отличий, а не только первого
    -s    # не выводить информацию на экран (код возврата 0 - одинаковые, 1 - 
            различные, 2 - ошибка)
column [параметры] [файл]    # разбивка текста на столбцы (либо из файла, либо со стандартного ввода, если файл не указан)
    -c n    # задает количество столбцов 
    -s символ    # указанный символ будет разделителем столбцов
    -t    # форматирование текста как таблицы (по умолчанию разделитель - пробел)
    -x    # сначала будут заполняться столбцы, а потом строки
comm [] file1 file2    # сравнение двух файлов, которые были отсортированы (sort), вывод расположен в три столбца, в первом строки из file1, во втором из file2, в третьем - строки, которые имеются в обоих файлах.
    -1    # не выводить первый столбец
    -2    # не выводить второй столбец
    -3    # не выводить третий столбец
    -12    # будет выведен только третий столбец
    -13    # будет выведен только второй столбец
    -23    # будет выведен только первый столбец
diff параметры file1 file2    # сравнение двух файлов, отличающиеся строки из file1 помечаются символом <, а из file2 символом >
    -a    # сравнение всех файлов, в том числе бинарных
    -b    # игнорировать пробелы в конце строки
    -B    # игнорировать пустые строки
    -e    # создание сценария для редактора ed (превращение file1 в file2)
    -w    # игнорировать все пробелы
    -y    # вывод в два столбца
    -r    # сравнение файлов в подкаталогов (указываются два каталога)
diff3 параметры file1 file2 file3    # сравнение трех файлов, вывод ==== если все файлы разные, ===1 если отличается только первый файл, ===2 если второй, ===3 если третий
    -a    # сравнение всех файлов, в том числе бинарных
    -A    # создание сценария для редактора ed (отличия в скобках)
    -e    # создание сценария для ed (поместить отличия между file2 и file 3 в file1)
    -i    # добавить команды w (сохранить) и q (выйти) в конец сценария ed
    -x    # создание сценария для редактора ed (поместить все отличия в file1)
    -X    # то же самое, но с выделением отличий
    -3    # создание сценария для ed (поместить отличия между file1 и file3 в file1
egrep [параметры] "строка" файлы    # поиск строки в файлах (расширенный текстовый фильтр), либо из стандартного текстового ввода
    -A n    # вывести n строк после искомой строки
    -B n    # вывести n строк перед искомой строкой
    -b    # вывести для каждой строки, где есть искомая строка, ее положение в файле
    -c    # вывести количество совпадений с искомой строкой
    -C    # вывести по две строки до и после искомой строки
    -e строка    # если искомая строка начинается с символа "-"
    -f файл    # поиск искомых строк, содержащихся в указанном файле
    -h    # вывести строки, содержащие искомую строку
    -i    # игнорировать регистр
    -n    # вывести номера строк и сами строки, содержащие искомую строку
    -s    # игнорировать сообщения об ошибке
    -w    # поиск совпадения целого слова с искомой строкой
    -x    # поиск совпадения целой строки с искомой строкой
egrep "ppp [11]" *    # поиск строки во всех файлах каталога
expand [-i] файлы    # заменить в файлах табуляцию на соответствующее количество пробелов, параметр -i означает, что замена должна быть только в начале строки
fmt [параметры] файлы    # форматирование: выравнять текст по правой границе и удалить символы новой строки
    -c    # не форматировать первые две строки
    -p префикс    # форматировать только строки, начинающиеся с префикса
    -s    # не объединять строки
    -t    # начинать параграф с красной строки
    -w n    # задать макс. длину строки в n символов (по умолчанию 72)
fold [параметры] файлы    # форматирование: произвести разрыв строк, если необходимо, выровнять текст по правой границе.
    -w n    # задать макс. длину строки в n символов (по умолчанию 80)
    -s    # разрешить разрыв строки только на пробеле
more file    # просмотр файла с прокруткой по нажатию enter
less file    # просмотр файла с прокруткой up/down arrows
printf string    # печать строки в консоль
cat file    # вывод содержимого файла
tac log_file    # вывод содержимого файла в обратном порядке
wc file    # подсчет слов в текстовом файле
    -l    # подсчет количества строк
    -c    # подсчет количества символов
head -n x file    # вывести первые x строк файла (по умолчанию 10 строк)
tail -n x file    # вывести последние x строк файла
look "string" file    # поиск строк, начинающихся с указанной string
sort [параметр] [файлы]    # сортировка указанных файлов (результат отправляется на стандартный вывод)
    -b    # игнорировать пробелы в начале сортируемых полей или начале ключей
    -d    # игнорировать все символы, кроме букв, цифр и пробелов
    -f    # игнорировать регистр
    -r    # сортировка в обратном порядке
    -o file    # вывод результатов сортировки в файл
    -t символ    # использовать указанный символ в качестве разделителя полей
split -n file    # разбиение файла на части, содержащие n строк (по умолчанию n=1000)
    -bx    # разбиение по размеру, где x может быть равен, например, 100b/100k/100m
unexpand [параметры] файл    # заменить пробелы на символы табуляции (по умолчанию 8 последовательных пробелов заменят символ табуляции, регулируется параметром -t n (n - количество пробелов)
grep find_string file    # текстовый фильтр
tac /var/log/messages | grep ppp    # выделить все сообщения, связанные с демоном                                         # pppd
    -r    # рекурсивный поиск
    -n    # вывести номер строки
    -w    # найти целое слово
    -i    # игнорировать регистр
grep -v -i 'spider' heroes.txt    # выводе всех строк за исключением тех, которые содержат подстроку spider

# Регулярные выражения (regex): заключать в одинарные кавычки 
    .    # любой одиночный символ
    ^    # пустая последовательность в начале строки (начало строки)
    $    # пустая последовательность в конце строки (конец строки)
    ^$    # пустая строка
    A    # буква А в верхнем регистре    
    a    # буква а в нижнем регистре
    \b    # пустая строка в начале или конце слова (граница слова)
    \d    # одиночная цифра
    \D    # одиночный символ, не являющийся цифрой
    \w    # любой одиночный цифро-буквенный символ (синоним [:alnum:])
    [A-E]    # любая из букв A, B, C, D, E в верхнем регистре
    [^A-E]    # любой символ, кроме букв A, B, C, D, E в верхнем регистре
    X?    # одна или ни одной заглавной буквы X
    X*    #  ноль или более заглавных букв X
    X+    # одна или более заглавная буква X
    X{n}    # точно n заглавных букв X
    X{n,m}    # не менее n и не более m заглавных букв X (если пропустить m, то как минимум n заглавных букв X) модификаторы повторения
    (abc|def)+    # не менее одной последовательности abc, def, причем abc и def будут считаться совпадением
    (a|b)    # дизъюнкция (а ИЛИ b)
    []    # оператор множества (любой из [..])
    ^[A-Za-z]    # начало с латинской буквы (либо [A-z])
    [A-MXYZ]    # совпадения с символами A-M, X, Y, Z
    [^A]    # все кроме А
grep -i -E '[^b]at' heroes.txt    # найти строки не содержащие b
    [A-Z0-9]    # любой одиночный цифро-буквенный символ
    [^A-z0-9_]    # любой символ кроме цифр и букв (либо \W или [^[:alnum:]], но в данном случае есть зависимость от локали)
    ^[A-z][A-z0-9]{2,7}$    # начинается с буквы и содержит от 2 до 7 символов
    # $ позволяет указать завершение строки, а ^ на ее начало
    ?    # короткая запись выражения {0,1} - ни одного или одно
    +    # короткая запись {1,} - одно или более
    *    # короткая запись {0,} - ноль или более
# команда ls также поддерживает регулярные выражения, например, ls [a-c]*, причем звездочка является аналогом .* в grep, а ? аналого точки.

Дополнительную информацию по регулярным выражениям можно найти:

  • в книге Regular Expressions, Jeffrey Friedl
  • в книге Regular Expression Recipes, Nathan Good

results matching ""

    No results matching ""