Если сервером является FTP-сервер, wget
развернет подстановочные знаки:
wget --no-verbose 'ftp://ftp.gnu.org/gnu/tar/*1.26*'
2012-10-02 12:02:17 URL: ftp://ftp.gnu.org/gnu/tar/*1.26* [11217] -> ".listing" [1]
2012-10-02 12:02:23 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.cpio.gz [3421172] -> "tar-1.26.cpio.gz" [1]
2012-10-02 12:02:23 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.cpio.gz.sig [189] -> "tar-1.26.cpio.gz.sig" [1]
2012-10-02 12:02:31 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.shar.gz [5246246] -> "tar-1.26.shar.gz" [1]
2012-10-02 12:02:31 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.shar.gz.sig [189] -> "tar-1.26.shar.gz.sig" [1]
2012-10-02 12:02:35 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.tar.bz2 [2339773] -> "tar-1.26.tar.bz2" [1]
2012-10-02 12:02:35 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.tar.bz2.sig [189] -> "tar-1.26.tar.bz2.sig" [1]
2012-10-02 12:02:41 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.tar.gz [3435280] -> "tar-1.26.tar.gz" [1]
2012-10-02 12:02:41 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.tar.gz.sig [189] -> "tar-1.26.tar.gz.sig" [1]
2012-10-02 12:02:45 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.tar.xz [1783904] -> "tar-1.26.tar.xz" [1]
2012-10-02 12:02:45 URL: ftp://ftp.gnu.org/gnu/tar/tar-1.26.tar.xz.sig [189] -> "tar-1.26.tar.xz.sig" [1]
иначе, как sch предполагает, использовать lftp
:
lftp -c mget 'http://ftp.gnu.org/gnu/tar/*1.26*'
Нет, в Linux они не всегда уникальны.
Linux использует devpts
виртуальную файловую систему для предоставления псевдотерминалов (ptys ), и эту виртуальную файловую систему можно монтировать более одного раза и в разных местах, что удобно при настройке chroot или контейнеров пространства имен. Хотя кортеж major:minor
уникален для экземпляра файловой системы devpts
, он не уникален для работающей системы :
# mount -t devpts devpts /dev/pts
# script -q /dev/null
# stat -c '%n %t:%T %d:%i' `tty`
/dev/pts/0 88:0 34:3
# mount -t devpts devpts /dev/pts
# script -q /dev/null
# stat -c '%n %t:%T %d:%i' `tty`
/dev/pts/0 88:0 35:3
В приведенном выше примере команда script(1)
создает псевдо-терминал -и запускает в нем оболочку. Чертовски очевидно, что псевдотерминал -, созданный первым процессом script
, отличается от терминала, созданного вторым, но у них одинаковые имена и старшие и младшие номера.
Чтобы однозначно идентифицировать псевдотерминал, вам нужно использовать его кортеж device:inode
или объединить номер устройства (файловой системы devpts )с его major:minor
. Проблема в том, что поле "tty" в/proc/PID/stat
(7-м, см. справочную страницу proc(5)
; вот где такие инструменты, как lsof
или ps
получают информацию из )содержит только st_rdev
tty (упакованныйmajor:minor
); если это ведомое устройство pty, нет указания на файловую систему devpts
, которая его предоставляет. Те же проблемы влияют на номер устройства, который можно получить с помощью TIOCGDEV
ioctl.
Кажется, не существует надежного способа идентифицировать управляющий терминал процесса в Linux.