Как выполнить «uname -r» для другого ядра?

Вам не нужно kill -USR1, чтобы узнать, где находится dd. Вы можете использовать lsof для отображения позиции дескриптора его входного файла. Получение разбираемого вывода немного заумно, но это работает. Обратите внимание, что 0 - это дескриптор входного файла; если вы передадите if=... аргумент dd, а не позволите ему читать из стандартного ввода, то в зависимости от вашей реализации dd, он может читать из другого дескриптора.

lsof -a -o -p $! -d 0 -F o | sed -n 's/^o[0-9]*t//p'

В Linux вы можете получить эту информацию непосредственно из /proc.

С таким же успехом можно использовать cat вместо dd: это часто быстрее и меньше ошибок.

16
14.08.2018, 13:46
2 ответа

[начинает набор. Набор завершается ]. Но есть способ сделать ]частью набора, а именно указать ]в качестве первого символа. Поскольку пустой набор не имеет никакого смысла, это не двусмысленно.

Таким образом, ваши примеры в основном представляют собой точку, за которой следует множество, содержащее точку, поэтому оно соответствует двум точкам.

Более поздние примеры не находят никаких файлов и поэтому возвращаются дословно.

26
27.01.2020, 19:48

Только цитируемые строки не подлежат подстановке:

$ echo ".[].aliases[]"
.[].aliases[]

Но не -строки в кавычках подлежат подстановке. Строка без кавычек, содержащая *или ?или (допустимое)[](квадратное выражение ), будет изменена списком файлов, которые соответствуют ей. Точно так же, как *преобразуется во все файлы в соответствующем каталоге, а ?соответствует файлам только с одним символом, (действительный)[]будет соответствовать файлам с символами внутри скобок. Точка — допустимый символ:

$ echo a[.]b
a[.]b

$ touch "a.b"
$ echo a[.]b
a.b

Чтобы можно было сопоставить ], это должен быть первый символ в квадратных скобках:

$ touch "a]b"
$ ls a[]]b
a]b

Выражение с пустыми скобками не имеет смысла (и не раскрывается):

$ touch ab
$ ls a[]b
ls: cannot access 'a[]b': No such file or directory

Вот почему это работает:

$ touch a]c abc afc azc a:c a?c aoc 
$ ls a[]bfz:?]c
abc  a:c  a?c  a]c  afc  azc

Для [идея аналогична:

$ touch a[c
$ ls a[[]c
a[c

, но может стоять в любой позиции выражения в квадратных скобках:

$ ls a[]bf[z:?]c
abc  a:c  a?c  a[c  a]c  afc  azc

$ ls a[]bfz:?[]c
abc  a:c  a?c  a[c  a]c  afc  azc

Размещенная вами строка .[].foo[]будет соответствовать точке, за которой следует ], ., f, oили [. Это похоже на:

$ echo a[].foo[]c
a[c a]c afc aoc

И это будет соответствовать следующим образом:

$ touch.].f.o.[.a.b.z

$ echo.[].foo[]
...[.].f.o

Обратите внимание, что запись каталога ..не нужно создавать, так как она существует внутри каждого каталога по умолчанию. Но простая точка .не будет сопоставляться с глобусом, так как она должна сопоставляться явно (с использованием точки ).

Но это не будет соответствовать ..aliases, так как выражение в квадратных скобках будет соответствовать только одному символу. Чтобы сопоставить несколько символов, вам нужно использовать*(что угодно):

$ touch..a..l..i..aliases..alias..ali
$ echo.[].aliases[]
...[.].a

$ echo.[].aliases[]*
...[.].a..a..ali..alias..aliases..i..l
4
27.01.2020, 19:48

Теги

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