我正在编写一个安装外部依赖项的脚本(实际上是脚本和 makefile 的组合):一些apt-get命令,一些git克隆,构建,安装,将用户添加到组,......
这些脚本中的某些操作需要超级用户权限,有些则不需要。
到目前为止,我已经使用 sudo 运行了整个 make 过程,但它有一些缺点:
git我克隆的回购root作为所有者,这意味着我无法在没有sudo或的情况下修改它们chownwhoami返回root仅以超级用户身份运行需要它的命令的最佳方式是什么?理想情况下,该过程仍需要我输入sudo密码,但仅在安装过程开始时输入一次。它会在最后忘记它,但一直保留它直到那时(可能需要几个小时)。
我在网上找到的解决方案包括:
sudo -v在脚本的开头,但如果我理解正确,这会超时。我的脚本可能会运行几个小时sudo,但那些命令并不需要超级用户使用sudo -u $(logname) <command>。这就是我现在所做的,但感觉应该是相反的。理想情况下,我希望我的脚本:
sudo -k 关闭超级用户会话我正在尝试在 Ubuntu 机器上使用我的佳能 DSLR 作为网络摄像头。相机不显示为/dev/video*。
相机出现在hwinfo --usb:
19: USB 00.0: 10f01 WebCam
[Created at usb.122]
Unique ID: R8DB._ROX1vreGqF
Parent ID: FKGF.4Nx_qoDfSd7
SysFS ID: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0
SysFS BusID: 2-1.1:1.0
Hardware Class: camera
Model: "Canon EOS 100D"
Hotplug: USB
Vendor: usb 0x04a9 "Canon"
Device: usb 0x3270 "EOS 100D"
Revision: "0.02"
Driver: "usbfs"
Driver Modules: "usbcore"
Speed: 480 Mbps
Module Alias: "usb:v04A9p3270d0002dc00dsc00dp00ic06isc01ip01in00"
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #4 (Hub)
Run Code Online (Sandbox Code Playgroud)
USB相关lsmod显示:
$ lsmod | grep usb …Run Code Online (Sandbox Code Playgroud) 我已经安装了ack(替代 grep)。在基于 debian 的系统中,由于包名 ack 已经存在(完全不同的东西),所以该包被称为“ack-grep”。
该安装说明提到的方式,让用户使用命令ack,如果它是ack-grep:
在 Debian 衍生的发行版上,ack 被打包为“ack-grep”,因为“ack”已经存在。如果您只是通过以下方式安装:
Run Code Online (Sandbox Code Playgroud)$ sudo apt-get install ack-grep您的 ack 将被称为“ack-grep”,每次调用要输入的字符多 167%。这对你可怜的手指来说是可悲的。
要创建本地分流,将 ack-grep 重命名为 ack,首先安装 ack-grep 包,如上图所示。然后,运行:
Run Code Online (Sandbox Code Playgroud)$ sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
到现在为止还挺好。现在当我尝试升级我的系统时,apt-get upgrade由于转移而抱怨:
Unpacking ack-grep (2.12-2) over (2.12-1) ...
dpkg: error processing archive /var/cache/apt/archives/ack-grep_2.12-2_all.deb (--unpack):
trying to overwrite `/usr/bin/ack', which is the diverted version of `/usr/bin/ack-grep'
Run Code Online (Sandbox Code Playgroud)
很好,dpkg 找到了分流,并尝试覆盖/usr/bin/ack,但为什么没有成功?
我尝试按照说明重做转换:
$ sudo dpkg-divert --local --divert …Run Code Online (Sandbox Code Playgroud) 我为我 3 岁的孩子创建了一个没有密码的帐户。在该帐户不活动一段时间后,会话会锁定。
然后我无法解锁会话。尝试使用空密码解锁不起作用,并且没有密码可以输入。
现在的简单解决方案是禁用会话锁定,但我希望计算机在超时后自动挂起。
为什么不输入密码就无法解锁?这是一个错误还是一个功能?它甚至是一种已知的行为吗?
Ubuntu 14.04。我不小心启动了一次 Thunderbird,我不使用它。
现在我无法从指示器消息菜单中删除 Thunderbird。
根据doc,我试图:
将文件复制/usr/share/indicators/messages/applications/thunderbird到~/.config/indicators/messages/applications-blacklist/
重命名/usr/share/indicators/messages/applications/thunderbird但不完全删除它
任何原因这不起作用?
安装后,然后删除一个包,该应用程序仍然存在:
$ sudo apt-get install dhcp3-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'isc-dhcp-server' instead of 'dhcp3-server'
The following packages were automatically installed and are no longer required:
libindicate-gtk3 libindicate5 python-gst0.10 python-indicate
python-twisted-words
Use 'apt-get autoremove' to remove them.
Suggested packages:
isc-dhcp-server-ldap
The following NEW packages will be installed:
isc-dhcp-server
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 762 kB of archives.
After this operation, 2,138 kB …Run Code Online (Sandbox Code Playgroud)