Файлы
Типы файлов
Тип файла | Описание |
---|---|
Обычные файлы(-) 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); done | printf "%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 Переименование файла
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 - | Возврат к препоследней папке, до перехода |
cd / | Переход к корневой папке |
rm Удаление файла или папки
Команда | Описание |
---|---|
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 | вывод содержимого каталога |
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 Поиск файлов и папок
Команда | Описание |
---|---|
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 Изменить владельца
Команда | Описание |
---|---|
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 |
chmod Права на файлы и папки
Права в 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 директория — предоставить права на чтение и запись для владельца каталога, а остальным пользователям и группам оставить только на чтение содержимого.
Рекурсивное применение команды chmod
Чтобы выполнить рекурсивное изменение прав доступа, используйте флаг -R или —recursive с командой chmod. Например:
chmod -R 755 каталог — установит права -rwxr-xr-x для всех файлов и каталогов внутри указанного каталога и самого каталога. chmod -R u+rwx,go-rwx каталог — добавит владельцу права на чтение, запись и выполнение, а группе и остальным пользователям уберет все права для всех файлов и каталогов в указанной директории и её подкаталогах. Рекурсивное изменение прав доступа — отличный инструмент для обновления разрешений для файлов и каталогов одновременно.
chmod –reference=RFILE file
- —reference=RFILE. Этот аргумент указывает путь к файлу или каталогу, из которого будут скопированы права доступа.
- file: это целевой файл или каталог, для которого вы хотите установить права доступа, согласно указанному источнику.
Важно отметить, что —reference не просто добавляет или удаляет определенные разрешения, а полностью перезаписывает права доступа целевого элемента.
Расширеннае работа с правами
Установка getfacl
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