Поскольку во втором ln
это не перестало работать, это создает a
symlink_dir/dir_2 -> dir_2
символьная ссылка
Сделайте a:
ls -l symlink_dir/dir_2
И Вы будете видеть (вероятно, поврежденный) символьная ссылка там.
Это то, как ln
предназначен, чтобы работать, если цель является каталогом (или символьная ссылка на каталог).
Одна треть ln
мог перестать работать, потому что уже существует a dir_2
внутри symlink_dir
(иначе dir_2
).
^D
символ (также известный как \04
или 0x4, КОНЕЦ ПЕРЕДАЧИ в Unicode), значение по умолчанию для eof
специальный параметр управляющего символа драйвера терминального или псевдотерминала в ядре (более точно tty
протокол работы линии, подключенный к последовательному или pseudo-tty устройству). Это c_cc[VEOF]
из termios
структура передала TCSETS/TCGETS ioctl
каждый выходит к оконечному устройству для влияния на поведение драйвера.
Типичная команда, которая отправляет их ioctls
stty
команда.
Получать все параметры:
$ stty -a speed 38400 baud; rows 58; columns 191; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Это eof
параметр только релевантен, когда оконечное устройство находится в icanon
режим.
В том режиме терминальный драйвер (не эмулятор терминала) реализует очень простой строчный редактор, где можно ввести Клавишу Backspace для стирания символа, Ctrl-U для стирания целой строки... Когда приложение читает из оконечного устройства, оно ничего не видит, пока Вы не нажимаете Return в который точка read()
возвращает сплошную линию включая последнее LF
символ (по умолчанию, терминальный драйвер также переводит CR
отправленный Вашим терминалом по Возврату к LF
).
Теперь, если Вы хотите отправить то, что Вы ввели до сих пор, не нажимая Enter, это - то, где можно войти eof
символ. После получения того символа от эмулятора терминала терминальный драйвер отправляет текущее содержание строки, так, чтобы приложение, делающее read
на нем получит его, как (и это не будет включать запаздывание LF
символ).
Теперь, если текущая строка была пуста, и если приложение полностью считает ранее вводимые строки, read
возвратит 0 символов.
Это показывает конец файла к приложению (когда Вы читаете из файла, Вы читаете, пока нет ничего больше, чтобы быть считанным). Вот почему это звонило eof
символ, потому что отправка его заставляет приложение видеть, что более вход не доступен.
Теперь, современные оболочки, при их подсказке не устанавливают терминал в icanon
режим, потому что они реализуют свой собственный строчный редактор, который намного более совершенствуется, чем терминальный драйвер встроенный. Однако в их собственном строчном редакторе, чтобы не смущать пользователей, они дают ^D
символ (или безотносительно терминала eof
установка с некоторыми) то же значение (для выражения eof
).
CTRL_D является просто сигналом, говоря, что это - конец текстового потока. Вы не заканчиваете файл им, Вы заканчиваете свой входной поток путем ввода его. Также CTRL_D не обозначает символ или байт, как можно узнать с инструментом hexdump:
# cat >test.txt
asdf# hexdump -C test.txt
00000000 61 73 64 66 |asdf|
00000004
# ll test.txt
-rw-r--r-- 1 root root 4 Jan 21 11:55 test.txt