Файлы

В Linux всего 7 типов файлов.

Тип файлаОписание
Обычные файлы(-) regular fileСюда относятся все файлы с данными. Linux все-равно текстовый перед ним файл, исполняемый или картинка. В любом случае это будет обычный (regular) файл. Все они обозначаются знаком минус "-". Остальные типы файлов считаются специальными (special).
Каталоги(d) directoryВ Linux каталог представляет собой такой тип файла, данными которого является список имен других файлов и каталогов, вложенных в данный каталог.
Символьные ссылки(l) symlinkСимвольная ссылка – это файл, в данных которого содержится адрес другого файла по его имени (а не индексному дескриптору). Выполнение символьной ссылки приводит к открытию файла, на который она указывает. Если удалить исходный файл, то символьная ссылка продолжит существовать. Она по-прежнему будет указывать на файл, которого уже нет. Символьные ссылки не содержат атрибутов файлов, на которые они указывают. У них есть собственные атрибуты (свое время создания, размер, права доступа).
Сокеты(s) socketФайлы сокетов. Создают прямую связь между процессами в системе. Передают данные между процессами, которые запущены в различных средах либо даже на различных машинах. Означает это следующее: посредством сокетов программы могут осуществлять обмен информацией даже по сети. Работа сокета похожа на работу туннеля, но в обе стороны. ls -l /dev/ | grep "^s"
Каналы (p)named pipe Туннели/именованные туннели. Обеспечивают настройку связи между 2-мя процессами в системе, перенаправляя вывод одного на вход другого. Туннели именованного типа тоже применяются для связи между 2-мя процессами и функционируют, как и обыкновенные туннели. ls -l /dev/ | grep "^p"
Блочные устройства (b) block special file Файлы устройств, обеспечивающие буферный доступ к аппаратным компонентам. В процессе записи информации на жёсткий диск либо съёмный носитель данные не записываются сразу — это нерационально с точки зрения расходования ресурсов. Поэтому данные сначала собираются в буфере, для чего и используются блочные файлы. Они способны передавать большие блоки информации за один раз, и с их помощью файловая система и прочие утилиты получают возможность взаимодействовать с драйверами аппаратных устройств. ls -l /dev/ | grep "^b"
Символьные (c) и сharacter special file С их помощью обеспечивается небуферизованный доступ к ядру и аппаратным компонентам. Это значит, что они могут передавать за раз лишь один символ. В остальном, это те же файлы устройств. Для символьных файлов предусмотрена буква c (character) ls -l /dev/ | grep "^c"
Жесткая ссылка (hard link) в Linux не является отдельным типом файла, а представляет собой лишь дополнительное имя (запись в директории) для уже существующего файла, указывающее на тот же inode. Оригинал и хардлинк — это один и тот же файл, разделяющий одни данные, права и время, а понятие «оригинал» отсутствует.

Просмотреть тип файла (file)

Команда file используется в Linux для определения типа содержимого файла. Она не полагается на расширение файла, а анализирует его содержимое (магические числа, сигнатуры и др.).

file example.txt
file file1 file2 /bin/ls
file *
file /bin/bash
echo "Hello" | file -

Информация об исполняемом файле

  readelf -a /usr/bin/echo 

Можно редактировать заголовок исполняемого файла

 elfedit /usr/bin/echo 
Опция Описание
-b Показывает только тип без имени файла
-i Показывает MIME-тип (например, `text/plain; charset=us-ascii`)
-z Анализирует содержимое сжатых файлов
-f <имя> Читает список файлов из текстового файла
–mime-type Показывает только MIME-тип (без кодировки)
file -b myfile.pdf
file -i index.html
file -z archive.gz
  • Команда полезна при анализе неизвестных бинарных файлов.
  • Не требует расширений файла — работает даже с файлами без имени.
  • Можно использовать для скриптов автоматического анализа содержимого.
Команда
touch Команда для создания пустых файлов и обновления временных меток существующих файлов. Если файла нет, то будет создан пустой файл. Если есть, то будет изменена метки времени доступа и изменения файла.
touch -c Не создавать файл
touch -m docu.txtОбновить только метку времени изменения существующего файла с именем docu.txt.
touch -- -p создание с именем "-p", -- говорят, что дальше опций нет.
cat > sample.txt Создание sample.txt. Содержимое можно вводить с консоли и потом нажать Ctrl+C
echo > sample.txtСоздание пустого файла
>1.txtСоздание файла 1.txt
ln -s /etc/passwd /root/passсоздание символьной ссылки /root/pass указывающую на /etc/passwd
touch -d "1990/11/25" /etc/shellsУстановка даты изменения файла на 25 ноября 1990 года
watch -n1 -d ls -l Зайти в другой терминал и запустить команду, тогда видно, какие файлы touch изменил
Команда
touch file1.txt file2.txt file3.txtСоздание нескольких файлов file1.txt, file2.txt, file3.txt
touch file{1..5}.txtСоздать 5 файлов c именами file1.txt file2.txt и т.д.
touch file{1..5..2}.txtСоздать файлы с шагом 2 c именами file1.txt file3.txt и т.д.
touch test{1,2,3,4,5}
for i in {1..99}; do touch file$(printf "%02d" $i); doneprintf "%02d" добивает число 0, если оно меньше 10
Команда
seq 100Заполнение цифрами от 1-100
for fn in {0..9} {A..Z} {a..z}; do printf "$fn%.0s" {1..100}; printf "\n"; done >myfile.txt
strings /dev/urandom | head -n2700000 | tr '\n' ' ' >> bgn.txt | grep -oE '\w*a\w*' bgn.txt | tr '\n' ' ' > fnh.txt
КомандаОписание
truncate -s 5M test.txtСоздание файла размером 5 мегабайт. Можно обрезать логи этой командой
fallocate -l 5242880 test.txtСоздание файла размером 5 Mb, но нужно точно указывать размер
fallocate -l $((5*1024*1024)) test.txtСоздание файла размером 5 Мб, но так размер указывать легче
head -c 5MB /dev/urandom > test.txtСоздать файл 5Мб и заполнить его случайными символами
head -c 5MB /dev/zero > test.txtСоздать файл 5Мб и заполнить его нулями
dd if=/dev/urandom of=test.txt bs=5MB count=1
dd if=/dev/zero of=test.txt bs=5MB count=1
КомандаОписание
cp -v /bin/{bash,touch,ls,rm} $chr/binКопирование вложенных файлов в папку /bin
mkdir -p /tmp/test/one/non-exist/backup/dir && cp $HOME/.vimrc $_/myVimrcСоздание папки и в случае успеха копирование файла в папку $_. $_ разворачивает последний аргумент последней запущенной команды.
cp {,originals/}my_file_nameКопирование файла в другую папку
cp my_file_name originals/!#:1Копирование файла, !# текущая строка, :1 первый аргумент
cp my_file_name Ctrl+W Ctrl+Y originals/Ctrl+Y Набираем команду копирования, после набора пути нажимаем Ctrl+W и копируем слово слева, затем набираем новый путь и вставляем Ctrl+Y где надо
mv file_name my_other_Ctrl+J переименование файла, Ctrl+J копирует первый аргумент в строке
mv 2.txt{,.back} переименование файла с новым расширением и сохранением имени
КомандаОписание
truncate -s 0 "имяфайла" обнуление файла

Изменение времени доступа

touch -t 200701310846.26 index.html
touch -d '2007-01-31 8:46:26' index.html
touch -d 'Jan 31 2007 8:46:26' index.html

Замена LS

Папки

КомандаОписание
mkdir -p a/b/c создание родительских папок при отсутствии
mkdir -p /mydir/{bin,lib,lib64}Создание папок bin,lib,lib64 в mydir
mktemp mytempdirсоздание временной папки mytempdir в /tmp/
/run/user/1000/временная папка в оперативной памяти, при перезагрузке удаляется
mkdir -p \ project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}Создание вложенной структуры папок
mkdir -p a/b/c && cd $_ Создать папки и перейти в папку после создания
КомандаОписание
cd Переход в домашний каталог пользователя
cd .. Переход на предыдущий уровень
cd - Возврат к препоследней папке, до перехода
cd / Переход к корневой папке
КомандаОписание
rm -rf удаление
rm -rdf удаление папки со всем содержимым внутри
rm -rf /root/test/.*Удаление скрытых файлов, файлов и папок

Удаление файлов младше

  find /root/test -type f -newermt "2024-06-4 00:00:00" -delete
  

Удаление файлов старше

  find /root/test -type f -not -newermt "2024-06-4 00:00:00" -delete
КомандаОписание
ls вывод содержимого каталога
ls -l детальное отображение
ls -laскрытые файлы и папки
ls -lahразмеры файла в KB/MB/GB
ls -lah --group-directories-first --color=auto сортировка папок первыми
ls -ltсортировка списка файлов по дате изменения
ls -lhS сортировка списка только файлов по размеру, можно добавить r или R для порядка сортировки
ls -R | grep ':$' | sed -e 's/:$//;s/[^─][^\/]*\//──/g;s/^/ /;s/─/├/'Просмотр дерева папки, как tree
treeвывод дерева папок и файлов
ls -l | grep '^d'| tr -s " " | cut -d " " -f 9Вырезать папки из вывода ls
ls -l | grep '^d'| tr -s " " | cut -d " " -f9- | tr "\n" " " Преобразовать к одной строке
ls -l /dev | tr -s ' '| cut -c 2-9| sort -uniqПосчитать количество различных прав
du -sh /tmp #Размер папки на диске
КомандаОписание
find / -name ssh -type f 2>/dev/null поиск файла
find . -mount -type f -size +1G 2>/dev/null Поиск файлов и папок больше 1Gb
find . -mount -type f -size +512M -print 2>/dev/null | xargs -r -d '\n' ls -lh | sort -k5,5 -h -rПоиск файлов и папок больше 512Mb с выводом подробной информации
find / -name '*.txt' Поиск файлов в корне по маске *.txt
find . -size 0c Поиск файлов нулевого размера в текущем каталоге
find . -empty Поиск пустых файлов в текущем каталоге
find ~ -size +100M -size -150M найти файлы размером от 100 до 150Мб в домашнем каталоге и подкаталогах
find / -name *.tmp -ok rm () \;Найти все временные файлы и удалить их(для каждого найденного файла будет запущена команда rm и подтверждение)
find / -name *.tmp -exec rm () \;Найти все временные файлы и удалить их(для каждого найденного файла будет запущена команда rm, но подтверждения запрошено не будет )
find . -type f -exec chmod 0644 () \; Найти все файлы -type f, а не каталоги, в текущем каталоге и установить для них права 644
find / -user linda Поиск файлов, где владелец пользователь linda
find / -group users Поиск файлов, где владелец группа users
find ./files/ -name 'file*' -empty | xargs -t -I {} mv {} /tmp/files/ Перенос файлов в tmp. -I {} значения на вход, передача значений в mv {}

which sendmail - выведет полный путь к программе, если она встречается в PATH

locate sendmail будет искать быстрее, если демон located запущен.