2.4 Урок 1
Сертифікат: |
Linux Essentials |
---|---|
Версія: |
1.6 |
Розділ: |
2 Знайдіть свій шлях у системі Linux |
Тема: |
2.4 Створення, переміщення та видалення файлів |
Урок: |
1 з 1 |
Вступ
Цей урок охоплює управління файлами та каталогами в Linux за допомогою інструментів командного рядка.
Файл – це сукупність даних з іменем і набором атрибутів. Якби, наприклад, ви перенесли деякі фотографії зі свого телефону на комп’ютер і дали їм описові назви, то тепер на вашому комп’ютері була б купа файлів зображень. Ці файли мають такі атрибути, як час останнього доступу до файлу або його зміни.
Каталог – це особливий тип файлу, який використовується для організації файлів. Хороший спосіб думати про каталоги як про папки з файлами, які використовуються для організації паперів у шафі для документів. На відміну від папок з паперовими файлами, ви можете легко розміщувати каталоги в інших каталогах.
Командний рядок є найефективнішим способом керування файлами в системі Linux. Інструменти оболонки та командного рядка мають функції, які роблять використання командного рядка швидшим і простішим, ніж графічний файловий менеджер.
У цьому розділі ви будете використовувати команди ls
, mv
, cp
, pwd
, find
, touch
, rm
, rmdir
, echo
, cat
і mkdir
для керування та організації файлів і каталогів.
Чутливість до регістру
На відміну від Microsoft Windows, імена файлів і каталогів у системах Linux чутливі до регістру. Це означає, що назви /etc/
і /ETC/
є різними каталогами. Спробуйте виконати такі команди:
$ cd / $ ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr $ cd ETC bash: cd: ETC: No such file or directory $ pwd / $ cd etc $ pwd /etc
pwd
показує вам каталог, у якому ви зараз перебуваєте. Як бачите, зміна на /ETC
не спрацювала, оскільки такого каталогу немає. Перехід до каталогу /etc
, який існує, був вдалим.
Створення каталогів
Команда mkdir
використовується для створення каталогів.
Давайте створимо новий каталог у нашому домашньому каталозі:
$ cd ~ $ pwd /home/user $ ls Desktop Documents Downloads $ mkdir linux_essentials-2.4 $ ls Desktop Documents Downloads linux_essentials-2.4 $ cd linux_essentials-2.4 $ pwd /home/emma/linux_essentials-2.4
Протягом цього уроку всі команди будуть виконуватись в цьому каталозі або в одному з його підкаталогів.
Щоб легко повернутися до каталогу уроку з будь-якої іншої позиції у вашій файловій системі, ви можете скористатися командою:
$ cd ~/linux_essentials-2.4
Оболонка інтерпретує символ ~
як ваш домашній каталог.
Перебуваючи в каталозі уроку, створіть ще кілька каталогів, які ми будемо використовувати для вправ. Ви можете додати всі імена каталогів, розділив їх пробілами, до команди mkdir
:
$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs mkdir: cannot create directory ‘copying/files’: No such file or directory mkdir: cannot create directory ‘copying/directories’: No such file or directory mkdir: cannot create directory ‘deleting/directories’: No such file or directory mkdir: cannot create directory ‘deleting/files’: No such file or directory $ ls creating globs moving
Зверніть увагу на повідомлення про помилку і те, що було створено лише каталоги moving
, globs
та creating
. Каталоги copying
та deleting
ще не існують. mkdir
за замовчуванням не створює каталог всередині каталогу, який не існує. Параметр -p
або --parents
наказує mkdir
створити батьківські каталоги, якщо вони не існують. Спробуйте ту ж команду mkdir
з параметром -p
:
$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs
Тепер ви не отримуєте жодних повідомлень про помилки. Давайте подивимося, які каталоги існують зараз:
$ find . ./creating ./moving ./globs ./copying ./copying/files ./copying/directories ./deleting ./deleting/directories ./deleting/files
Програма find
зазвичай використовується для пошуку файлів і каталогів, але без будь-яких опцій вона покаже вам список усіх файлів, каталогів і підкаталогів вашого поточного каталогу.
Tip
|
Під час перерахування вмісту каталогу за допомогою |
Створення файлів
Як правило, файли створюються програмами, які працюють з даними, що зберігаються у файлах. Порожній файл можна створити за допомогою команди touch
. Якщо ви запустите touch
для існуючого файлу, вміст файлу не буде змінено, але мітка часу зміни файлу буде оновлена.
Виконайте таку команду, щоб створити деякі файли для роботи з шаблонами:
$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14 $ touch globs/star10 globs/star1100 globs/star2002 globs/star2013
Тепер давайте перевіримо наявність усіх файлів у каталозі globs
:
$ cd globs $ ls question1 question14 question23 star1100 star2013 question13 question2012 star10 star2002
Зверніть увагу, як touch
створив файли. Ви можете переглянути вміст текстового файлу за допомогою команди cat
. Спробуйте це на одному з файлів, які ви щойно створили:
$ cat question14
Оскільки touch
створює порожні файли, ви не повинні отримати жодного результату. Ви можете використовувати echo
з >
для створення простих текстових файлів. Спробуй це:
$ echo hello > question15 $ cat question15 hello
echo
відображає текст у командному рядку. Символ >
наказує оболонці записати результат команди у вказаний файл замість вашого терміналу. Це призводить до того, що вихідні дані echo
, у цьому випадку hello
, записуються у файл question15
. Це стосується не тільки echo
, цей підхід можна використовувати з будь-якою командою.
Warning
|
Будьте обережні, використовуючи |
Перейменування файлів
Файли переміщуються та перейменовуються за допомогою команди mv
.
Перейдіть до каталогу moving
:
$ cd ~/linux_essentials-2.4/moving
Створіть кілька файлів для практики. Наразі ви вже повинні бути знайомі з цими командами:
$ touch file1 file22 $ echo file3 > file3 $ echo file4 > file4 $ ls file1 file22 file3 file4
Припустимо, ім’я file22
містить помилку і має бути file2
. Виправте це за допомогою команди mv
. При перейменуванні файлу першим аргументом є поточне ім’я, другим – нове ім’я:
$ mv file22 file2 $ ls file1 file2 file3 file4
Будьте обережні з командою mv
. Якщо ви перейменуєте файл на ім’я існуючого файлу, він перезапише його. Давайте перевіримо це за допомогою file3
і file4
:
$ cat file3 file3 $ cat file4 file4 $ mv file4 file3 $ cat file3 file4 $ ls file1 file2 file3
Зверніть увагу, що вміст file3
тепер співпадає з вмістом file4
. Використовуйте параметр -i
, щоб змусити mv
запитати вас, чи збираєтеся ви перезаписати існуючий файл. Спробуйте наступні команди:
$ touch file4 file5 $ mv -i file4 file3 mv: overwrite ‘file3’? y
Переміщення файлів
Файли переміщуються з одного каталогу до іншого за допомогою команди mv
.
Створіть кілька каталогів для переміщення файлів:
$ cd ~/linux_essentials-2.4/moving $ mkdir dir1 dir2 $ ls dir1 dir2 file1 file2 file3 file5
Перемістіть file1
у dir1
:
$ mv file1 dir1 $ ls dir1 dir2 file2 file3 file5 $ ls dir1 file1
Зверніть увагу, що останній аргумент mv
є каталогом призначення. Щоразу, коли останнім аргументом mv
є каталог, файли переміщуються до нього. В одній команді mv
можна зазначити декілька файлів:
$ mv file2 file3 dir2 $ ls dir1 dir2 file5 $ ls dir2 file2 file3
Також можна використовувати mv
для переміщення та перейменування каталогів. Перейменуйте dir1
на dir3
:
$ ls dir1 dir2 file5 $ ls dir1 file1 $ mv dir1 dir3 $ ls dir2 dir3 file5 $ ls dir3 file1
Видалення файлів і каталогів
Команда rm
може видаляти файли та каталоги, а команда rmdir
може видаляти лише каталоги. Давайте очистимо каталог moving
, видаливши file5
:
$ cd ~/linux_essentials-2.4/moving $ ls dir2 dir3 file5 $ rmdir file5 rmdir: failed to remove ‘file5’: Not a directory $ rm file5 $ ls dir2 dir3
За замовчуванням rmdir
може видаляти лише порожні каталоги, тому нам довелося використовувати rm
, щоб видалити звичайний файл. Спробуйте видалити каталог deleting
:
$ cd ~/linux_essentials-2.4/ $ ls copying creating deleting globs moving $ rmdir deleting rmdir: failed to remove ‘deleting’: Directory not empty $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files
За замовчуванням rmdir
відмовляється видаляти каталог, який не є порожнім. Використовуйте rmdir
, щоб видалити один із порожніх підкаталогів каталогу deleting
:
$ ls -a deleting/files . .. $ rmdir deleting/files $ ls -l deleting directories
Видалення великої кількості файлів або глибоких структур каталогів із багатьма підкаталогами може здатися виснажливим, але насправді зробити це легко. За замовчуванням rm
працює лише зі звичайними файлами. Параметр -r
використовується для перевизначення цієї поведінки. Будьте обережні, rm -r
– прихований вибуховий пристрій! Коли ви використовуєте параметр -r
, rm
видалятиме не тільки будь-які каталоги, але й усе в цих каталогах, включно з підкаталогами та їх вмістом. Подивіться самі, як працює rm -r
:
$ ls copying creating deleting globs moving $ rm deleting rm: cannot remove ‘deleting’: Is a directory $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories $ rm -r deleting $ ls copying creating globs moving
Зверніть увагу, як deleting
зник, не зважаючи на те, що він не був порожнім? Як і mv
, rm
має опцію -i
, щоб запросити підтвердження у вас, перш ніж щось робити. Використовуйте rm -ri
, щоб видалити каталоги з розділу moving
, які більше не потрібні:
$ find . ./creating ./moving ./moving/dir2 ./moving/dir2/file2 ./moving/dir2/file3 ./moving/dir3 ./moving/dir3/file1 ./globs ./globs/question1 ./globs/question2012 ./globs/question23 ./globs/question13 ./globs/question14 ./globs/star10 ./globs/star1100 ./globs/star2002 ./globs/star2013 ./globs/question15 ./copying ./copying/files ./copying/directories $ rm -ri moving rm: descend into directory ‘moving’? y rm: descend into directory ‘moving/dir2’? y rm: remove regular empty file ‘moving/dir2/file2’? y rm: remove regular empty file ‘moving/dir2/file3’? y rm: remove directory ‘moving/dir2’? y rm: descend into directory ‘moving/dir3’? y rm: remove regular empty file ‘moving/dir3/file1’? y rm: remove directory ‘moving/dir3’? y rm: remove directory ‘moving’? y
Копіювання файлів і каталогів
Команда cp
використовується для копіювання файлів і каталогів. Скопіюйте кілька файлів до каталогу copying
:
$ cd ~/linux_essentials-2.4/copying $ ls directories files $ cp /etc/nsswitch.conf files/nsswitch.conf $ cp /etc/issue /etc/hostname files
Якщо останнім аргументом є каталог, cp
створить копію попередніх аргументів всередині каталогу. Як і для команди mv
, можна зазначити декілька файлів одночасно, якщо їх потрібно скопіювати до одного каталогу.
Якщо обидва операнди cp
є файлами і обидва файли існують, cp
замінює другий файл копією першого файлу. Давайте попрактикуємося в цьому, перезаписуючи файл issue
файлом hostname
:
$ cd ~/linux_essentials-2.4/copying/files $ ls hostname issue nsswitch.conf $ cat hostname mycomputer $ cat issue Debian GNU/Linux 9 \n \l $ cp hostname issue $ cat issue mycomputer
Тепер спробуємо створити копію каталогу files
у каталозі directories
:
$ cd ~/linux_essentials-2.4/copying $ cp files directories cp: omitting directory ‘files’
Як бачите, cp
за замовчуванням працює лише з окремими файлами. Щоб скопіювати каталог, ви використовуєте параметр -r
. Майте на увазі, що параметр -r
змусить cp
також скопіювати вміст каталогу, який ви копіюєте:
$ cp -r files directories $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname
Зверніть увагу, коли наявний каталог використовувався як призначення, cp
створює в ньому копію вихідного каталогу? Якщо каталог призначення не існує, він буде створений та заповнений вмістом вихідного каталогу:
$ cp -r files files2 $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname ./files2 ./files2/nsswitch.conf ./files2/fstab ./files2/hostname
Пошук за шаблоном
Те, що зазвичай називають пошуком за шаблоном (globbing), - це проста мова співставлення шаблонів. Оболонки командного рядка в системах Linux використовують цю мову для посилань на групи файлів, імена яких відповідають певному шаблону. POSIX.1-2017 визначає наступні символи відповідності шаблону:
*
-
Відповідає будь-якій кількості будь-якого символу, включаючи також і відсутність символу
?
-
Відповідає будь-якому символу
[]
-
Відповідає набору символів
Простою мовою це означає, що ви можете вказати вашій оболонці шукати відповідність шаблону замість пошуку конкретного рядка тексту. Зазвичай користувачі Linux вказують декілька файлів, використовуючи шаблон замість того, щоб вводити ім’я кожного файлу. Виконайте наступні команди:
$ cd ~/linux_essentials-2.4/globs $ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls star1* star10 star1100 $ ls star* star10 star1100 star2002 star2013 $ ls star2* star2002 star2013 $ ls star2*2 star2002 $ ls star2013* star2013
Оболонка розширює *
до будь-якої кількості будь-чого, тому ваша оболонка інтерпретує star*
як що-небудь у відповідному контексті, що починається з star
. Коли ви запускаєте команду ls star*
, ваша оболонка не запускає програму ls
з аргументом star*
, вона шукає файли в поточному каталозі, які відповідають шаблону star*
(включно зі`star`), і перетворює кожен файл, що відповідає шаблону, в аргумент ls
:
$ ls star*
що є еквівалентом ls
з наступними аргументами
$ ls star10 star1100 star2002 star2013
Символ *
нічого не означає для ls
. Щоб довести це, виконайте таку команду:
$ ls star\* ls: cannot access star*: No such file or directory
Коли ви перед символом ставите \
, ви вказуєте своїй оболонці не інтерпретувати його. У цьому випадку ви хочете, щоб ls
мав аргумент star*
замість того, що має на увазі шаблон star*
.
Знак "?" відноситься до будь-якого окремого символу. Спробуйте виконати наступні команди, щоб переконатися в цьому:
$ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls question? question1 $ ls question1? question13 question14 question15 $ ls question?3 question13 question23 $ ls question13? ls: cannot access question13?: No such file or directory
Дужки []
використовуються для пошуку відповідності діапазонам або класам символів. Дужки []
працюють так само, як і в регулярних виразах POSIX, за винятком того, що в шаблонах замість !
використовується ^
.
Створіть кілька файлів для експерименту:
$ mkdir brackets $ cd brackets $ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7
Діапазони в дужках []
зазначаються за допомогою -
:
$ ls file1 file2 file3 file4 file5 file6 file7 filea fileb filec $ ls file[1-2] file1 file2 $ ls file[1-3] file1 file2 file3
Можна вказати кілька діапазонів:
$ ls file[1-25-7] file1 file2 file5 file6 file7 $ ls file[1-35-6a-c] file1 file2 file3 file5 file6 filea fileb filec
Квадратні дужки також можна використовувати для відповідності певному набору символів.
$ ls file[1a5] file1 file5 filea
Ви також можете використовувати у шаблоні пошуку символ ^
як перший символ, який сприймає всі символи крім тих, які слідують за ним.
$ ls file[^a] file1 file2 file3 file4 file5 file6 file7 fileb filec
Останнє, що ми розглянемо на цьому уроці, це класи символів. Щоб відповідати класу символів, ви використовуєте [:classname:]
. Наприклад, щоб використовувати клас цифр, який відповідає числам, ви повинні зробити щось на кшталт цього:
$ ls file[[:digit:]] file1 file2 file3 file4 file5 file6 file7 $ touch file1a file11 $ ls file[[:digit:]a] file1 file2 file3 file4 file5 file6 file7 filea $ ls file[[:digit:]]a file1a
Шаблон file[[:digit:]a]
відповідає file
, за яким слідує цифра або a
.
Класи символів, що підтримуються, залежать від поточних регіональних налаштувань. POSIX вимагає наступні класи символів для всіх регіональних мовних стандартів:
[:alnum:]
-
Букви та цифри.
[:alpha:]
-
Великі або малі літери.
[:blank:]
-
Пробіли та табуляції.
[:cntrl:]
-
Керуючі символи, наприклад, backspace, bell, NAK, escape.
[:digit:]
-
Цифри (
0123456789
). [:graph:]
-
Графічні символи (усі символи, крім
ctrl
і пробілу) [:lower:]
-
Букви нижнього регістру (
a-z
). [:print:]
-
Символи для друку (
alnum
,punct
та пробіл). [:punct:]
-
Символи пунктуації, наприклад
!
,&
,"
. [:space:]
-
Пробіли, наприклад, табуляції, пробіли, новий рядок.
[:upper:]
-
Букви верхнього регістру (
A-Z
). [:xdigit:]
-
Шістнадцяткові цифри (зазвичай
0123456789abcdefABCDEF
).
Вправи до посібника
-
Враховуючи скріншот нижче, виберіть каталоги, які будуть створені за допомогою команди
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
/tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
/tmp/infiles
/tmp/infiles/text
/tmp/infiles/text/today
-
Що робить
-v
дляmkdir
,rm
таcp
? -
Що станеться, якщо ви випадково спробуєте скопіювати три файли з одного командного рядка в уже існуючий файл замість каталогу?
-
Що відбувається, коли ви використовуєте
mv
для переміщення каталогу в нього самого? -
Як би ви видалили всі файли у вашому поточному каталозі, які починаються на
old
? -
Якому з наведених нижче файлів відповідатиме
log_[a-z]_201?_*_01.txt
?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
-
Створіть кілька шаблонів, щоб відповідати наступному списку імен файлів:
doc100 doc200 doc301 doc401
Дослідницькі вправи
-
Використовуйте man-сторінку команди
cp
, щоб дізнатися, як зробити копію файлу так, щоб дозволи та час зміни відповідали оригіналу. -
Що робить команда
rmdir -p
? Поекспериментуйте з нею і поясніть, чим вона відрізняється відrm -r
. -
НЕ ВИКОНУЙТЕ ЦЮ КОМАНДУ: що, на вашу думку, буде робити
rm -ri /*
? (СПРАВДІ, НЕ НАМАГАЙТЕСЯ ЦЕ ЗРОБИТИ!) -
Крім використання
-i
, чи є ще спосіб запобігти перезапису цільових файлівmv
? -
Поясніть дію команди
cp -u
.
Підсумки
Середовище командного рядка Linux надає інструменти для керування файлами. Деякі з них часто використовуються: cp
, mv
, mkdir
, rm
та rmdir
. Ці інструменти в поєднанні з шаблонами пошуку дозволяють користувачам дуже швидко виконувати велику кількість роботи.
Багато команд мають опцію -i
, яка виводить вам підказку, перш ніж щось робити. Підказка допоможе запобігти проблем, якщо ви щось неправильно ввели.
Багато команд мають опцію -r
. Параметр -r
зазвичай означає рекурсію. У математиці та інформатиці рекурсивна функція — це функція, яка використовує саму себе у своєму визначенні. Коли справа доходить до інструментів командного рядка, це зазвичай означає застосування команди до каталогу та всього, що знаходиться в ньому.
Команди, які використовувалися в цьому уроці:
cat
-
Прочитати та вивести вміст файлу.
cp
-
Скопіювати файли або каталоги.
echo
-
Вивести рядок.
find
-
Перехід по дереву файлової системи та пошук файлів, які відповідають певному набору критеріїв.
ls
-
Показати властивості файлів і каталогів і перелік вмісту каталогу.
mkdir
-
Створити нові каталоги.
mv
-
Перемістити або перейменувати файли або каталоги.
pwd
-
Вивести поточний робочий каталог.
rm
-
Видалити файли або каталоги.
rmdir
-
Видалити каталоги.
touch
-
Створити нові порожні файли або оновити мітку часу зміни існуючого файлу.
Відповіді до вправ посібника
-
Враховуючи скріншот нижче, виберіть каталоги, які будуть створені за допомогою команди
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
Відзначені каталоги будуть створені. Каталоги
/tmp
,/tmp/outfiles
та/tmp/outfiles/text
вже існують, томуmkdir
ігноруватиме їх./tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
X
/tmp/infiles
X
/tmp/infiles/text
X
/tmp/infiles/text/today
X
-
Що робить
-v
дляmkdir
,rm
таcp
?Зазвичай
-v
вмикає докладне виведення. Це змушує відповідні програми виводити те, що вони роблять, коли вони це роблять:$ rm -v a b removed 'a' removed 'b' $ mv -v a b 'a' -> 'b' $ cp -v b c 'b' -> 'c'
-
Що станеться, якщо ви випадково спробуєте скопіювати три файли з одного командного рядка в уже існуючий файл замість каталогу?
cp
відмовиться робити будь-що і виведе повідомлення про помилку:$ touch a b c d $ cp a b c d cp: target 'd' is not a directory
-
Що відбувається, коли ви використовуєте
mv
для переміщення каталогу в нього самого?Ви отримаєте повідомлення про помилку, що
mv
не може цього зробити.$ mv a a mv: cannot move 'a' to a subdirectory of itself, 'a/a'
-
Як би ви видалили всі файли у вашому поточному каталозі, які починаються на
old
?Вам треба використати glob
old*
зrm
:$ rm old*
-
Якому з наведених нижче файлів відповідатиме
log_[a-z]_201?_*_01.txt
?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
X
$ ls log_[a-z]_201?_*_01.txt log_f_201A_Wednesday_01.txt
log_[a-z]
відповідаєlog_
, за яким слідує будь-яка маленька літера, тож іlog_f_201A_Wednesday_01.txt
, іlog_b_2007_Mar_01.txt
відповідають._201?
відповідає будь-якому окремому символу, тому відповідає лишеlog_f_201A_Wednesday_01.txt
. Нарешті,*_01.txt
відповідає всьому, що закінчується на_01.txt
, тому нашому вибору цей параметр також відповідає. -
Створіть кілька шаблонів, щоб відповідати наступному списку імен файлів:
doc100 doc200 doc301 doc401
Є кілька рішень. Ось деякі з них:
doc* doc[1-4]* doc?0? doc[1-4]0?
Відповіді до дослідницьких вправ
-
Використовуйте man-сторінку команди
cp
, щоб дізнатися, як зробити копію файлу так, щоб дозволи та час зміни відповідали оригіналу.Ви можете використати параметр
-p
. Витяг зі сторінки man:$ man cp -p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,time‐ stamps), if possible additional attributes: context, links, xattr, all
-
Що робить команда
rmdir -p
? Поекспериментуйте з нею і поясніть, чим вона відрізняється відrm -r
.Це змушує
rmdir
вести себе подібно доmkdir -p
. Якщо передане дерево порожніх каталогів, вони будуть видалені всі.$ find . ./a ./a/b ./a/b/c $ rmdir -p a/b/c $ ls
-
НЕ ВИКОНУЙТЕ ЦЮ КОМАНДУ: що, на вашу думку, буде робити
rm -ri /*
? (СПРАВДІ, НЕ НАМАГАЙТЕСЯ ЦЕ ЗРОБИТИ!)Команда видалить усі файли та каталоги, для яких є доступ для запису у вашого облікового запису користувача. Це включає будь-які мережеві файлові системи.
-
Крім використання
-i
, чи є ще спосіб запобігти перезапису цільових файлівmv
?Так, параметр
-n
або--no-clobber
запобігає перезапису файлівmv
.$ cat a a $ cat b b $ mv -n a b $ cat b b
-
Explain
cp -u
.The
-u
option causescp
to only copy a file if the destination is missing or is older than the source file.$ ls -l total 24K drwxr-xr-x 123 emma student 12K Feb 2 05:34 .. drwxr-xr-x 2 emma student 4.0K Feb 2 06:56 . -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b $ cat a a $ cat b b $ cp -u a b $ cat b b $ cp -u a c $ ls -l total 12 -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b -rw-r--r-- 1 emma student 2 Feb 2 07:00 c