小编Mar*_*ter的帖子

更改 devtmpfs /dev/ 的大小

我的新内核已CONFIG_DEVTMPFS启用,因此我的内核/dev已安装为devtmpfs. 我的旧内核没有使用CONFIG_DEVTMPFS,/dev 曾经以普通方式安装tmpfs

现在我注意到,它的大小/dev/大得离谱:8GB,这是我 RAM 的一半:

df | grep devtmpfs
devtmpfs         devtmpfs  7.8G     0  7.8G   0% /dev
Run Code Online (Sandbox Code Playgroud)

以前,当我/dev挂载为 时tmpfs,大小曾经是10MB

df | grep tmpfs
tmpfs                 tmpfs        10M     0   10M   0% /dev
Run Code Online (Sandbox Code Playgroud)

在我看来,10MB 对于/dev. 为什么/dev/默认分配 50% 的 RAM?我可以在哪里更改此设置?

kernel udev tmpfs

3
推荐指数
1
解决办法
3583
查看次数

无法在控制台中回滚 (tty1)

当我启动我的系统时,我可以在我的物理控制台上看到启动消息tty1。我的X服务器启动后,我可以切换回tty1CTRLALT+ F1,并且仍然在控制台上看到输出。没有 getty 运行,因为我在 中注释了以下行/etc/inittab

#1:2345:respawn:/sbin/getty 38400 tty1
Run Code Online (Sandbox Code Playgroud)

但是,我无法在控制台中向后滚动,没有任何效果,甚至输入也没有任何作用。我想回滚,以查看较早的启动消息(初始化脚本的输出,我在 中看不到dmesg

我使用 Debian 和 SysVinit 作为我的 init

init-script tty init console

3
推荐指数
1
解决办法
1572
查看次数

内核编译:生成modules.dep和map文件

我正在 Debian Stretch 上编译 linux 内核:

cd linux-4.9.59/
make menuconfig
make
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。

通常,我会发出make modules_install, 将模块复制到/lib/modules/.

但是这个内核是为另一台机器准备的,所以我不想在本地复制模块。此外,我不是以 root 身份编译的,所以/lib/modules/无论如何写入都行不通。

export INSTALL_MOD_PATH="../MY_NEW_KERNEL"
mkdir -vp "${INSTALL_MOD_PATH}

make modules_install
Run Code Online (Sandbox Code Playgroud)

以上将新编译的模块复制到目录../MY_NEW_KERNEL/lib/modules/. 但它不会生成 modules.dep 和 map 文件../MY_NEW_KERNEL/lib/modules/

通常,如果这是当前正在运行的内核,我可以运行depmod以在/lib/modules/. 但是我没有在当前机器上运行这个内核。

甚至当我将 bzImage 和模块复制到目标机器时,我也必须先重新启动到新内核,然后运行depmod.

但问题是,内核无法启动,因为它找不到模块,因为我没有运行depmod.

depmod当内核当前未运行时,如何运行内核模块?

debian kernel-modules linux-kernel

3
推荐指数
1
解决办法
2975
查看次数

ssh:在远程主机上执行命令而不是登录 shell

我正在remote-server从本地主机连接,我想在remote-server.

按预期工作:

ssh remote-server "hostname"
remote-server
Run Code Online (Sandbox Code Playgroud)

我很迷惑。为什么这会返回本地主机名,而不是远程服务器的主机名?

ssh remote-server "print $HOST"
localhost
Run Code Online (Sandbox Code Playgroud)

shell ssh

3
推荐指数
2
解决办法
4846
查看次数

使用“diff-highlight”进行差异

我已经将diff-highlight设置为 git 的分页器/荧光笔。

[pager]
    log = diff-highlight | less
    show = diff-highlight | less
    diff = diff-highlight | less
Run Code Online (Sandbox Code Playgroud)

效果很好。

但是如何将 diff-highlight 用于普通 diff 呢?

diff git

3
推荐指数
1
解决办法
2189
查看次数

自定义脚本的 zsh 补全:完成“case”语句中的选项

我有自定义脚本,需要:

  1. 短/长格式的可选参数
  2. 一个必需的命令行参数

短/长命令行选项例如:

-r, --readonly
-m, --mount
Run Code Online (Sandbox Code Playgroud)

对于一个必需的参数,这些参数实际上在脚本中指定为 case 语句,即foobar本例中:

case $1 in
  foo )
  :
  ;;

  bar )
  :
  ;;
Run Code Online (Sandbox Code Playgroud)

如何zsh completion为我的脚本创建,以便在参数以 开头时完成可选参数-,并从我的脚本 case 语句中获取所需参数?

更新:

这是我到目前为止所得到的,受到答案的启发@Marlon Richert

假设调用我的自定义脚本myscript.sh并且我创建的完成规则位于/usr/share/zsh/functions/Completion/Unix/_myscript.sh

#compdef myscript.sh

_myscript () {
  local -a args

  args+=(
    {-r,--readonly}'[description for "readonly"]' 
    {-m,--mount}'[description for "mount"]' 
  )

  _arguments $args && return
}

_myscript "$@"
Run Code Online (Sandbox Code Playgroud)

我的脚本myscript.sh本身位于/usr/local/bin/myscript.sh.

因此,现在当我有了可选参数-r-m得到处理时,我需要修改我的完成规则,以便对于我的脚本所需的命令行参数,来自 case 语句的项目作为 …

command-line zsh autocomplete

3
推荐指数
1
解决办法
3841
查看次数

当 rsyslog 尚未运行时,早期日志如何记录在 rsyslog 中?

rsyslog我在 Debian Buster 上使用。

我使用的是旧式sysvinit,而不是 systemd。rsyslog在 init 启动序列的后期启动,在大多数 init 脚本运行之后。

引导过程中的消息dmesg以及在 rsyslog 启动之前运行的其他启动脚本中的其他早期日志消息不会丢失。rsyslog将在启动时立即记录它们。

当 rsyslog 未运行时,这些消息存储在哪里?

我可以在启动 rsyslog 之前清除此“缓存”,以便不记录早期启动消息吗?

或者,更好的是,我可以将它们过滤掉,以便将它们记录到主系统日志文件中:

*.*    -/var/log/syslog
Run Code Online (Sandbox Code Playgroud)

但未登录另一个:

*.*    |/dev/xconsole
Run Code Online (Sandbox Code Playgroud)

更新和澄清

我意识到我想要解决的问题可能并不完全清楚。因此,这里对情况进行一些澄清:

除了标准syslog日志记录(即/var/log/syslog)之外,我还将相同的信息记录到/dev/xconsole,并且当我以用户身份登录桌面会话时,我在后台使用以下命令的终端:

cat /dev/xconsole
Run Code Online (Sandbox Code Playgroud)

这样,我可以立即看到新日志出现在我的背景中。此外,与常规文件不同的是,/dev/xconsole它在读取后会被清空。因此,当我注销并再次登录时,我看不到旧消息,而只看到新消息。

现在的问题是,启动后,内核缓冲区中有太多日志,rsyslog启动时,它会填满/dev/xconsole无用的调试早期启动信息的整个容量。

我最感兴趣的是后期启动消息,而这些消息丢失了。只有在我cat /dev/xconsole第一次之后,我才会释放空间,并且可以收到新消息。

我添加了这个丑陋的黑客/etc/rsyslog.conf

:msg, startswith, "\[    "              stop
*.*    |/dev/xconsole
Run Code Online (Sandbox Code Playgroud)

这基本上丢弃所有以个位数秒计数器开头的早期消息[ 0.000000],但接受所有后续消息,即 [ 14.348189]

这可行,但我认为这是肮脏的解决方法。

那么,我怎样才能摆脱我不感兴趣的早期启动消息,并记录有用的初始化启动脚本消息呢?

boot logs rsyslog dmesg

3
推荐指数
1
解决办法
1565
查看次数

按字将数据对齐到列中

如何将数据对齐到相对于给定单词的漂亮列中?

例如,我有route -n命令的输出:

default via 172.20.99.254 dev eth0 
87.33.17.71 dev tun0 scope link 
89.223.15.12 via 172.20.99.254 dev eth0 src 172.20.99.74 
172.20.9.0/24 dev eth0 proto kernel scope link src 172.20.99.74 
65.46.5.89 dev tun0 scope link 
192.168.11.0/24 dev tun0 scope link 
45.211.111.7 dev tun0 scope link 
Run Code Online (Sandbox Code Playgroud)

我想按单词对齐它dev,以便包含该单词的列dev对齐:

default via 172.20.99.254       dev eth0 
87.33.17.71                     dev tun0 scope link 
89.223.15.12 via 172.20.99.254  dev eth0 src 172.20.99.74 
172.20.9.0/24                   dev eth0 proto kernel scope link src 172.20.99.74 
65.46.5.89                      dev tun0 …
Run Code Online (Sandbox Code Playgroud)

command-line shell sed columns text-formatting

3
推荐指数
1
解决办法
265
查看次数

htop:显示除root以外的所有用户的进程

我知道-uhtop中的选项,在那里我只能显示给定用户的进程,例如:

htop -u root
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法显示除 root 之外的所有用户的进程。

htop

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

iSCSI 启动器的 iptables 规则

我需要iptables在我的客户端(iscsi-initiator)上进行配置。从tcpdump,我可以看到服务器(iscsi 目标)tcp从端口发送3260

所以我iptables在我的客户端上添加了以下规则(10.1.212.51iscsi 目标在哪里):

-A INPUT -i eth1  -s 10.1.212.51  -p  tcp  -m tcp  --dport 3260  -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

iscsi不适用于此规则。只有在我允许所有端口后,它才能工作:

-A INPUT -i eth1  -s 10.1.212.51  -p  tcp  -m tcp   -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

因此我的问题是,是否还iscsi需要其他端口?

iptables iscsi

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