小编Bow*_*ark的帖子

从shell在后台打开带有程序的文件

从后台的 bash shell 启动程序的命令,比如 evince 是

evince &
Run Code Online (Sandbox Code Playgroud)

但是如果我想在后台打开一些带有 evince 的文件怎么办?也evince myfile.pdf &没有evince & myfile.pdf按预期工作:第一个输出类似于[2] 5356 但在下一行 shell 返回锁定;第二个打开了一个空洞的 evince。

那么,我可以使用什么语法?

bash files background-process

4
推荐指数
2
解决办法
4173
查看次数

查找 PCI 配置

本页中,图 6.1 显示了一个 PCI 配置示例,带有两条总线。

使用Linux(Ubuntu),是否可以获得实际主板的PCI配置?我的意思是:确定存在多少条 PCI 总线,找出是否存在 PCI-express 总线和桥接器,以便可以绘制类似于图 6.1 的图表。

lspci 给出了 PCI 设备的列表,但它似乎没有明确显示连接和总线结构。

ubuntu pci

4
推荐指数
1
解决办法
2168
查看次数

tcpdump 命令仅适用于本地 ip

我正在尝试使用 tcpdump 通过命令在我的个人局域网中捕获一些 IP 数据包

tcpdump -A -i eth0 'tcp and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and host 192.168.1.x'
Run Code Online (Sandbox Code Playgroud)

其中 192.168.1.x 是网络中的目标主机。但它只有在目标主机是我的 ip 时才有效,也就是运行 tcpdump 的机器的 IP。对于网络中的任何其他 IP,它不会记录任何内容。

我有一个非托管交换机。更简单的命令

tcpdump -A 'host 192.168.1.x'
Run Code Online (Sandbox Code Playgroud)

仅检测到一些定期从主机 192.168.1.x 发送到广播地址 224.0.0.251 的 igmp 数据包。

但是如何进行 IP 捕获呢?

还是很感谢你!

networking ip hosts tcpdump

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

Bash:在`ls -1`输出行上使用变量进行迭代

在像下面这样的简单循环中

for f in $(ls -1) ;
        do
        something
done
Run Code Online (Sandbox Code Playgroud)

我想将输出的每一存储ls -1在变量中f

有没有办法在没有设置的情况下做到这一点IFS=$'\n'

ls shell-script

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

共享目录的所有者

该目录/path/to/dir旨在供组中的任何成员使用examplegroup。该组的所有成员都应该能够不受限制地修改目录的内容(读/写文件、创建文件、运行可执行文件)。

很明显,目录的组所有者必须是examplegroup.

但是对于目录的用户所有者来说,什么是合适的选择呢?root,该的用户之一examplegroupnobody还是其他人?

permissions directory group files

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

Bash 误解了 sed 语句来重命名文件

我想重命名一系列以这种方式命名的文件

name (10).ext
name (11).ext
...
Run Code Online (Sandbox Code Playgroud)

name_10.ext
name_11.ext
...
Run Code Online (Sandbox Code Playgroud)

这个单行作品:

$ for i in name\ \(* ; do echo "$i" | sed -e 's! (\([0-9]\{2\}\))!_\1!' ; done
name_10.ext
name_11.ext
...
Run Code Online (Sandbox Code Playgroud)

但这个没有:

$ for i in name\ \(* ; do mv "$i" "$(echo "$i" | sed -e 's! (\([0-9]\{2\}\))!_\1!')" ; done
bash: !_\1!': event not found
Run Code Online (Sandbox Code Playgroud)

为什么?如何避免这种情况?


使用

$ bash --version
GNU bash, versione 4.3.48(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 18.04 上。


虽然在这个类似的问题中显示了一个简单的情况!,但这里!只考虑了!内部单引号,并将其与内部单引号、内部双引号进行比较。正如评论中所指出的,Bash 在这两种情况下的行为方式不同。这是关于 …

shell bash ubuntu sed files

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

tar 生成的输出文件

tar可用于将整个目录收集到一个文件中。我尝试使用sampledir仅包含一些文本文件的示例目录,没有子目录。原来目录占用52K

$ du -h sampledir/
52K sampledir/
Run Code Online (Sandbox Code Playgroud)

我跑了

$ tar -cf tararchive.tar sampledir/
Run Code Online (Sandbox Code Playgroud)

生成的文件是

$ du -h tararchive.tar 
40K tararchive.tar
Run Code Online (Sandbox Code Playgroud)

它小于sampledir: 但在命令中我没有要求任何压缩。我指的是 BSD 版本tar(也在 Ubuntu 中使用)。

那么,究竟是tar什么?它是否只是简单地收集目录及其所有文件,插入一些标题以标记它们的结束和开始?如果是这样,怎么可能tararchive.tar比原来的目录小,甚至不压缩?

tar directory disk-usage

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

查找所有具有组只写权限的文件

在以下示例目录中

$ ls -l
total 0
-rw-r--r--  1 user  testgroup  0 12 feb 12:00 file1
-rw-rw-r--  1 user  testgroup  0 12 feb 12:00 file2
-rw--w-r--  1 user  testgroup  0 12 feb 12:00 file3
-rw-r--r--  1 user  testgroup  0 12 feb 12:00 file4
-rw-rwxr--  1 user  testgroup  0 12 feb 12:00 file5
Run Code Online (Sandbox Code Playgroud)

我想要所有具有find权限的文件,即(仅写入权限)。-w-2

我在用

$ bash --version
GNU bash, versione 4.4.23(1)-release (amd64-portbld-freebsd12.0)
Run Code Online (Sandbox Code Playgroud)

在 FreeBSD 12 上。它不是 GNU find

我的尝试是

$ find . -perm -g+w
./file2 …
Run Code Online (Sandbox Code Playgroud)

freebsd permissions find files

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

ssh,散列的known_hosts:提取纯文本并使用通配符

ssh客户端中,文件.ssh/knwon_hosts可以使用纯文本(例如,在 FreeBSD 12.0 中会发生这种情况):

<ip_address> ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEIlD8R6Kxj9CdToar+3ay4B0yE65dP0EYoRJjEEgLjmvCTIv59DBp+0j2z0+NM0hxxJew79i1bYuN02lEvT2/E=
Run Code Online (Sandbox Code Playgroud)

或者它可能被散列(如在 Ubuntu 18.04 中):

|1|3Et6QShrP2OrD4tWdOGP3jy3YC4=|f2FrJ5tOjjmFSrGWyen1DokJyLc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIyZLGNvIADWL5SSkohBmDCVpLUzAHNejqQAXP3SSY300YIdNKCn3jqGmFAJiKB1CY0HnVirgFjdAKpyw3+6yzo=
Run Code Online (Sandbox Code Playgroud)

问题1

是否可以从散列中获取纯文本行known_hosts


Ubuntu sshd 手册页指出:

一行中只能出现一个散列主机名,并且不能应用上述任何否定或通配符运算符。

我不确定这是什么意思。

问题2

这是否意味着像这样的地址192.168.*.*永远不能以 的哈希形式被接受known_hosts,即使它们被创建为纯文本然后手动哈希?


正如在上一个问题中一样,我正在使用这些客户端:OpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017

ssh openssh

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

bash $PS1 变量中的参数

在可以包含在bash PS1变量中的各种参数之间,\w展开

当前工作目录,$HOME 缩写为波浪号(使用 PROMPT_DIRTRIM 变量的值)

Bash 手册中所述

My$HOME设置为/home/myuser/(在 中指定的相同值/etc/passwd),但是当我在目录中时,\win的扩展会PS1给出。因此,它不是“用波浪号缩写”。/home/myuser$HOME

我将 Ubuntu 16.04 与GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu).

怎么了?\w实际复制当前目录路径的来源是什么?

bash ubuntu environment-variables working-directory

0
推荐指数
1
解决办法
349
查看次数

Ubuntu 不会将 /home/testuser 翻译为 ~

在 Ubuntu 22.04.3 LTS 中,如果我使用 LDAP 用户的凭据登录testuser,在几个不同的程序中,目录的路径$HOME不会被替换~(相反,本地用户会发生这种情况)。

举几个例子:

  1. 在 中bash, 的值为PS1默认值:

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
    
    Run Code Online (Sandbox Code Playgroud)

但它显示为

testuser@myhost:/home/testuser$
Run Code Online (Sandbox Code Playgroud)

代替

testuser@myhost:~$
Run Code Online (Sandbox Code Playgroud)
  1. 在 中neomutt,在列出邮件目录的左栏中,显示其完整路径

    /home/testuser/Mail/mailbox1
    
    Run Code Online (Sandbox Code Playgroud)

代替

   ~/Mail/mailbox1
Run Code Online (Sandbox Code Playgroud)

然而,在bash,

$ echo $HOME
/home/testuser
Run Code Online (Sandbox Code Playgroud)

所以这个env变量HOME在某种程度上是被认可的。

这可能是什么问题?


更新

我用来sssd管理 LDAP 用户的身份验证:

$ grep passwd /etc/nsswitch.conf 
passwd:         files systemd sss
Run Code Online (Sandbox Code Playgroud)

LDAP 用户和本地用户的条目看起来非常相似:

$ getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash

$ getent passwd localuser
localuser:x:<uid>:<gid>:,,,:/home/localuser:/bin/bash
Run Code Online (Sandbox Code Playgroud)

$ echo $HOME
/home/testuser/
Run Code Online (Sandbox Code Playgroud)

与 …

bash ldap ubuntu home tilde

0
推荐指数
1
解决办法
65
查看次数