我注意到存在默认波浪号+别名:
[root@xiaobai ~]# cd ~[press Tab]
~abrt/ ~dbus/ ~lp/ ~openvpn/ ~root/ ~systemd-network/
~adm/ ~ftp/ ~mail/ ~operator/ ~rpc/ ~systemd-resolve/
~apache/ ~games/ ~mpd/ ~pkg-build/ ~rpcuser/ ~systemd-timesync/
~avahi/ ~gdm/ ~mysql/ ~polkitd/ ~rtkit/ ~tcpdump/
~avahi-autoipd ~geoclue/ ~nfs4user/ ~postfix/ ~saslauth/ ~toranon/
~bin/ ~gnome-initial-setup ~nfsnobody/ ~postgres/ ~shutdown/ ~tss
~chrony/ ~halt/ ~nm-openconnect/ ~pulse ~sshd/ ~unbound/
~colord/ ~iguanair/ ~nobody/ ~qemu/ ~sync/ ~usbmuxd/
~daemon/ ~ldap/ ~ntop/ ~radvd/ ~systemd-bus-proxy/ ~xiaobai/
[root@xiaobai ~]# cd ~halt
[root@xiaobai sbin]# pwd
/sbin
[root@xiaobai sbin]# l ~halt
14 lrwxrwxrwx. 1 root root 8 Nov 18 …
Run Code Online (Sandbox Code Playgroud) 我在测试脚本时发现了一些有趣的事情。
如果我运行,我可以从 shell 手动 ls 我的目录
$ ls ~/db_backups/
test1 test2
$
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用波浪号为 shell 变量分配一个目录位置,则它不起作用。我用单引号和双引号尝试过。
$ backupfolder='~/db_backups'
$ echo $backupfolder
~/db_backups
$ ls $backupfolder
ls: cannot access '~/db_backups': No such file or directory
$
Run Code Online (Sandbox Code Playgroud)
shell 变量内的波形符替换发生了什么?为什么我不能像手动使用目录名称中的波浪号那样通过变量来 ls 目录?
这是相当微不足道的,我只是好奇为什么mkdir ~root/.ssh
与mkdir /root/.ssh
? 我正在查看以下 docker 文件,并且创建者用于mkdir ~root/.ssh
创建.ssh
目录:
https://github.com/macropin/docker-sshd/blob/master/Dockerfile
一个比另一个有什么优势吗?当我第一次阅读它时,我认为它~root
会扩展到/rootroot
.
在 Ubuntu 22.04.3 LTS 中,如果我使用 LDAP 用户的凭据登录testuser
,在几个不同的程序中,目录的路径$HOME
不会被替换~
(相反,本地用户会发生这种情况)。
举几个例子:
在 中bash
, 的值为PS1
默认值:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
Run Code Online (Sandbox Code Playgroud)
但它显示为
testuser@myhost:/home/testuser$
Run Code Online (Sandbox Code Playgroud)
代替
testuser@myhost:~$
Run Code Online (Sandbox Code Playgroud)
在 中neomutt
,在列出邮件目录的左栏中,显示其完整路径
/home/testuser/Mail/mailbox1
Run Code Online (Sandbox Code Playgroud)
代替
~/Mail/mailbox1
Run Code Online (Sandbox Code Playgroud)
然而,在bash
,
$ echo $HOME
/home/testuser
Run Code Online (Sandbox Code Playgroud)
所以这个env
变量HOME
在某种程度上是被认可的。
这可能是什么问题?
更新
我用来sssd
管理 LDAP 用户的身份验证:
$ grep passwd /etc/nsswitch.conf
passwd: files systemd sss
Run Code Online (Sandbox Code Playgroud)
LDAP 用户和本地用户的条目看起来非常相似:
$ getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash
$ getent passwd localuser
localuser:x:<uid>:<gid>:,,,:/home/localuser:/bin/bash
Run Code Online (Sandbox Code Playgroud)
和
$ echo $HOME
/home/testuser/
Run Code Online (Sandbox Code Playgroud)
与 …