Файлы

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

Тип файлаОписание
Обычные файлы(-) regular fileСюда относятся все файлы с данными, играющими роль ценной информации сами по себе. Linux все-равно текстовый перед ним файл, исполняемый или картинка. В любом случае это будет обычный (regular) файл. Все они обозначаются знаком минус "-". Остальные типы файлов считаются специальными (special).
Каталоги(d) directoryВ Linux каталог представляет собой такой тип файла, данными которого является список имен других файлов и каталогов, вложенных в данный каталог. Напрямую, то есть через какой-либо редактор, пользователь не может редактировать данные файла-каталога. Редактированием занимается ядро операционной системы, получая, в том числе от пользователя, команды создания файла, удаления и др.
Символьные ссылки(l) symlinkСимвольная ссылка – это файл, в данных которого содержится адрес другого файла по его имени (а не индексному дескриптору). Выполнение символьной ссылки приводит к открытию файла, на который она указывает. Если удалить исходный файл, то символьная ссылка продолжит существовать. Она по-прежнему будет указывать на файл, которого уже нет. Символьные ссылки не содержат атрибутов файлов, на которые они указывают. У них есть собственные атрибуты (свое время создания, размер, права доступа).
Сокеты(s) socketЧтобы понять, что такое канал и сокет, необходимо понимание процессов в операционной системе. И каналы и сокеты организуют их взаимодействие. Пользователь с данными типами файлов почти не сталкивается. Ключевым отличием канала от сокета является то, что канал однонаправлен. Через канал один процесс всегда передает данные второму, но не наоборот. Сокеты позволяют передавать данные в разных направлениях, т. е. осуществляют связь.
Каналы (p)named pipe
Символьные © и блочные устройства (b) block special file Файлы устройств предназначены для обращения к аппаратному обеспечению компьютера (дискам, принтерам, терминалам и др.). Когда происходит обращение к файлу устройства, то ядро операционной системы передает запрос драйверу этого устройства.
character special file

Команда file

Команда
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 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}Создание вложенной структуры папок
КомандаОписание
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 -R | grep ':$' | sed -e 's/:$//;s/[^─][^\/]*\//──/g;s/^/ /;s/─/├/'Просмотр дерева папки, как tree

tree - вывод дерева папок и файлов

  
  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

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

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

КомандаОписание
chown linda /home/account изменение владельца каталога /home/account на linda
touch – -p создание с именем "-p", – говорят, что дальше опций нет.
sudo chgrp -R haproxy /etc/haproxy/Сделать владельцем папки и файлов внутри /etc/haproxy группы haproxy

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

КомандаОписание
sudo cp 2.txt{,.back}Копирование файла 2.txt и дописывание ему расширение .back

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

**chmod [опции] <права> <файлы>** 
-R или —recursive рекурсивно изменяет права доступа для всех файлов и подкаталогов внутри указанного каталога
-f или —silent, —quiet подавляет вывод сообщений об ошибках или предупреждениях
-v или —verbose выводит подробный отчет о каждом изменении прав доступа
-c или —change ключ действует аналогично ключу —verbose. Он выводит информацию только если с файлом или директорией были произведены какие-либо действия

chmod [ugoa] [+-=] [rwx] файл(ы)

[ugoa] указывает, к кому применяются изменения:

uвладелец файла
gгруппа файла
oостальные пользователи (не владелец и не входящие в группу)
aвсе (при использовании заменяет собой ugo)

[+-=] определяет, что нужно сделать с разрешениями:

+добавить разрешение
:удалить разрешение
=установить разрешение точно (заменить текущие разрешения)

— [rwx] представляет собой комбинацию символов `r`, `w` и `x`, обозначающих разрешения:

r разрешение на чтение
w разрешение на запись
x разрешение на выполнение

Примеры использования.

chmod u+x файлдобавить право выполнения для владельца файла
chmod go-rw файлудалить право чтения и записи для группы и остальных пользователей
chmod a=rwx файлустановить полные права (чтение, запись и выполнение) для всех

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

4разрешение на чтение (read)
2разрешение на запись (write)
1разрешение на выполнение (execute)
0отсутствие разрешения

Для установки конкретных разрешений, сложите соответствующие значения:

  • только разрешение на чтение, используйте 4.
  • чтение и запись, сложите 4 и 2, что даст 6.
  • чтение и выполнение, сложите 4 и 1, что даст 5.
  • чтение, запись и выполнение, сложите 4, 2 и 1, что даст 7.
chmod 644 myfile Данная команда установит права -rw-r—r—, где владелец имеет права на чтение и запись, а группа и остальные пользователи могут только читать файл
chmod 755 script.shЭта команда поможет установить права -rwxr-xr-x, где владелец имеет полные права, а остальные пользователи могут только читать и выполнять скрипт
КомандаОписание
rw------- (600)Только владелец имеет права на чтение и запись.
-rw-r--r-- (644)Только владелец имеет права на чтение и запись; группа и другие могут только читать.
-rwx------ (700)Только владелец имеет права на чтение, запись и выполнение.
-rwxr-xr-x (755)Владелец имеет права на чтение, запись и выполнение; группа и другие могут только читать и выполнять.
-rwx--x--x (711)Владелец имеет права на чтение, запись и выполнение; группа и другие могут только выполнять.
-rw-rw-rw- (666)Все могут читать и писать в файл. (Будьте осторожны с этими разрешениями).
-rwxrwxrwx (777)Все могут читать, писать и выполнять. (Опять же, эта настройка разрешений может быть опасной).

Вот некоторые общие настройки для каталогов:

КомандаОписание
drwx------ (700)Только пользователь может читать и писать в этом каталоге.
drwxr-xr-x (755)Все могут читать этот каталог, но его содержимое может изменять только пользователь.

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

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

Символьная нотация

chmod u+rwx директориядобавить владельцу каталога права на чтение, запись и выполнение
chmod go-r директорияудалить права на чтение для группы и остальных пользователей для каталога
chmod a+rx директорияпредоставить всем пользователям права на чтение и выполнение для каталога

Числовая нотация

chmod 700 директория — установить права -rwx—— для владельца каталога, позволяя ему читать, записывать и выполнять операции внутри него, но никаким другим пользователям.

chmod 755 директория — предоставить владельцу полные права -rwxr-xr-x, а остальным пользователям право только на чтение и выполнение.chmod 644 директория — предоставить права на чтение и запись для владельца каталога, а остальным пользователям и группам оставить только на чтение содержимого.

Чтобы выполнить рекурсивное изменение прав доступа, используйте флаг -R или —recursive с командой chmod. Например:

chmod -R 755 каталог — установит права -rwxr-xr-x для всех файлов и каталогов внутри указанного каталога и самого каталога. chmod -R u+rwx,go-rwx каталог — добавит владельцу права на чтение, запись и выполнение, а группе и остальным пользователям уберет все права для всех файлов и каталогов в указанной директории и её подкаталогах. Рекурсивное изменение прав доступа — отличный инструмент для обновления разрешений для файлов и каталогов одновременно.

chmod –reference=RFILE file

  • —reference=RFILE. Этот аргумент указывает путь к файлу или каталогу, из которого будут скопированы права доступа.
  • file: это целевой файл или каталог, для которого вы хотите установить права доступа, согласно указанному источнику.

Важно отметить, что —reference не просто добавляет или удаляет определенные разрешения, а полностью перезаписывает права доступа целевого элемента.

  apt-get install acl

Пример вывода:

$ getfacl filename

# file: filename
# owner: geek
# group: geek
user::rw-
user:andy:r--
user:bob:r--
user:james:rwx
group::r--
mask::rwx
other::r--

Получить ACL список для файла

  getfacl /tmp/file.txt 

Показать ACL для файла

  getfacl -a /tmp/file.txt 
  getfacl --access /tmp/file.txt 

3. To display the default access control list:

# getfacl -d /tmp/file.txt # getfacl –default /tmp/file.txt 4. To avoid displaying comment header:

# getfacl -c /tmp/file.txt # getfacl –omit-header /tmp/file.txt 5. To Print all effective rights comments:

# getfacl -e /tmp/file.txt # getfacl –all-effective /tmp/file.txt 6. To avoid printing effective rights:

# getfacl -E /tmp/file.txt # getfacl –no-effective /tmp/file.txt 7. To skip files that only have the base ACL entries:

# getfacl -s /tmp/file.txt # getfacl –skip-base /tmp/file.txt 8. To list the ACL’s recursively:

# getfacl -R /tmp # getfacl –recursive /tmp 9. To follow the symbolic links:

# getfacl -L /tmp/file.txt # getfacl –logical /tmp/file.txt 10. To avoid following the symbolic links:

# getfacl -P /tmp/file.txt # getfacl –physical /tmp/file.txt 11. To get the tabular output format:

# getfacl -t /tmp/file.txt # getfacl –tabular /tmp/file.txt 12. Do not strip leading slash characters:

# getfacl -p /tmp/file.txt # getfacl –absolute-names /tmp/file.txt 13. To list the numeric user and group IDs:

# getfacl -n /tmp/file.txt # getfacl –numeric /tmp/file.txt 14. To get the version of the getfacl:

# getfacl -v # getfacl -version 15. To get the help for getfacl:

# getfacl -h # getfacl –help Filed Under: Linux