Мой любимый способ — использовать compgen -c
. Например, чтобы найти все команды, содержащиеmount
:
$ compgen -c | grep mount
gvfs-mount
mmount
ideviceimagemounter
grub-mount
humount
hmount
umount
mountpoint
mount
fusermount
umount
mount.ntfs
mount.lowntfs-3g
mount.cifs
umount.udisks
mount.nfs
umount.nfs
mount
mount.ntfs-3g
mount.fuse
showmount
rpc.mountd
mountesp
umount.udisks2
mountstats
automount
Что хорошо в compgen -c
, так это то, что он также находит псевдонимы, пользовательские функции и встроенный Bash -в командах, например:
$ alias aoeuidhtn='echo hi'
$ compgen -c | grep aoeuidhtn
aoeuidhtn
$ my-great-function() { printf "Inside great function()\n"; }
$ compgen -c | grep great
my-great-function
$ compgen -c | grep '^cd$'
cd
Кроме того, compgen
является частью Bash, поэтому он всегда доступен. Как описаноhelp compgen
:
Display possible completions depending on the options.
Intended to be used from within a shell function generating possible completions. If the optional WORD argument is supplied, matches against WORD are generated.
Exit Status:
Returns success unless an invalid option is supplied or an error occurs.
Все символические ссылки являются -односторонними. Что касается ядра, после входа в /D/S1
и запуска chdir("ls2")
вы попадаете в /D/S2
, поэтому, если вы запустите chdir("..")
, вы окажетесь в /D
.
Если вы сделаете это в оболочке, после
cd /D/S1
cd ls2
cd..
вы попадаете в /D/S1
. Причина в том, что оболочка самостоятельно отслеживает текущий каталог и запоминает символические ссылки.
Вы не можете отключить это поведение оболочки для ссылки -по ссылке -, но вы можете отключить ее при выполнении команды cd
. После запуска cd ls2
оболочка запоминает текущий каталог как /D/S1/ls2
:
$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ cd..
$ pwd
/D/S1
Чтобы заставить оболочку забыть свою символическую ссылку -с учетом отслеживания текущего каталога, передайте параметр -P
в cd
. Команда pwd
также имеет параметр -P
.
$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ pwd -P
/D/S2
$ cd -P..
$ pwd
/D
Вы также можете забыть о логическом отслеживании при переходе на символическую ссылку:
$ pwd
/D/S1
$ cd -P ls2
$ pwd
/D/S2
$ cd..
$ pwd
/D