我已经切换到 zsh,它工作正常。一件奇怪的事情,当我尝试使用 * 通配符 scp 时,它不起作用,我不得不进入 bash。下面的第二个命令工作正常。
关于为什么会这样以及如何解决它的任何想法?
~/dmp ? 16:06:10
$ scp abc@123:/home/se/exports/201405091107/* .
zsh: no matches found: root@uf3:/home/se/exports/201405091107/*
~/dmp ? 16:06:53
$ bash
sean@seanlaptop:~/dmp$ scp abc@123:/home/se/exports/201405091107/* .
Run Code Online (Sandbox Code Playgroud) 我有一个 Docker 映像,当发生错误时它会生成类似日志的文件。我已使用绑定安装将其写入的目录安装到我的主机上。但是,创建的文件归root
. chown
尽管我的用户帐户具有 root 权限,但每次运行容器后chgrp
检查文件都非常繁琐。
有没有办法让容器将文件的所有者和组设置为运行容器的用户的所有者和组?
对于某些上下文,这是我创建的一个玩具示例:
Dockerfile
FROM debian
WORKDIR /root
VOLUME /root/output
COPY run.sh /root/
ENTRYPOINT ["./run.sh"]
Run Code Online (Sandbox Code Playgroud)
运行sh
#!/bin/bash
echo hello > output/dump
Run Code Online (Sandbox Code Playgroud)
我的执行命令是
docker run -v $PWD/output:/root/output test
Run Code Online (Sandbox Code Playgroud) 我不明白命名空间如何与/proc
. 我假设/proc
返回值基于查询它们的过程。
例如,让我们确定全局 PID 命名空间内当前进程的 PID:
$ bwrap --bind / / readlink /proc/self
6182
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义。然而,当我readlink
在它自己的 PID 命名空间中隔离时:
$ bwrap --bind / / --unshare-pid readlink /proc/self
6177
Run Code Online (Sandbox Code Playgroud)
我得到同样的结果!要获取命名空间内的 PID,我需要添加--proc /proc
:
$ bwrap --bind / / --unshare-pid --proc /proc readlink /proc/self
2
Run Code Online (Sandbox Code Playgroud)
但不应该/proc
总是考虑阅读过程的上下文吗?为什么procfs
需要额外的内容以及它与流程有何关系readlink
?
如果我不创建新的 PID 命名空间,则额外的内容procfs
没有任何区别:
$ bwrap --bind / / --proc /proc readlink /proc/self
6179
Run Code Online (Sandbox Code Playgroud) 我之前编写过一个脚本,用于在目录树中搜索 .h 和 .c 文件,然后对它们运行 clang-format :
find $directory -name '*.[hc]' -exec clang-format -i {} \;
Run Code Online (Sandbox Code Playgroud)
这正如预期的那样工作。现在我想将 .cpp 文件添加到搜索中。然而,两者都没有
-name '*.{[hc],cpp}'
Run Code Online (Sandbox Code Playgroud)
也不
-name '{*.[hc],*.cpp}'
Run Code Online (Sandbox Code Playgroud)
工作。也就是说,他们没有找到任何文件。
find
我知道如果我使用's选项,我可以让我的逻辑发挥作用-o
。然而,必须有一种方法可以用单个-name
指令来做到这一点。
我通过 SSH 连接到虚拟机并寻找/proc/<pid>/net/tcp
我的 zsh shell。我看到这条线
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
...
3: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 19127 1 0000000000000000 100 0 0 10 0
Run Code Online (Sandbox Code Playgroud)
除非我误解了这句话的意思,否则 zsh 正在侦听端口 22。我知道 zsh 进程是运行 sshd 的进程的后代,但 sshd 在分叉后不会关闭侦听套接字吗?
在一个终端中,我跑了
$ nc -l -6 ::1 5000
Run Code Online (Sandbox Code Playgroud)
在另一个终端,我跑了
$ cat /proc/net/tcp6
Run Code Online (Sandbox Code Playgroud)
并看到这一行:
0: 00000000000000000000000001000000:1388 00000000000000000000000000000000:0000 ...
Run Code Online (Sandbox Code Playgroud)
为什么说我在听::1:0:0:0
而不是在听::1
?
我正在尝试使用全局模式进行匹配。然而,这场比赛失败了:
dgt='^+([0123456789])$'
[[ "$1" == $dgt ]] && echo "SUCCESS" || echo "FAILURE"
Run Code Online (Sandbox Code Playgroud) 这:
echo 'some text' > file.txt
cat file.txt > file.txt
Run Code Online (Sandbox Code Playgroud)
显然给了我一个空文件。
但也令我惊讶的是:
cat2 () {
cat "$@" > tmp.txt
cat tmp.txt
return $?
}
echo 'some text' > file.txt
cat2 file.txt > file.txt
Run Code Online (Sandbox Code Playgroud)
它给了我一个空文件,即使该文件tmp.txt
已被删除,与file.txt
.
这个方法也行不通!:
echo 'some text' > file.txt
cat file.txt | cat2 > file.txt
Run Code Online (Sandbox Code Playgroud)
为什么文件还是被清空了?
我想创建一个看起来像/dir1/dir2/dir3/dir4
但我不能的新目录。
如果我从父目录和新父目录一一创建目录,一切正常:
\nlm@debian:~$ sudo mkdir -v ./Pictures/Photos1/onbike2023/\nmkdir: cannot create directory \xe2\x80\x98./Pictures/Photos1/onbike2023/\xe2\x80\x99: No such file or directory\nlm@debian:~$ sudo mkdir -v ./Pictures/Photos1/\nmkdir: created directory \'./Pictures/Photos1/\'\nlm@debian:~$ sudo mkdir -v ./Pictures/Photos1/onbike2023/\nmkdir: created directory \'./Pictures/Photos1/onbike2023/\'\nlm@debian:~$ \n
Run Code Online (Sandbox Code Playgroud)\n我究竟做错了什么?
\ntime
在 shell 命令上运行是否会显着增加命令本身的运行时间?毕竟,既然它区分了在用户空间花费的时间和等待系统调用所花费的时间,那么监控这些单独的事件就不需要很多开销吗?