我正在编写一个脚本,想在文件系统上创建一个临时文件,但它不在我的文件系统中,/tmp
而是在其他地方,而且可能不是文件也不是目录(例如,可能是命名管道或符号链接)。关键在于,我必须自己创建它。现在,我想为我的临时文件使用一个唯一的文件名,这样以后调用该实用程序以及任何其他正在运行的代码时,就不会尝试使用相同的名称。
如果我只是在中创建一个临时文件或目录/tmp
,我可以使用mktemp
。但是 - 当我只想生成名称时我该怎么做?
我正在编写一个脚本,想在文件系统上创建一个临时文件,但它不在我的文件系统中,/tmp
而是在其他地方,而且可能不是文件也不是目录(例如,可能是命名管道或符号链接)。关键在于,我必须自己创建它。现在,我想为我的临时文件使用一个唯一的文件名,这样以后调用该实用程序以及任何其他正在运行的代码时,就不会尝试使用相同的名称。
如果我只是在中创建一个临时文件或目录/tmp
,我可以使用mktemp
。但是 - 当我只想生成名称时我该怎么做?
在 SLES 15 SP1 系统上,我已向wheel
组添加了一个用户:
wheel:x:1003:joeuser
但是,当joeuser
他们以自己的身份登录,然后尝试su
(成为 root)时,系统会要求他们输入密码。为什么会发生这种情况?
这里是/etc/pam.d/su
:
#%PAM-1.0
auth sufficient pam_wheel.so trust
auth sufficient pam_rootok.so
auth include common-auth
account sufficient pam_rootok.so
account include common-account
password include common-password
session include common-session
session optional pam_xauth.so
Unix 惯例和 Linux 文件系统层次结构标准定义了多条路径,进程可以在这些路径下查找特定信息,或使用这些路径写入特定信息。当需要设置用户特定的环境时,作为非 root 用户,大多数这些位置要么无法访问,要么可以读取,但无法写入文件或创建新文件。因此,必须使用替代方案。
原则上,我们可以将用户的主目录视为另一个目录/
;然而,这不是常见的做法。
还有创建目录的习惯$HOME/.my_app
。大多数创建目录的应用程序都将其用于配置,但有些应用程序也将其用于其他类型的数据(Eclipse、Firefox、Thunderbird 就隐藏了大量数据)。但这意味着我们的.something
主目录中可能有几十个甚至几百个目录,这是相当不合适的。
最后,一些应用程序将内容写入$HOME/.local
和也已成为一种常见现象$HOME/.config
,这样不会“弄乱”主目录本身:$HOME/.config
可以看作是/etc
和$HOME.local
的等价物/usr
;因此,非常有用,但是 - 它不包括/var
及其子目录。
在用户的主目录下,我们或我们编写的程序应该将系统级程序存储在/var
或 子目录中的数据存储在 的哪里/var
?也就是说:“在系统正常运行期间,内容预计会不断变化,例如日志 [和] 假脱机... 文件”(引用 FHS),以及缓存、非静态数据库、锁定文件、运行文件和日志文件?
假设我在 Linux 机器上的 shell 会话中,并且我想获取如果我以图形方式登录并必须选择桌面环境/会话类型时将拥有的选项列表。我期望一个包含“kde”、“gnome”、“xfce4”、“cinnamon”等项目的列表。
笔记:
我正在编写一个包含某个 Linux 命令的脚本。现在,当我直接在命令行上使用该命令时,该命令具有一些自动完成行为。例如,如果我输入命令名称,然后输入空格,然后输入字符串并按 Tab 键 - 它会补全为路径上可执行文件的名称。然而,包装脚本似乎没有这种行为。如何让 bash 对我的包装器使用与原始命令相同的自动完成功能?
为了使事情更具体:命令是which
. 我正在编写一个调用它的包装器,如果它没有失败,则readlink -f
在which
. 我希望自动完成功能来查找路径上的可执行文件,就像which
.
该find
程序有一个-quit
命令行选项,它告诉它在找到匹配项并执行先前指定的命令(例如-print
)后立即退出。这非常有用,但是如果我find
在多个根目录中,并且想要每个根目录中的第一个匹配项怎么办?
有没有一种说法可以这样说:
find foo bar baz -print -continue-with-next-root
?一些 shell 代码是可以的,但我想避免find
对每个根文件夹单独调用。
pip install --system
在类似 Debian/基于 apt 的发行版上,我们使用 APT 包,而不是安装系统范围内的 Python 打包包。这里:
当 apt 没有对应的软件包时,在 Debian/Devuan 上安装 Python 软件包
正在讨论如何做到这一点。不幸的是,当我尝试使用gdown 包时,这失败了:
# mkdir /tmp/gdown
# cd /tmp/gdown
# py2dsp --build gdown
W: py2dsp cache:67: cannot load cache (_load_package_names:():{}): unpackb() got an
unexpected keyword argument 'encoding'
E: py2dsp py2dsp:172: 'build-system'
这是 py2dsp 的错误吗?我自己的系统有问题吗?
假设我想在 Debian/Devuan 系统上安装一个 Python 包系统。某些 PyPI 软件包具有可通过存储库的 apt 源获取的 DEB 软件包,软件包名称前缀为python3-
(或python-
,取决于 Debian 版本)。但是——并非所有人都这样做。现在,我总是可以推出自己的 DEB 包,但是 - 我如何知道我感兴趣的包是否是:
?是否有一个简单的映射规则,或者我可以在某个地方使用 PyPI 包名称进行查询并获取 apt 包名称?
我想pandasql
在 Devuan(或 Debian)系统上安装一些系统范围内的 Python 软件包。它在 Python 包索引中,但是 - 似乎没有它的 (dpkg) 包;让我们假设实际上不存在。
现在,如果我尝试这样做pip install pandasql
,我会收到一条消息,建议我使用虚拟环境:
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.11/README.venv for more information.
...但是虚拟环境不是我想要做的:我想在foo
系统范围内安装。我怎样才能做到这一点?
注意事项:
pandasql
?我已经购买并插入了 USB WiFi 适配器UGreen AC650。它应该支持Linux 5.x ...
好吧,lsusb 说:
Bus 001 Device 038: ID 0bda:c811 Realtek Semiconductor Corp. 802.11ac NIC
所以在某种程度上是认可的。但是,它没有显示为ip link show
.
我已经运行了wireless-info-script
,结果就在这里;但请注意,我的系统有另一个板载 wifi 适配器,工作正常(但未使用);和一个活动的以太网连接,所以不要将那些 ( eth0
, wlan0
) 误认为是丢失的 USB WiFi 适配器。
我的问题:我可以完全识别和配置 USB WiFi 适配器吗?如果是这样,怎么做?
我宁愿为此使用命令行。我会提到,多年来我已经习惯了“正常工作”的 wi-fi 网络,并且不再完全记得如何处理ip
,iwlist
和朋友。(我确实有肉桂网络管理器,但后来我计划在其他没有那个的机器上使用这个适配器。)
我还应该提到,这个 USB 加密狗似乎有一个指示灯 - 但它没有亮起。
的尾巴/var/log/messages
:
Mar 20 09:25:27 myhostname kernel: [292007.468991] usb 1-9: new high-speed USB device number 48 using xhci_hcd
Mar 20 09:25:27 myhostname kernel: [292007.617381] usb 1-9: New USB device found, idVendor=0bda, idProduct=c811, bcdDevice= 2.00
Mar 20 09:25:27 myhostname kernel: [292007.617387] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 20 09:25:27 myhostname kernel: [292007.617391] usb 1-9: Product: 802.11ac NIC
Mar 20 09:25:27 myhostname kernel: [292007.617394] usb 1-9: Manufacturer: Realtek
Mar 20 09:25:27 myhostname kernel: [292007.617396] usb 1-9: SerialNumber: 123456
Mar 20 09:25:27 myhostname mtp-probe: checking bus 1, device 48: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-9"
Mar 20 09:25:27 myhostname mtp-probe: bus: 1, device: 48 was not an MTP device
Mar 20 09:25:27 myhostname mtp-probe: checking bus 1, device 48: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-9"
Mar 20 09:25:27 myhostname mtp-probe: bus: 1, device: 48 was not an MTP device
的尾巴dmesg
:
Mar20 09:25] usb 1-9: new high-speed USB device number 48 using xhci_hcd
[ +0.148390] usb 1-9: New USB device found, idVendor=0bda, idProduct=c811, bcdDevice= 2.00
[ +0.000006] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ +0.000004] usb 1-9: Product: 802.11ac NIC
[ +0.000003] usb 1-9: Manufacturer: Realtek
[ +0.000002] usb 1-9: SerialNumber: 123456
我正在使用 CentOS 7.9 GNU/Linux 系统。我已经在 ; 下构建并安装了一个较新版本的 git(2.34.1 而不是 1.8.3.1 与发行版捆绑在一起)/opt/git/2.34.1
,并带有指向该目录的符号链接/opt/git/current
;并且我已将该符号链接目录添加到我的$PATH
变量(的开头)。
不幸的是,当我尝试使用 HTTPS URL 签出存储库时,我收到了一些错误
$ git clone https://github.com/eyalroz/cuda-api-wrappers.git
Cloning into 'cuda-api-wrappers'...
git: 'remote-https' is not a git command. See 'git --help'.
使用旧版本的 git克隆- 有效。
为什么会发生这种情况,我能做些什么来解决它?
我刚刚在一台机器上安装了 CentOS GNU/Linux(版本 8 build 1905);这不是我选择的发行版——我自己就是一个 Debian 人。
无论如何,当我 SSH 进入这台机器(作为非 root 用户)时,它告诉我:
使用以下命令激活 Web 控制台:systemctl enable --now cockpit.socket
这个网络控制台会有什么?它会在哪个端口上监听,为谁监听?非root用户可以在需要时简单地激活它吗?我对此感到有些困惑,因为我不习惯 CentOS。
我的系统日志充满了以下内容:
Oct 28 23:35:01 myhost CRON[17705]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 28 23:45:01 myhost CRON[18392]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
还有一些
Oct 28 23:59:01 myhost CRON[19251]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 60 2)
现在,显然,这些来自 cron 作业,在/etc/cron.d/sysstat
:
# Activity reports every 10 minutes everyday
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2
我需要如此频繁地运行吗?当我手动运行它时,它似乎没有多大作用。我可以/应该只关闭 cron 作业,还是卸载 sysstat?
当我启动系统时,我收到以下消息:
[Sat Oct 26 20:34:25 2019] Calgary: detecting Calgary via BIOS EBDA area
[Sat Oct 26 20:34:25 2019] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
我在 MSI Z170 PRO GAMING 主板上的 i5-7600K CPU 上运行 Devuan 3 (Beowulf)。
当我从命令行运行 X 应用程序(例如,leafpad;大多数应用程序)时,我在控制台上收到以下警告:
... dbind-WARNING **: ... Couldn't register with accessibility bus: Did
not receive a reply. Possible causes include: the remote application did
not send a reply, the message bus security policy blocked the reply, the
reply timeout expired, or the network connection was broken.
(换行以适应列宽。)
为什么我会收到此消息,我该怎么办?发布它的应用程序似乎运行良好。
这出现在 Ubuntu 18.04 和 Devuan 3.0 Beowulf (~= Debian Buster)