только покажите исходный файл и нацелены на связанный файл с помощью 'ls'

См.: /lib/systemd/system/systemd-tmpfiles-clean.timer:

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Это выполняет соответствие .service файл 15 спустя минуты после начальной загрузки и затем каждый день, в то время как система произошла. Если Вы перезагружаете многократно в тот же день, у Вас может просто быть резервная проверка сценария mtime архива и пропуска, которые работают, если это - меньше чем старый день.

Кроме того, если Ваши резервные копии будут тяжелыми на IO, могло бы быть полезно читать о IOScheduling* директивы в systemd.exec (5) страница справочника.

10
13.12.2014, 00:22
4 ответа

LS К сожалению, не имеет возможности получить атрибуты файла и отображать их произвольно. Некоторые системы имеют отдельные команды для этого (например, GNU имеет команду или функциональность в GNU Найти ).

На большинстве современных систем, с большинством файлов, это должно работать, хотя:

$ ln -s '/foo/bar -> baz' the-file
$ LC_ALL=C ls -ldn the-file | sed '
   1s/^\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{8\}//'
the-file -> /foo/bar -> baz

, который работает, удаляя первые 8 пустых разграниченных полей первой строки выхода LS -L . Это должно работать, за исключением систем, где GID не отображается там или первые 2 поля соединены вместе, когда есть большое количество ссылок.

С GNU : :

$ LC_ALL=C stat -c '%N' the-file
'the-file' -> '/foo/bar -> baz'

с GNU Найти :

$ find the-file -prune \( -type l -printf '%p -> %l\n' -o -printf '%p\n' \)
the-file -> /foo/bar -> baz

с FreeBSD / OS / X Stat:

f=the-file
if [ -L "$f" ]; then
  stat -f "%N -> %Y" -- "$f"
else
  printf '%s\n' "$f"
fi

с ZSH Stat:

zmodload zsh/stat
f=the-file
zstat -LH s -- "$f"
printf '%s\n' ${s[link]:-$f}

Многие системы также имеют команду ReadLink , чтобы специально получить цель ссылки:

f=the-file
if [ -L "$f" ]; then
  printf '%s -> ' "$f"
  readlink -- "$f"
else
  printf '%s\n' "$f"
fi
7
27.01.2020, 20:02

Вы можете поставить библиотеки в ~ / mylib ~ / mylib ~ / mylib ~ / mylib ld_library_path , чтобы найти там:

export LD_LIBRARY_PATH=~/mylib

Вы можете поместить эту строку в вашем ~ / .bashrc Если вы хотите, чтобы это было доступно более навсегда.

-121--196211-

с GNU LS (и, видимо, TCSH Реализация) Вы можете взломать $ Ls_colors Переменная среды для вставки разделителей, в которые вам нравятся (но TCSH Встроенный LS-F не делает целей ссылки - только ссылка Флаги ) Обычно LS LS вставляет произвольные непечатанные терминальные высказывания на основе значений, хранящихся в этой среде VAR, но ничего не останавливает нас от вставки произвольного. Подробнее об этом здесь .

Например:

LS_COLORS='ln=///\n:lc=:no=//:rc=:rs=:' \
\ls ~ -l --color=always | 
sed '\|///|,\|//|!d;//d'

, который помещает строку, такую ​​как // в головке каждого списка (так как только до lrwcrwx ) и A /// \ N непосредственно перед файлом любой ссылки. SED Затем фильтры на линии линии - это будет d D d d lete каждая линия ввода до тех пор, пока она не встречается /// и оттуда через следующую строку, которая соответствует // Это удалит строки сопоставления // . Таким образом, он только получает имя ссылки и целевую цену связи - независимо от промежуточных символов. Это связано с тем, что / не может произойти в файле имени файла - и те, кто в любом пути LS может напечатать только вонзить только по отдельности.

Смотрите?

mkdir test; cd test
touch 'long


name' shortname
ln -s l* "$(printf %s.ln l*)"; ln -s s* shortname.ln

LS_COLORS='ln=///\n:lc=:no=//:rc=:rs=:' \
\ls  -l --color=always | sed '\|///|,\|//|!d;//d'

... Какие печатаются:

long


name.ln -> long


name
shortname.ln -> shortname

Попробуйте сами.

2
27.01.2020, 20:02

Используйте команду файл .

[sreeraj@server ~]$ ls -l mytest
lrwxrwxrwx 1 sreeraj sreeraj 15 Dec 12 09:31 mytest -> /usr/sbin/httpd

[sreeraj@server ~]$ file mytest
mytest: symbolic link to `/usr/sbin/httpd'

ИЛИ

[sreeraj@server ~]$ file -b mytest
symbolic link to `/usr/sbin/httpd'
[sreeraj@server ~]$

также, пожалуйста, прочитайте чтение через страницу человека LS и проверьте параметры -L и -H и посмотрим, если это хватило Ваше требование.

5
27.01.2020, 20:02

[В Linux / Bash]

Я бы сделал следующее:

ls -l | sed -e"s/ \+/ /g" | cut -d' ' -f 9-

Команда sed сворачивает несколько пробелов в один пробел; cut ] извлекает 9-е поле и далее, где разделителем полей является пробел.

Типичный результат этого:

libboost_atomic.a
libboost_atomic.so -> libboost_atomic.so.1.57.0
libboost_atomic.so.1.57.0
...
libboost_wserialization.a
libboost_wserialization.so -> libboost_wserialization.so.1.57.0
libboost_wserialization.so.1.57.0

Альтернативы:

ls -l | awk '{ print $9, $10, $11 }'
ls -l | awk '{ $1 = $2 = $3 = $4 = $5 = $6 = $7 = $8 = "" ; print }'

Но они несовершенны: первый может выводить конечные пробелы; вторые, ведущие пробелы.

-1
27.01.2020, 20:02

Теги

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