从后台的 bash shell 启动程序的命令,比如 evince 是
evince &
Run Code Online (Sandbox Code Playgroud)
但是如果我想在后台打开一些带有 evince 的文件怎么办?也evince myfile.pdf &没有evince & myfile.pdf按预期工作:第一个输出类似于[2] 5356
但在下一行 shell 返回锁定;第二个打开了一个空洞的 evince。
那么,我可以使用什么语法?
在本页中,图 6.1 显示了一个 PCI 配置示例,带有两条总线。
使用Linux(Ubuntu),是否可以获得实际主板的PCI配置?我的意思是:确定存在多少条 PCI 总线,找出是否存在 PCI-express 总线和桥接器,以便可以绘制类似于图 6.1 的图表。
lspci 给出了 PCI 设备的列表,但它似乎没有明确显示连接和总线结构。
我正在尝试使用 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 捕获呢?
还是很感谢你!
在像下面这样的简单循环中
for f in $(ls -1) ;
do
something
done
Run Code Online (Sandbox Code Playgroud)
我想将输出的每一行存储ls -1在变量中f。
有没有办法在没有设置的情况下做到这一点IFS=$'\n'?
该目录/path/to/dir旨在供组中的任何成员使用examplegroup。该组的所有成员都应该能够不受限制地修改目录的内容(读/写文件、创建文件、运行可执行文件)。
很明显,目录的组所有者必须是examplegroup.
但是对于目录的用户所有者来说,什么是合适的选择呢?root,该的用户之一examplegroup,nobody还是其他人?
我想重命名一系列以这种方式命名的文件
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 在这两种情况下的行为方式不同。这是关于 …
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比原来的目录小,甚至不压缩?
在以下示例目录中
$ 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) 在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 2018和OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017。
在可以包含在bash PS1变量中的各种参数之间,\w展开
当前工作目录,$HOME 缩写为波浪号(使用 PROMPT_DIRTRIM 变量的值)
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实际复制当前目录路径的来源是什么?
在 Ubuntu 22.04.3 LTS 中,如果我使用 LDAP 用户的凭据登录testuser,在几个不同的程序中,目录的路径$HOME不会被替换~(相反,本地用户会发生这种情况)。
举几个例子:
在 中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)
在 中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)
与 …