小编Mar*_*ter的帖子

无法将亮度应用于终端的背景颜色

我的终端模拟器中的颜色有问题。我LXTerminal用作我的终端模拟器和LXDE我的桌面环境。

以下命令应该在灰色背景上打印红色文本:

printf "\n\033[1;31;40m"hello"\033[00m\n\n"
Run Code Online (Sandbox Code Playgroud)

但这不起作用。缺少灰色背景(红色文本可以)。在我的旧机器 ( Gnome/Gnome Terminal) 上一切正常

我已经尝试安装其他几个终端模拟器,但问题仍然存在。我什至不确定这个问题是否与终端模拟器有关,还是其他什么。在控制台 (CTRL+ALT+F1) 中,背景灰色在任何一台机器上都不起作用)

此问题仅限于灰色背景。所有其他颜色都可以正常工作,例如以下在绿色背景上打印红色文本。

printf "\n\033[1;31;42m"hello"\033[00m\n\n"
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助。我什至不知道从哪里开始故障排除。

bash terminal-emulator terminal

8
推荐指数
2
解决办法
4318
查看次数

用 sed 模拟尾巴

我有一个只有有限数量的二进制文件 ( bash, cp, cat, sed, ...)的迷你系统。我没有tail命令,我想知道我是否可以模拟尾部功能sed

cat foo.txt | tail -n 10
Run Code Online (Sandbox Code Playgroud)

我知道我可以用 sed 打印第 1-10 行cat foo.txt | sed -n '1,10p',但是我将如何打印最后 10 行?

bash sed

8
推荐指数
1
解决办法
4811
查看次数

bash 完成对一位用户不起作用

在我的 Debian Wheezy 系统上,我有几个用户。对于一位用户,我们称他为 martin (UID 1000) bash 补全不起作用。它适用于所有其他用户,即使他们都使用相同的$HOME/.bashrc$HOME/.profile.

这是一个非常奇怪的问题,因为当我将 martin 的整个主目录复制到 testuser 时,bash 完成对 testuser 工作正常:

rm -rf /home/testuser
cp -a /home/martin /home/testuser
chown -R testuser:testuser /home/testuser
Run Code Online (Sandbox Code Playgroud)

这让我相信,无论导致此问题的原因是什么,都不是用户主页中的任何设置。

有人知道是什么导致了这个奇怪的问题吗?

更新: 当我登录虚拟终端(Gnome 终端)时,会遇到上述问题。但我刚刚发现,当从控制台 (ALT+F1) 登录时,bash 完成工作。此外,当在虚拟控制台中作为马丁(并且 bash 完成不起作用)时,当我这样做su - martin并登录时,突然 bash 完成工作。看起来从虚拟控制台和普通控制台(或su - martin)登录之间存在差异

bash debian

8
推荐指数
1
解决办法
3637
查看次数

文件中段落的倒序

我有一个包含段落文本的文件(文本行由一个或多个空行分隔)。我想颠倒段落的顺序(即最后一段将成为第一段,...),最好使用 sed。

我正在寻找一个 sed 命令,它可以对一个段落文件tac执行什么操作,对一个行文件执行什么操作。

sed text-processing

8
推荐指数
2
解决办法
1185
查看次数

更改“列表”和“档案”文件夹的位置

apt 使用两个位置来存储下载的包和其他文件:

/var/lib/apt/lists
/var/cache/apt/archives
Run Code Online (Sandbox Code Playgroud)

即使apt-get clean经常使用,这些文件夹也会变得非常大。

/var的在一个单独的分区上并且相对较小。是否可以配置 apt,以便将其文件存储在 ales 中(即在/home/apt/?

apt

8
推荐指数
2
解决办法
2604
查看次数

sshfs:将所有非 root 用户 chroot 到特定目录

在服务器上,我需要 root 不受限制的 ssh 访问,并限制所有其他用户。

我想限制所有非 root 用户:

  • 没有ssh登录
  • 只允许安装/mnt/data/使用sshfs

我看到sshd_config允许使用Match User,即:

Match User john
  ChrootDirectory /mnt/data/
  ForceCommand internal-sftp
  AllowTCPForwarding no
  X11Forwarding no
Run Code Online (Sandbox Code Playgroud)

但是如何匹配除 root 之外的所有用户?

ssh sftp sshfs

8
推荐指数
1
解决办法
840
查看次数

awk 中的数字解析

我有一个文本文件,第二列中有数字,数字有千位分隔符和十进制分隔符:

2014-01     2,277.40
2014-02     2,282.20
2014-03     3,047.90
2014-04     4,127.60
2014-05     5,117.60    
Run Code Online (Sandbox Code Playgroud)

我需要对数字求和,但以下awk语法不起作用:

awk '{X=X+$2} END {print X}' file
Run Code Online (Sandbox Code Playgroud)

它返回16,这显然是错误的。我怎么能告诉awk读取数字作为2277.40而不是2,277.40

awk

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

打印我连接到的 SSID 名称的命令

是否有一个简单的命令可以找出我连接到哪个 Wi-Fi AP

我在我的 中配置了多个网络/etc/wpa_supplicant.d/wpa_supplicant.conf,并分配了优先级,并根据我所在的位置连接到最佳可用 Wi-Fi/SSID。连接是自动发生的,所以我不知道我连接到哪个 SSID。

现在我需要检查(在脚本中)我是在家里还是在其他地方连接。

我知道我可以列出所有可用的 SSID

iwlist wlan0 scan
Run Code Online (Sandbox Code Playgroud)

但是我如何打印我目前连接的 SSID?

我正在使用Debian

wifi wpa-supplicant

7
推荐指数
1
解决办法
7816
查看次数

bdl_pos_adj:为 hda-intel 设置 IRQ 计时解决方法

我的日志中出现以下错误:

kernel: snd_hda_intel 0000:00:1b.0: IRQ timing workaround is 
        activated for card #0. Suggest a bigger bdl_pos_adj
Run Code Online (Sandbox Code Playgroud)

谷歌在这里这里找到了一些处理同样问题的旧帖子。提供的解决方案建议更改内核模块的值:

options snd-hda-intel enable_msi=1 bdl_pos_adj=1,48
Run Code Online (Sandbox Code Playgroud)

然而,没有任何地方可以解释这些数字的含义。此外,我现在拥有的当前(默认)值有多个数字:

# cat /sys/module/snd_hda_intel/parameters/bdl_pos_adj
-1,1,-1,-1,-1,-1,-1,-1
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下所有这些数字的含义,以及如何更改它们以消除错误吗?

logs kernel audio kernel-modules

7
推荐指数
1
解决办法
8372
查看次数

获取连接U盘的设备名称

我需要获取所有连接的 USB 磁盘的设备名称(即sdd)。

我插入了 3 个 USB 磁盘和 2 个 SATA 磁盘:

$ find /sys/devices/ -name block        
/sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block
Run Code Online (Sandbox Code Playgroud)

我想忽略SATA磁盘,但我需要列出所有USB磁盘。

在终端,我可以我们ls,它会给我sdd

$ ls /sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
sdd
Run Code Online (Sandbox Code Playgroud)

但我需要在脚本中使用它。我需要遍历所有的U盘,而且我事先不知道确切的路径,所以我必须使用通配符(*?):

for DISK in $(ls /sys/devices/pci0000:00/0000:00:14.0/usb?/*/*:1.0/host?/target?:0:0/?:0:0:0/block) ; do
echo /dev/$DISK
done
Run Code Online (Sandbox Code Playgroud)

以上仅在插入一个 USB 磁盘时才有效。如果插入两个或多个磁盘,我得到sdd/sys路径以及我不想要的路径,即:

/dev//sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block:
/dev/sdd
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block:
/dev/sde
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block:
/dev/sdc
Run Code Online (Sandbox Code Playgroud)

我怎么能只迭代sdd sde sdc

我正在寻找不使用udev基础设施的解决方案,即/dev/disk/by-path/

usb path shell-script

7
推荐指数
1
解决办法
2804
查看次数