[Video] v20.6. Копирование файлов и директорий. Hard и soft линки. Команды cp, ln в CLI Ubuntu.


Это шестое видео о написании скриптов в коммандной оболочке – bash scripting.

Первая команда сегодня – cp – copy.
cp – copy files and directories

В моей тестовой директории ничего нет:
~/$ ls -l
total 0
~$

Сначала создам файл:
touch testfile
Создам директорию:
mkdir testdir
Если нужно скопировать файл из одной директории в другую, то можно воспользоваться командой cp в CLI.
– если нужно дать копии новое имя
cp testfile testdir/testfile_new
– если нужно оставить оригинальное имя
cp testfile testdir/

~$ ls -lh
total 4.0K
drwxrwxr-x 2 alexander alexander 4.0K Nov 7 16:16 testdir
-rw-rw-r-- 1 alexander alexander 0 Nov 7 16:15 testfile

В директории testdir ничего сейчас нет:
~$ ls -lh testdir/
total 0

Скопирую файл testfile в директорию testdir
~$ cp testfile testdir/
Теперь в testdir есть файл:
~$ ls -lh testdir/
total 0
-rw-rw-r-- 1 alexander alexander 0 Nov 7 16:16 testfile
~$

Как мы видим команда cp отличается от mv о которой я рассказал ранее. В данном случае создаётся новый файл, а оригинальный файл остаётся.
В случае mv – оригинальный файл в оригинальной директории перестаёт существовать.

Следующая команда это ln. Бывают hard и soft линки. Сейчас я покажу в чём разница:
ln – make links between files

hard links
Сначала создаю файл у себя в тестовой директории:
~/MyTest$ touch file.txt
~/MyTest$ ls -lh
total 0
-rw-rw-r-- 1 alexander alexander 0 Nov 7 16:24 file.txt

Делаю hard линк только что созданного файла и называю его (этот линк) file-ln.txt:
~/MyTest$ ln file.txt file-ln.txt
~/MyTest$ ls -lh
total 0
-rw-rw-r-- 2 alexander alexander 0 Nov 7 16:24 file-ln.txt
-rw-rw-r-- 2 alexander alexander 0 Nov 7 16:24 file.txt

Ввожу текст в свой оригинальный файл:
~/MyTest$ cat > file.txt
123456

Проверяю результат и содержание обоих файлов:
~/MyTest$ cat file.txt
123456
~/MyTest$ cat file-ln.txt
123456

Как видно изменения в одном файле отразились и в другом файле!

Теперь внесём изменения в hard-link файл:
~/MyTest$ cat >> file-ln.txt
qwerty

Проверим результат:
~/MyTest$ cat file.txt
123456
qwerty
~/MyTest$ cat file-ln.txt
123456
qwerty

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

Теперь удалим оригинальный файл и посмотрим как это повлияет на hard link файл:
~/MyTest$ rm file.txt
~/MyTest$ ls -lh
total 4.0K
-rw-rw-r-- 1 alexander alexander 14 Nov 7 16:25 file-ln.txt

Проверим содержимое hard link файла:
~/MyTest$ cat file-ln.txt
123456
qwerty
Никаких изменений нет – файл можно прочитать и данные доступны.

Теперь о soft links.
Создаём файл.
~/MyTest$ touch file.txt
~/MyTest$ ls -lh
total 0
-rw-rw-r-- 1 alexander alexander 0 Nov 7 16:27 file.txt

Создаём soft-link файл с помощью команды ln и ключа -s
~/MyTest$ ln -s file.txt file-soft-ln.txt
~/MyTest$ ls -lh
total 0
lrwxrwxrwx 1 alexander alexander 8 Nov 7 16:27 file-soft-ln.txt -> file.txt
-rw-rw-r-- 1 alexander alexander 0 Nov 7 16:27 file.txt

Как видно файл был создан, но он отображается немного по другому.

Внесём данные в оригинальный файл:
~/MyTest$ cat > file.txt
123456

Проверим содержимое обоих файлов:
~/MyTest$ cat file.txt
123456
~/MyTest$ cat file-soft-ln.txt
123456

Как мы видим содержимое изменилось в обоих файлах.

Теперь внесём изменения в soft link файл:
~/MyTest$ cat > file-soft-ln.txt
qwerrtt

Проверим содержимое:
~/MyTest$ cat file-soft-ln.txt
qwerrtt
~/MyTest$ cat file.txt
qwerrtt

Теперь удалим оригинальный файл:
~/MyTest$ rm file.txt
~/MyTest$ ls -lh
total 0
lrwxrwxrwx 1 alexander alexander 8 Nov 7 16:27 file-soft-ln.txt -> file.txt

Попробую открыть soft-link файл:
~/MyTest$ cat file-soft-ln.txt
cat: file-soft-ln.txt: No such file or directory

Без оригинального файла софт-линк не работает. Софт линк это аналок ярлыков в Windows.

Смотрите также Википедию.
Sources:
https://www.youtube.com/watch?v=IIhh1e1fURU&index=33&list=PL7B7FA4E693D8E790
http://www.opennet.ru/docs/RUS/bash_scripting_guide/bash_scripting_guide-prog.html.gz