Как мне найти исходный код символически связанного файла в Linux

Причина, по которой это не работает так, как вы написали, заключается в том, что awkбудет интерпретировать $iкак "i-е поле", а поскольку awkпеременная iне имеет значения, вы будет получено сообщение об ошибке, или если вы используете GNU awkили mawk, $iбудет таким же, как $0, то есть вся строка (с mawkили GNU awk, программа ищет строки, первый столбец которых совпадает со всей строкой ).

Вместо этого, чтобы «импортировать» вашу переменную оболочки вawk:

awk -v i="$i" '$1 == i { sum += $4 } END { print sum }' test2.txt

Кроме того, значение переменной оболочки $iвсегда будет только именем файла test1.txt(, так как это то, что вы перебираете в цикле ).

Циклический просмотр содержимого файла:

while IFS= read -r i; do
    awk...as above...
done 

Ответ αғsнιη показывает, как это можно сделать без использования цикла оболочки.

-1
05.11.2019, 01:57
1 ответ

Краткий ответ:/etc/passwd

Длинный ответ :, чтобы найти имя фактического файла/папки, на которую указывает символическая ссылка, проверьте информацию после ->в команде ls -l. Ссылка passwd в вашем примере является относительной ссылкой . .../.. означает, что файл/каталог находится на (2 )уровнях выше того, с которого вы начинаете. Такая ссылка создается командой:

ln -s../../etc/passwd.

Теперь относительные ссылки прекрасно работают, если только они не перемещены на другой уровень каталога; попробуйте переместить passwd в .config и ссылка будет разорвана. Если бы ссылка была создана вот так:

ln -s /etc/passwd.

тогда ваша ссылка будет выглядеть так (сls):

passwd -> /etc/passwd

и не важно, куда была перенесена ссылка.

0
28.01.2020, 05:11

Теги

Похожие вопросы