Это шестое видео о написании скриптов в коммандной оболочке – 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