Как перечислить дескрипторы открытых файлов (и файлы, на которые они ссылаются) в моем текущем сеансе bash

вы можете использовать вывод fping в качестве целевого списка nmap:

fping -aqg ip/24 | xargs nmap -sn --traceroute

Если ваша проблема в том, что какой-то шлюз в вашей сети выдает поддельные ARP-ответы (генерируя ложные срабатывания), вы можете использовать -sn -PE , чтобы исправить это:

nmap -sn -PE --traceroute ip/24

Таким образом, Nmap будет исключительно отображать хост (и выполнять трассировку), если хост отвечает на запрос ICMP (ping).

25
29.12.2016, 01:31
4 ответа

Предполагая, что вы хотите перечислить файловые дескрипторы, подключенные к любому терминалу, вы можете использовать lsof / fuser ] или подобное, например:

$ lsof -p $$ 2>/dev/null | awk '$NF ~ /\/pts\//'
bash    32406 foobar    0u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    1u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    2u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    3u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar  255u   CHR 136,31      0t0      34 /dev/pts/31

Эти инструменты в основном анализируют / proc , поэтому вы можете просто получить доступ к / proc / $$ / fd / , например:

ls /proc/$$/fd/*
9
27.01.2020, 19:40

Да, здесь будут перечислены все дескрипторы открытых файлов:

$ ls -la /proc/$$/fd
total 0
dr-x------ 2 sorontar sorontar  0 Dec 28 00:56 .
dr-xr-xr-x 9 sorontar sorontar  0 Dec 28 00:56 ..
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 0 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 1 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 2 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 255 -> /dev/pts/6
l-wx------ 1 sorontar sorontar 64 Dec 28 00:56 4 -> /home/sorontar/testfile.txt

Конечно, как обычно: 0 - стандартный ввод, 1 - стандартный вывод и 2 - стандартный поток.
В данном случае 4-й файл - это открытый файл (для записи).

65
27.01.2020, 19:40
lsof -a -p $$

Только сетевой fd:

lsof -i -a -p $$
10
27.01.2020, 19:40

Используйте утилитуlsofдля вывода всех файловых дескрипторов для текущего процесса оболочки (процесса, указанного-p $$)и (-a), где файловый дескриптор является числовым(-d 0-256):

$ lsof -p $$ -a -d 0-256
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    16883  ant    0u   CHR 136,15      0t0   18 /dev/pts/15
bash    16883  ant    1u   CHR 136,15      0t0   18 /dev/pts/15
bash    16883  ant    2u   CHR 136,15      0t0   18 /dev/pts/15
bash    16883  ant  255u   CHR 136,15      0t0   18 /dev/pts/15

Передайте в Awk, чтобы напечатать только дескриптор файла и соответствующее ему имя файла:

$ lsof -p $$ -a -d 0-256  | awk '{ printf("%4s:\t%s\n", $4, $NF) }'
  FD:   NAME
  0u:   /dev/pts/15
  1u:   /dev/pts/15
  2u:   /dev/pts/15
255u:   /dev/pts/15

Примечание :когда lsofпечатает файловые дескрипторы, он добавляет следующий код для указания режима доступа к файлу:

  • r– доступ на чтение
  • w– доступ для записи
  • u— доступ для чтения и записи
4
01.12.2020, 20:36

Теги

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