有没有办法sudo
在我每次使用时强制命令要求输入密码sudo rm /path/file
?
我想保护自己免受愚蠢的错误,当我运行历史记录中的一些命令时,由于注意力不集中而犯下的错误。
有没有办法sudo
在我每次使用时强制命令要求输入密码sudo rm /path/file
?
我想保护自己免受愚蠢的错误,当我运行历史记录中的一些命令时,由于注意力不集中而犯下的错误。
我的 VPS 大约 3 个月没有重新启动。它托管在具有 OpenVZ 虚拟化类型的服务器上,操作系统为 Ubuntu 16.04。由于某种原因,我重新启动了 VPS,之后,我无法通过 ssh 连接到服务器,我收到的消息是:
ssh: connect to host srvname.com port 22: Connection refused
所以我在 VPS 上打开了一个串行控制台并开始调查......我已经清除并重新安装了但openssh-server
没有成功。我花了两个小时在互联网上阅读有关类似问题的文章、问题和答案。
最后我设法理解/var/run/sshd
在系统启动期间没有创建目录。一旦我手动创建它,我就可以毫无问题地启动 SSH 服务,但在下次重新启动时问题仍然存在。所以我的问题是:
这个问题的原因可能是什么?为什么/var/run/sshd
系统启动时没有创建?
我怎样才能以适当的方式解决这个问题?我找到了本文末尾提到的临时解决方案。
这个问题可能与 VPS 的 OpenVZ 主机有关吗?我应该要求托管服务提供商解决吗?
和的输出为systemctl status ssh.service
:sshd -Ddp 22
journalctl -xe
# systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit-hit) since вт 2019-01-15 12:58:08 EET; 22s ago
Process: 407 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=255)
яну 15 12:58:07 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
яну 15 12:58:07 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 12:58:07 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 12:58:08 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Start request repeated too quickly.
яну 15 12:58:08 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
# $(which sshd) -Ddp 22
debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g 1 Mar 2016
debug1: private host key #0: ssh-rsa SHA256:...
debug1: private host key #1: ssh-dss SHA256:...
debug1: private host key #2: ecdsa-sha2-nistp256 SHA256:...
debug1: private host key #3: ssh-ed25519 SHA256:...
Missing privilege separation directory: /var/run/sshd
# journalctl -xe
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has begun starting up.
яну 15 13:21:21 srvname sshd[1688]: Missing privilege separation directory: /var/run/sshd
яну 15 13:21:21 srvname systemd[1]: ssh.service: Control process exited, code=exited status=255
яну 15 13:21:21 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:21 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:21 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 13:21:22 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has finished shutting down.
яну 15 13:21:22 srvname systemd[1]: Starting OpenBSD Secure Shell server...
-- Subject: Unit ssh.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has begun starting up.
яну 15 13:21:22 srvname sshd[1691]: Missing privilege separation directory: /var/run/sshd
яну 15 13:21:22 srvname systemd[1]: ssh.service: Control process exited, code=exited status=255
яну 15 13:21:22 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 13:21:22 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has finished shutting down.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Start request repeated too quickly.
яну 15 13:21:22 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
/usr/lib/tmpfiles.d/sshd.conf
和的内容/etc/init/ssh.conf
是:
# cat /usr/lib/tmpfiles.d/sshd.conf
d /var/run/sshd 0755 root root
# cat /etc/init/ssh.conf | sed '/^#/ d'
description "OpenSSH server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
umask 022
env SSH_SIGSTOP=1
expect stop
console none
pre-start script
test -x /usr/sbin/sshd || { stop; exit 0; }
test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
mkdir -p -m0755 /var/run/sshd
end script
exec /usr/sbin/sshd -D
有关系统的其他信息:
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
# uname -a
Linux srvname 2.6.32-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018 x86_64 x86_64 x86_64 GNU/Linux
# apt show openssh-server | grep 'Version'
Version: 1:7.2p2-4ubuntu2.6
临时解决方案:
我发现这/var/run
是一个符号链接/run
,我不知道为什么需要这样做,但是当我从以下位置修改文件内容时/usr/lib/tmpfiles.d/sshd.conf
:
d /var/run/sshd 0755 root root
至:
d /run/sshd 0755 root root
系统启动一切顺利,SSH服务正常启动,我可以通过SSH登录。
我正在处理 Bash 脚本,并且某个变量中包含的字符串的长度是我的条件之一。当前字符串是W5u7TBTzF17GGFV8DBJHvgAAAAI
. 最初,我在以下帮助下计算了字符串长度wc -c
:
$ VAR='W5u7TBTzF17GGFV8DBJHvgAAAAI'; echo "$VAR" | wc -c
28
但我的脚本条件[[ ${#VAR} -eq 28 ]]
永远不会通过。然后我决定将字符数加一。实际上字符串长度是 27 个字符,值${#VAR}
也是 27:
$ echo "${#VAR}"
27
所以我想知道 - 这种差异来自哪里?
我想要的是找到运行 bash 脚本的用户的名称,当这个脚本由sudo
. 据我所知,唯一可能的方法是以这种方式解析who -m
( who am i
) 的输出:
user@UbuntuServer:~$ cat who.sh
#!/bin/sh
whoami
echo $USER
who -m | awk '{print $1}'
user@UbuntuServer:~$ sudo ./who.sh
root
root
user
问题是:在 Ubuntu Desktop 16.04.4 who -m
(resp. who am i
) 中什么也不做。为什么?
另一个问题是为什么 Ubuntu 的在线手册页与在 Ubuntu 桌面或服务器上执行的who
不同?man who
但根据我的目标,这些问题并不那么重要。正如标题中提到的那样,主要问题是:如何找到使用时执行脚本的用户sudo
?
实际上,原始标题 -如何在 Ubuntu 桌面上找到“我是谁”?- 是相同但错误地提出的问题。
我正在尝试从命令行在我的视频卡的音频输出之间切换。我可以通过 GUI 设置来做到这一点,如图所示。如何以编程方式执行此操作?
图片上显示了两个音频设备,每个设备都有两个输出:
(绿色)设备 1 -具有两个输出的内置音频:
(红色)设备 2 - NVidia GTX 660 的HDMI 音频控制器。视频卡上连接了两台显示器:
第一台显示器是LG 电视,它连接到HDMI-0。
第二台显示器是LG ULTRAWIDE,它连接到DVI-I-1。
所以我想通过命令行在红色输出(两个监视器)之间切换。在我的研究中,我发现的一切都是如何在音频设备(声卡)之间切换。我已经阅读了一些主题作为这些问题:
当第一台显示器LG电视| HDMI-0用作音频输出:
$ pactl list sinks short
8 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
16 alsa_output.pci-0000_03_00.1.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING
$ pacmd list-sinks | grep name:
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
name: <alsa_output.pci-0000_03_00.1.hdmi-stereo>
当第二台显示器LG ULTRAWIDE | DVI-I-1用作音频输出:
$ pactl list sinks short
8 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
17 alsa_output.pci-0000_03_00.1.hdmi-stereo-extra1 module-alsa-card.c s16le 2ch 44100Hz RUNNING
$ pacmd list-sinks | grep name:
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
name: <alsa_output.pci-0000_03_00.1.hdmi-stereo-extra1>
pacmd list-cards
和的输出在此处pactl list cards
提供。
您可以看到(在这种特殊情况下)我正在寻找一种在sink 16
和之间切换的方法sink 17
。但是当sink 16
出现在 中时pactl list sinks
,sink 17
不会出现,反之亦然。我只能从 GUI 设置中切换它们。有没有办法通过命令行做到这一点?
我想在已弃用(过时)的文学论坛e-bane.net中找到我的文章。一些论坛模块被禁用,我无法获得作者的文章列表。此外,该网站没有被 Google、Yndex 等搜索引擎收录。
找到我所有文章的唯一方法是打开网站的存档页面(图 1)。然后我必须选择特定的年份和月份 - 例如2013 年1 月(图 1)。然后我必须检查每篇文章(图2)是否在开头写了我的昵称-pa4080(图3)。但是有几千篇文章。
我已经阅读了以下几个主题,但没有一个解决方案适合我的需求:
我将发布我自己的解决方案。但对我来说很有趣: 有没有更优雅的方法来解决这个任务?
我有 Ubuntu 16.04 的联想 ThinkPad X230 平板电脑。它有一个可转换的屏幕,当它处于平板电脑模式时,触摸板仍然处于活动状态并弄得一团糟。
我创建了以下脚本并将其绑定到内置按钮之一(通过自定义快捷方式):
#!/bin/bash -e
# Find the TouchPad device ID
ID="$(xinput | grep -ioP 'touchpad.*id=\K[0-9]*')"
if [ "$(LANG=C xinput --list-props "$ID" | awk 'NR==2{print $4}')" == "0" ]; then
# If the device is disabled, then enable it and kill 'onboard' virtual keyboard
xinput enable "$ID"; killall onboard; xrandr -o normal
elif [ "$(LANG=C xinput --list-props "$ID" | awk 'NR==2{print $4}')" == "1" ]; then
# If the device is enabled, then disable it and run 'onboard' virtual keyboard
xinput disable "$ID"; nohup onboard >/dev/null 2>&1 &
fi
该脚本工作正常,但这是一个虚假的解决方案,昨天我花了几个小时来学习如何以正确的方式做到这一点。所以我决定在这里分享这个经验。
我正在尝试以/proc/*PID*/environ
更易读的格式获取任何文件的内容。我可以通过下面显示的方式做到这一点,但我确信这不是正确的方式。
$ cat "/proc/$(pgrep gnome-session -n -U $UID)/environ"
USER=spasTEXTDOMAIN=im-configXDG_SEAT=seat0XDG_SESSION_TYPE=waylandSHLVL=1QT4_IM_MODULE=ximHOME=/home/spasDESKTOP_SESSION=ubuntuGNOME_SHELL_SESSION_MODE=ubuntuDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busIM_CONFIG_PHASE=2LOGNAME=spasGTK_IM_MODULE=ibusJOURNAL_STREAM=9:147845_=/usr/bin/gnome-sessionUSERNAME=spasXDG_SESSION_ID=70PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binXDG_RUNTIME_DIR=/run/user/1000LANG=en_US.UTF-8XDG_CURRENT_DESKTOP=ubuntu:GNOMEXDG_SESSION_DESKTOP=ubuntuXMODIFIERS=@im=ibusSHELL=/bin/bashGDMSESSION=ubuntuTEXTDOMAINDIR=/usr/share/locale/XDG_VTNR=2QT_IM_MODULE=ximPWD=/home/spasCLUTTER_IM_MODULE=ximXDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktopXDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
$ cat -e "/proc/$(pgrep gnome-session -n -U $UID)/environ"
USER=spas^@TEXTDOMAIN=im-config^@XDG_SEAT=seat0^@XDG_SESSION_TYPE=wayland^@SHLVL=1^@QT4_IM_MODULE=xim^@HOME=/home/spas^@DESKTOP_SESSION=ubuntu^@GNOME_SHELL_SESSION_MODE=ubuntu^@DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus^@IM_CONFIG_PHASE=2^@LOGNAME=spas^@GTK_IM_MODULE=ibus^@JOURNAL_STREAM=9:147845^@_=/usr/bin/gnome-session^@USERNAME=spas^@XDG_SESSION_ID=70^@PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin^@XDG_RUNTIME_DIR=/run/user/1000^@LANG=en_US.UTF-8^@XDG_CURRENT_DESKTOP=ubuntu:GNOME^@XDG_SESSION_DESKTOP=ubuntu^@XMODIFIERS=@im=ibus^@SHELL=/bin/bash^@GDMSESSION=ubuntu^@TEXTDOMAINDIR=/usr/share/locale/^@XDG_VTNR=2^@QT_IM_MODULE=xim^@PWD=/home/spas^@CLUTTER_IM_MODULE=xim^@XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop^@XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg^@
$ cat -e "/proc/$(pgrep gnome-session -n -U $UID)/environ" | sed 's/\^@/\n/g'
USER=spas
TEXTDOMAIN=im-config
XDG_SEAT=seat0
XDG_SESSION_TYPE=wayland
...
也许我必须为 分配一个特定的值$IFS
,但它是什么?实现上述结果的正确方法是什么?
最近我在联想 ThinkPad X230 平板电脑上安装了 Ubuntu 16.04。它工作得很好!我只遇到两个小问题,都与可转换屏幕连接。这个让我烦恼的是这个问题的主题。
当我登录 Unity 时,显示方向变为纵向视图模式。所以,我必须按下屏幕旋转按钮才能回到横向视图模式。
LightDM 中的默认视图是横向。当我解锁 Unity 时,问题不存在,只有当我登录时。登录 Gnome 时不存在此问题。但是我主要使用 Unity,所以我的问题是:如何强制 Unity 在登录后立即保持横向视图模式?
更新1:
我发现来宾会话和新创建的用户不存在该问题。
看起来某些应用程序会旋转显示。
我已经尝试过基于这些问题的答案的一些解决方案,但没有成功:
仅xrandr -o normal
在启动应用程序中作为命令放置是一种丑陋的解决方法。
更新 2:
通常,当我首先编辑一些系统文件时,我会创建一个备份副本。例如:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
是否有任何简单的“捷径”,例如:
sudo cp /etc/ssh/sshd_config %s.bak
?
我发现的一种解决方法是以sed
这种方式使用:
sudo sed '' /etc/ssh/sshd_config -i.bak
当grep
orsed
与选项一起使用--extended-regexp
并且模式{1,9999}
是所使用的正则表达式的一部分时,这些命令的性能会降低。为了更清楚,下面应用了一些测试。[1] [2]
grep -E
,因此只提供了用 进行的测试。egrep
sed -E
grep -E
测试 1
$ time grep -E '[0-9]{1,99}' < /dev/null
real 0m0.002s
测试 2
$ time grep -E '[0-9]{1,9999}' < /dev/null
> real 0m0.494s
测试 3
$ time grep -E '[0123456789]{1,9999}' < /dev/null > 真正的 21 分 43.947 秒
测试 4
$ time grep -E '[0123456789]+' < /dev/null
$ time grep -E '[0123456789]*' < /dev/null
$ time grep -E '[0123456789]{1,}' < /dev/null
$ time grep -P '[0123456789]{1,9999}' < /dev/null
real 0m0.002s
造成这种性能显着差异的原因是什么?
假设我们有一台安装了 Ubuntu 桌面的计算机。安装了一些桌面环境 (DE),例如:Unity、Gnome、KDE、XFCE、Mate 等。
也很少有用户拥有他们的帐户并且他们经常使用计算机。每个用户都可以根据自己的意愿更改其 DE :)
如何在有限的环境中通过 CLI 来确定当前用户的桌面环境,对于某些用户?
这个问题可以这样分割:
这些信息存储在哪个文件中?
通过在有限环境(例如ssh
session 或)中执行的脚本来阅读它的最佳方法是什么cron
?
如何为随机用户阅读此信息?
如果可能的话,我正在寻找单行命令解决方案。
我有一个使用at
命令的脚本。有时我会收到这样的电子邮件:
Date: Mon, 3 Jul 2017 14:18:00 +0300 (EEST)
From: root <[email protected]>
To: [email protected]
Subject: Output from your job 173
Another app is currently holding the xtables lock. Perhaps you want to use the -w option?
当然我会使用这个选项来阻止这样的消息,但首先我想知道这个选项的含义是什么。不幸的是-w
,选项未在 中列出man at
。
有谁知道这个选项到底是什么意思?
我想知道-为什么,当某些文件夹具有(read
或)read-write
权限时, (GROUP
或other
)的成员无法访问该文件夹?GROUP
other
我几乎可以肯定有一个合乎逻辑的解释,但我找不到它。让我举个例子。
1.有两个用户,叫admin
和guest
。
2.有一个文件夹,叫/var/www/test-dir
:
$ getfacl -pt /var/www/test-dir/
# file: /var/www/test-dir/
USER root rwx
GROUP admin r-x
other r-x
3.在这些权限内,所有用户都可以访问该文件夹:
USER root rwx (7)
能够访问该文件夹。
GROUP admin r-x (5)
能够访问该文件夹。
other guest r-x (5)
能够访问该文件夹。
guest@host:~$ cd /var/www/test-dir/
guest@host:/var/www/test-dir$
案例1: other
有r--
权限但admin
不能访问文件夹:
root@host:~# chmod 574 /var/www/test-dir/
USER root r-x (5)
能够访问该文件夹。
GROUP admin rwx (7)
能够访问该文件夹。
other guest r-- (4)
无法访问该文件 夹。
guest@host:~$ cd /var/www/test-dir
bash: cd: /var/www/test-dir/: Permission denied
情况2: other
有rw-
权限但guest
不能访问文件夹:
root@host:~# chmod 656 /var/www/test-dir/
USER root rw- (6)
能够访问该文件夹。
GROUP admin r-x (5)
能够访问该文件夹。
other guest rw- (6)
无法访问文件夹:
案例3: GROUP
有r--
权限但admin
不能访问文件夹:
root@host:~# chmod 745 /var/www/test-dir/
USER root rwx (7)
能够访问该文件夹。
GROUP admin r-- (4)
无法访问该文件夹。
other guest r-x (5)
能够访问该文件夹。
案例4: GROUP
有rw-
权限但admin
不能访问文件夹:
root@host:~# chmod 467 /var/www/test-dir/
USER root r-- (4)
能够访问该文件夹。
GROUP admin rw- (6)
无法访问该文件 夹。
other guest rwx (7)
能够访问该文件夹。
换句话说,当我无法访问另一台机器进行扫描时,我想看看服务器在外面的样子。让我举个例子:
案例 1:当我通过 SSH 连接到我的 VPS(即 Ubuntu Server)时,端口扫描的结果如下所示:
[email protected]:~$ nmap -p 1-20000 77.77.77.70
Nmap scan report for 77.77.77.70
PORT STATE SERVICE
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
443/tcp open https
8142/tcp open unknown
11273/tcp open unknown
18142/tcp open unknown
18143/tcp open unknown
18144/tcp open unknown
18145/tcp open unknown
18146/tcp open unknown
18147/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds
案例 2:当我从我的 Ubuntu 桌面机器执行相同的命令时,结果被 VPS 的防火墙过滤,它看起来像:
user@Desktop:~$ sudo nmap -p 1-20000 77.77.77.70
Nmap scan report for 77.77.77.70
PORT STATE SERVICE
80/tcp open http
443/tcp open https
11273/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 4298.23 seconds
所以,我的问题是:有没有办法从 VPS 本身实现“案例 2”中的结果?使用 ofnmap
不是强制性的。