我刚刚遇到一个错误,脚本中缺少一个函数。我已经trap提出了这些异常以提前停止脚本,但我注意到这并没有发生。进一步研究这一点,我发现作为逻辑表达式一部分发生的错误被认为是该表达式的一部分,而不是错误本身。
例如,请参阅此片段:
function _raise_error() {
>&2 echo "Error on line $1"
}
trap '_raise_error $LINENO' ERR
# STDERR: _missing_function: command not found
_missing_function && echo "This expression is never true"
echo "This is printed, because the missing function error is not trapped"
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来更具防御性地编写此代码,以使脚本在逻辑表达式中缺少函数时提前结束?我不确定如何捕捉这一点。在这种情况下使用set -e并没有什么区别,因为我已经捕获了错误并终止了脚本。
我最好的猜测是我需要将线路换行false。这不太理想,但我想不出更好的方法。
_missing_function && { echo "This expression is never true"; } || false
Run Code Online (Sandbox Code Playgroud) 因此,如果我输入如下命令,PID 4920子 shell 就会创建一个子进程 ( )。
linuxprobe@DESKTOP-TP0G72N:~$ (sleep 2;ps -f --forest;sleep 5)
UID PID PPID C STIME TTY TIME CMD
linuxpr+ 513 512 0 Feb17 pts/0 00:00:00 -bash
linuxpr+ 4920 513 0 01:35 pts/0 00:00:00 \_ -bash
linuxpr+ 4922 4920 0 01:35 pts/0 00:00:00 \_ ps -f --forest
Run Code Online (Sandbox Code Playgroud)
如果我输入如下命令,似乎没有创建子进程
linuxprobe@DESKTOP-TP0G72N:~$ (ps -f --forest)
UID PID PPID C STIME TTY TIME CMD
linuxpr+ 513 512 0 Feb17 pts/0 00:00:00 -bash
linuxpr+ 5511 513 0 01:45 pts/0 00:00:00 \_ ps …Run Code Online (Sandbox Code Playgroud) 对于 Linux(Ubuntu、Debian 等),不同的桌面环境消耗不同数量的资源(RAM)。Gnome 和 KDE 往往比 XFCE / LXDE / LXQT 等其他操作系统消耗更多 RAM:
https://unihost.com/help/how-to-choose-linux-desktop-environment-ram-usage/
我想知道如果我不通过桌面环境的 GUI 登录,而仅使用 ssh 与操作系统交互,这些桌面环境的 RAM 使用情况是否仍然会产生影响?
例如,我有一个 Debian Gnome 和一个 Debian XFCE。打开两台机器后,我只使用SSH与它们交互。在这种情况下,它们使用相同数量的 RAM 吗?
我在这个答案的最后看到了这样的说法:
PS:我不知道为什么 rfkill 在以非特权用户身份运行时起作用。在我的 Mint 上,它没有 setuid 或 setgid 位。
我很好奇,查看了我的 Arch 系统。这是我的系统上的内容sudo和rfkill外观。文件大小和日期已被省略。看起来没有 setuid 位rfkill(为了比较,有一个sudo)。
$ /usr/bin/env ls -lah $(which sudo) $(which rfkill)
-rwxr-xr-x 1 root root [OMITTED] /sbin/rfkill
-rwsr-xr-x 1 root root [OMITTED] /sbin/sudo
Run Code Online (Sandbox Code Playgroud)
有趣的是,运行rfkill以禁用和启用无线访问的工作方式如此处所述,即使我是rfkill从我的帐户运行(即,不是 asroot和 not withsudo或类似)。
如何不rfkillrequire ,因为通常启用/禁用硬件的命令需要以特权root运行?root
我只想解压在 2024-02-19 01:00:00 和 2024-02-19 02:00:00 之间从一个巨大的 tarball 创建的文件。
我不知道应该如何组合 tar 和 find 命令,因为我无法在 tar 中运行 find。
谢谢你的帮助,安德鲁
在 Linux 上,Firefox 正在侦听 UDP 端口,通常在端口 30000 或更高端口上。这是什么原因?为什么不只是 localhost,而是 0.0.0.0,即也暴露于网络的接口?
我习惯于less查看我的journalctl日志,因为它更方便。当您退出 less 后,它不会使控制台窗口中的日志变得混乱,并且您可以使用鼠标滚轮滚动。
journalctl --unit xyz | less +G
Run Code Online (Sandbox Code Playgroud)
但很烦人的是我无法刷新日志。有没有办法做到这一点less?使用Shift+F不起作用。
通常,块设备驱动程序会报告设备的正确大小,并且可以实际使用所有“可用”块。因此,文件系统事先知道它可以向此类设备写入多少内容。
但在某些特殊情况下,例如使用dm-thin或dm-vdo设备时,这种说法是错误的。如果这种块设备的ENOSPC底层存储(上层 FS 对此一无所知)已满,那么它们随时可能返回错误。
因此,我的问题是,在这种情况下会发生什么:EXT4 文件系统已挂载r/w,处于async模式(默认),并且正在执行大量写入。磁盘缓存(脏内存)也会参与其中,此时如果用户运行sync命令,就会有大量数据需要写入。
但突然间,该 EXT4 文件系统的底层块设备开始拒绝任何写入,因为“没有剩余空间”。文件系统的行为是什么?
它会打印错误并进入r/o中止所有写入并可能导致数据丢失的模式吗?如果没有,它是否会等待空间,定期重试写入并拒绝新写入?在这种情况下,如果其他进程尝试分配大量 RAM,巨大的磁盘缓存会发生什么情况?(在 Linux 上,脏内存被认为是可用的,不是吗?)。
考虑到最坏的情况,如果磁盘缓存在错误发生时占用了大部分 RAM ENOSPC(因为管理员设置得vm.dirty_ratio太高),内核会崩溃或锁定吗?或者它只会使所有想要分配内存的进程等待/挂起?最后,不同文件系统的行为是否有所不同?
提前致谢。
我有一个 55GB 大小的日志。
我试过:
cat logfile.log | tail
但这种方法需要花费很多时间。有没有办法更快地读取大文件或任何其他方法?
我有一个巨大的 csv 文件,其格式为
aaa1, "aaa2, aa214", aa21, "aa, a14", aa211, aa44, aaa445
data, data, data, data, data, data, data,
........................................
........................................
Run Code Online (Sandbox Code Playgroud)
我想提取标题包含特定字符串的列,比如说a2. 对于上面的示例,这包括列aaa2等等aa21。
我尝试过的 awk 命令是
awk --csv 'NR==1 {for (i=1; i<=NF; i++) if ($i ~ /a2/) print $i}' file.csv
Run Code Online (Sandbox Code Playgroud)
但这只返回匹配的标题,而不返回它们下面的列。请指出我正确的方向。我使用的是Linux系统。
linux ×4
bash ×2
awk ×1
block-device ×1
csv ×1
debian ×1
ext4 ×1
filesystems ×1
find ×1
firefox ×1
gnome ×1
journalctl ×1
less ×1
networking ×1
privileges ×1
ram ×1
rfkill ×1
root ×1
shell-script ×1
ssh ×1
subshell ×1
tar ×1