~
はい$HOME
。私はcd ~
そうです/home/cat
。これまではとても簡単ですか?
Bashでは、以下が発生します。
cat @ mint-kitty : ~/Downloads $ cd ~ # from /home/cat/Downloads to /home/cat/, as an example, but behaviour happens with any directory
cat @ mint-kitty : ~ $ cd ~<TAB>proxy/ # oh? what's this?
cat @ mint-kitty : /bin $ cd ~<TAB><TAB>
~ais ~clamav/ ~debian-tor/ ~gitlog ~list ~mixmaster/ ~ntp ~redis/ ~stunnel4 ~systemd-resolve ~uuidd/
~avahi/ ~cl-builder/ ~dirmngr/ ~gnats ~lp ~monkeysphere/ ~oident/ ~roard/ ~sync/ ~systemd-timesync/ ~vde2-net
~avahi-autoipd/ ~clickpkg ~dnsmasq/ ~irc ~mail/ ~mpd/ ~pdnsd/ ~root/ ~syncache/ ~timidity/ ~whoopsie
~backup/ ~colord/ ~epmd ~jetty/ ~man/ ~muroard/ ~postgres/ ~rtkit/ ~sys/ ~tomcat8 ~www-data/
~bin/ ~daemon/ ~festival ~libvirt-dnsmasq/ ~mdm/ ~mysql ~proxy/ ~saned ~syslog ~trafficserver
~bind/ ~Debian-exim/ ~games/ ~libvirt-qemu/ ~memcache ~news ~pulse ~speech-dispatcher ~systemd-bus-proxy/ ~uml-net
~cat/ ~debian-spamd/ ~gitdaemon ~lightdm/ ~messagebus/ ~nobody ~radvd ~sshd/ ~systemd-network ~uucp
cat @ mint-kitty : /bin $ cd ~systemd-resolve
bash: cd: /run/systemd/resolve: No such file or directory
1 | cat @ mint-kitty : /bin $ cd ~redis
cat @ mint-kitty : /var/lib/redis $ cd ~clamav
cat @ mint-kitty : /var/lib/clamav $ cd ~irc
bash: cd: /var/run/ircd: No such file or directory
1 | cat @ mint-kitty : /var/lib/clamav $ cd ~gnats
bash: cd: /var/lib/gnats: No such file or directory
1 | cat @ mint-kitty : /var/lib/clamav $ cd ~sshd
cat @ mint-kitty : /var/run/sshd $ cd ~nobody
bash: cd: /nonexistent: No such file or directory
明らかに<TAB>
、バイトは実際のテキストではなくTABキーの代わりにASCIIに送信されます9
。
PS1
現在のパスと戻りコードを示すプロンプトに情報を残しました。私の質問は、これらのディレクトリオートコンプリートの関連性は何ですか~
?
私はこれらとそれらがよりよく理解するために指す場所を表にしました(しかし今はもっと混乱しています)。
thing points-at?
===========================================
~ais ENOENT /home/ais/ # user ais uid=156(ais) gid=163(ais) groups=163(ais) does not have an entry in /home/
~avahi /var/run/avahi-daemon/
~avahi-autoipd /var/lib/avahi-autoipd/
~backup /var/backups/
~bin /bin/
~bind /var/cache/bind/
~cat /home/cat/
~clamav /var/lib/clamav/
~cl-builder /usr/share/common-lisp// # two slashes
~clickpkg ENOENT /nonexsistent/ # yes, really
~colord /var/lib/colord/
~daemon /usr/sbin/ # ??
~Debian-exim /var/spool/exim4/ # ??
~debian-spamd /var/lib/spamassassin/
~debian-tor /var/lib/tor/
~dirmngr /var/cache/dirmngr/
~dnsmasq /var/lib/misc/ # ??
~epmd /var/run/epmd/
~festival ENOENT /home/festival # user festival uid=131(festival) gid=29(audio) groups=29(audio) does not have an entry in /home/
~games /usr/games/ # ???
~gitdaemon ENOENT /nonexistent/
~gitlog ENOENT /nonexistent/
~gnats /var/lib/ircd/
~jetty /usr/share/jetty8/
~libvirt-dnsmasq /var/lib/libvirt/
~libvirt-qemu /var/lib/libvirt/
~lightdm /var/lib/lightdm/
~list ENOENT /var/list/
~lp ENOENT /var/spool/lpd/
~mail /var/mail/
~man /var/cache/man/
~mdm /var/lib/mdm/
~memcache ENOENT /nonexistent/
~messagebus /var/run/dbus
~mixmaster /var/lib/mixmaster/
~monkeysphere /var/lib/monkeysphere/
~mpd /var/lib/mpd/
~muroard /var/lib/muroard/
~mysql ENOENT /nonexistent/
~nobody ENOENT /nonexistent/
~ntp ENOENT /home/ntp # user ntp uid=107(ntp) gid=114(ntp) groups=114(ntp) does not have an entry in /home/
~oident / # ????
~pdnsd /var/cache/pdnsd/
~postgres /var/lib/postgresql/
~proxy /bin/
~pulse ENOENT /var/run/pulse
~radvd ENOENT /var/run/radvd
~redis /var/lib/redis
~roard /var/lib/roard
~root /root
~rtkit /proc
~saned ENOENT /var/lib/saned
~speech-dispatcher ENOENT /var/run/speech-dispatcher
~sshd /var/run/sshd
~stunnel4 ENOENT /var/run/stunnel4
~sync /bin/
~syncache /var/run/syncache-drb/
~sys /dev/ # ???
~syslog ENOENT /home/syslog # user syslog uid=104(syslog) gid=109(syslog) groups=109(syslog),4(adm) does not have an entry in /home/
~systemd-bus-proxy /run/systemd/
~systemd-network ENOENT /run/systemd/netif/
~systemd-resolve ENOENT /run/systemd/resolve/
~systemd-timesync /run/systemd/
~timidity /etc/timidity/
~tomcat8 ENOENT /usr/share/tomcat8/
~trafficserver ENOENT /var/run/trafficserver/
~uml-net ENOENT /home/uml-net/ # user uml-net uid=146(uml-net) gid=155(uml-net) groups=155(uml-net) does not have an entry in /home/
~uucp ENOENT /var/spool/uucp/
~uuidd /run/uuidd/
~vde2-net ENOENT /var/run/vde2/
~whoospie ENOENT /nonexistent/
~www-data /var/www
列thing
は表示された項目で表示されます~<TAB><TAB>
。ディレクトリを指すpoints-at
かthing
、存在しない場所を指しますthing
。
たとえば、~cat
与えられたbash: /home/cat: Is a directory
、だから~cat -> /home/cat
しかし~clickpkg
与えられたbash: /nonexistent: No such file or directory
、だから~clickpkg -> ENOENT /nonexistent/
。
私が持っているすべてのデータを提供しました。ここで何が起こっているのでしょうか?~
秘密が何かに拡張されたのではないだろうか?
答え1
Aはユーザーのディレクトリ~user
です。これは、次のすべてのディレクトリのリスト(2番目の列)$HOME
によって改善されます。~
awk -F ":" '{printf( "%15s \t %-20s\n",$1,$6)}' /etc/passwd
man bashで(「チルダ拡張」を検索)
チルダ拡張
チルダプレフィックスに引用符がない文字がある場合、チルダプレフィックスでチルダの後に続く文字は、可能なログイン名として扱われます。
...チルダプレフィックスは、指定されたログインに関連付けられているホームディレクトリに置き換えられます。