小编Dav*_*d Z的帖子

管理用户和组的标准 CLI 程序是什么?

我基本上是从命令行询问用户管理(例如,在没有可用图形工具的系统上)。在过去,我已经使用了几种不同的方案,以添加或删除用户和组或修改其属性:adduseruseraddusermodgpasswd,也许还有其他我忘了。我也多次听说这些程序中的一些是低级的,应该避免用于一般用途,但我永远记不起是哪个。所以我想得到一个明确的答案,哪些程序是推荐的程序,至少用于以下任务:

  • 创建一个新用户
  • 将用户添加到组
  • 从组中删除用户
  • 更改用户的主要组
  • 更改用户的登录 shell 或主目录
  • 删除用户

我正在寻找可以在几乎任何 Linux 系统(任何发行版)上使用的标准工具。

linux users utilities

9
推荐指数
3
解决办法
601
查看次数

/var 中的哪些文件需要有特定的所有者?

我不小心通过运行对我的 Web 服务器造成了未知数量的破坏

sudo chown -R myuser:mygroup * .*
Run Code Online (Sandbox Code Playgroud)

in /var/www,不记得.*会包括父目录(as ..)。大约一秒钟后,我意识到发生了什么,但为时已晚,其中一半的目录/var已“重新拥有”。我知道我可以用

sudo chown -R root:root /var
Run Code Online (Sandbox Code Playgroud)

但是有哪些文件需要由我必须手动更改的特定非 root 用户(或组)拥有?

这是在 Gentoo 上,这是一个目录列表:

$ ls -l /var
drwxr-xr-x  9 root root 4096 May 12  2009 cache
drwxr-xr-x  4 root root 4096 Aug 20 22:49 db
drwxr-xr-x  3 root root 4096 Aug 20 22:42 dist
drwxr-xr-x  4 root root 4096 Nov  1  2009 edata
drwxr-xr-x  2 root root 4096 Jun 17  2008 empty
drwxr-xr-x  5 …
Run Code Online (Sandbox Code Playgroud)

permissions defaults gentoo

6
推荐指数
1
解决办法
752
查看次数

使用正确的引用将命令写入脚本文件

我遇到过几次的情况:我有一个 shell 函数,它进行一些设置,然后调用或多或少的任意命令,如下所示:

setup_and_run() {
    some_setup_commands
    "$@"
}
Run Code Online (Sandbox Code Playgroud)

我想改变这个函数来编写一个脚本文件,我可以在完成相同的设置后使用它重新运行命令。我可以执行以下操作,这在命令中没有带空格或其他奇怪内容的参数时有效:

setup_and_run() {
    some_setup_commands
    cat >>rerun.sh <<EOF
some_setup_commands
$@
EOF
    "$@"
}
Run Code Online (Sandbox Code Playgroud)

有没有一种标准的方法来改变这一点,以便脚本得到正确的引用,一般来说,即使某些参数有空格或其他特殊字符?

例如,对于 的第二个定义setup_and_run,如果我运行

$ setup_and_run ls "my cat's \"password\""
my cat's "password"
Run Code Online (Sandbox Code Playgroud)

然后rerun.sh将包含

some_setup_commands
ls my cat's "password"
Run Code Online (Sandbox Code Playgroud)

而我希望它包含类似的东西

some_setup_commands
ls "my cat's \"password\""
Run Code Online (Sandbox Code Playgroud)

或者

some_setup_commands
ls my\ cat\'s\ \"password\"
Run Code Online (Sandbox Code Playgroud)

或者一些这样的事情。

在紧要关头,我可以将其外包给 Python 之类的东西shlex.quote(),但我正在寻找可以在 shell 本身中完成的事情,如果可能的话,或者至少使用轻量级的标准 UNIX 工具。

bash shell-script quoting

5
推荐指数
1
解决办法
1006
查看次数

通过脚本使用 ssh 身份验证自动化 git pull(非交互式)

我有一堆运行 Ubuntu 20.04 服务器的树莓派,我希望通过 Git 以非交互方式自动更新。

该脚本执行以下操作:

eval "$(ssh-agent -s)" ; ssh-add /home/michael/.ssh/terminal_github_deploy_key ; git -C /home/michael/terminal/src pull
Run Code Online (Sandbox Code Playgroud)

该脚本实际上是用 Python 编写的,但其作用与上面相同:

cmds = []
cmds.append('eval "$(ssh-agent -s)"')
cmds.append(f'ssh-add {HOME_DPATH}/.ssh/terminal_github_deploy_key')
cmds.append(f'git -C {CHECKOUT_DPATH} pull')
cmd = ' ; '.join(cmds)
subprocess.check_call(cmd, shell=True)
Run Code Online (Sandbox Code Playgroud)

除了引发此交互式警告之外,它工作正常:

The authenticity of host 'github.com (140.82.121.3)' can't be established.
ECDSA key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Run Code Online (Sandbox Code Playgroud)

根据研究,出于安全原因,它故意不接受管道(因此yes | ...不起作用)。我不确定是什么引发了警告,我猜测是 SSH,被 Git 调用,但不知道如何忽略它?我不必使用ssh-add,但这就是我设法让它工作的方式。

ssh git

5
推荐指数
1
解决办法
4634
查看次数

如何在 KDE 4 中安装新的键盘布局?

我有一个自定义的 X11 键盘布局,可以与setxkbmap. 但经过一番搜索后,我发现显然只有 XKB 布局文件不足以将其设置为 KDE 4 中的新键盘布局。我想让 KDE 系统识别我的自定义布局,以便我可以使用系统托盘小程序选择它,或使用系统设置模块将其安装为默认值。我需要做什么才能实现这一目标?如果它复杂,那很好,我仍然想知道涉及到什么。

我看过这个似乎相关的问题,但它显然是关于首先创建键盘布局,我已经完成了。

kde keyboard-layout

4
推荐指数
1
解决办法
2431
查看次数

Makefile 中目标后的标记更改

我看到一行 makefile 如下:

$(LAST_TARGET_DIR)/%: LFLAGS += -lpthread -lrt -Wl,-uevaluate
Run Code Online (Sandbox Code Playgroud)

在我的理解中,$(LAST_TARGET_DIR)/%是一个目标匹配,目标之后应该是它的依赖项。为什么链接标志在这里改变?

make

2
推荐指数
1
解决办法
850
查看次数