小编Sto*_*row的帖子

为什么“ps ax”找不到正在运行的没有“#!”的 bash 脚本?头?

当我运行这个脚本时,打算一直运行直到被杀死......

# foo.sh

while true; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)

...我无法找到它使用ps ax:

>./foo.sh

// In a separate shell:
>ps ax | grep foo.sh
21110 pts/3    S+     0:00 grep --color=auto foo.sh
Run Code Online (Sandbox Code Playgroud)

...但如果我只是将常见的“ #!”头添加到脚本中...

#! /usr/bin/bash
# foo.sh

while true; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)

...然后脚本可以通过相同的ps命令找到...

>./foo.sh

// In a separate shell:
>ps ax | grep foo.sh
21319 pts/43   S+     0:00 /usr/bin/bash ./foo.sh
21324 pts/3    S+     0:00 grep --color=auto foo.sh
Run Code Online (Sandbox Code Playgroud)

为什么会这样?
这可能是一个相关的问题:我认为“ #”只是一个评论前缀,如果是这样,“ #! /usr/bin/bash”本身只不过是一个评论。但是“ #!”是否具有比评论更重要的意义?

shell ps shell-script shebang

13
推荐指数
2
解决办法
3479
查看次数

除了 /etc/passwd 之外还有包含/定义我的 UID 的文件吗?

尝试了解 UID 和 GID。
各种在线阅读让我相信我的 UID 保存在 中/etc/passwd,但在我工作的服务器上似乎并非如此:

$ whoami
user1
$ cat /etc/passwd | grep user1
$
Run Code Online (Sandbox Code Playgroud)

除此之外是否还有(其他)文件/etc/passwd可以包含我的 UID?

(我假设 UID 与 GID 类似,因为某个地方有一个文件包含它。我在该文件中找到了我感兴趣的 GID /etc/group)

我知道我可以使用命令获取我的 UID id -u,但对于这个问题,我特别感兴趣的是了解是否有包含它的文件。

uid

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

使用来自 stdin 的文件列表调用 tar 的便携式方法

我想从目录的内容创建一个 .tgz。我还想./从 tar'ed 内容中去除领先的“ ”。
我这样做了如下:

cd /path/to/files/ && find . -type f | cut -c 3- | xargs czf /path/to/tgz/myTgz.tgz
Run Code Online (Sandbox Code Playgroud)

我最近了解到 usingxargs可能不是解决这个问题的最佳方法,因为如果 cmdline arg 列表太长,xargs可能会调用tar多次,我被建议利用tar's 从标准输入读取输入文件列表的能力。我最终找到了这篇关于如何做到这一点的文章。但是,我发现建议...

cd /path/to/files/ && find . -type f | cut -c 3- | tar czf foo.tgz -T -
Run Code Online (Sandbox Code Playgroud)

......似乎不便携。它在我的开发 PC 上运行良好,但在一个 busybox 目标上,运行相同的命令时出现以下错误:

tar: can't open '-': No such file or directory
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:是否有一种真正可移植/全局的方式来调用tar以.tgz …

tar io-redirection options busybox stdin

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

是什么让 bash 自动完成 tmux“子命令”?

我正在尝试从家里的工作电脑复制一些有用的功能。

在工作中,bash将有助于自动完成tmux“子命令”:例如,我输入“ tmux new-s<tab>”,bash 会自动完成“ tmux new-session”(我希望“子命令”是正确的术语)。我的家用电脑上不会出现这种情况 - 我该如何在我的家用电脑上进行设置?

我在网上浏览了一下,发现了一些对内tmux自动完成 的引用,例如自动完成命令,例如move-window-- 但这不是我要找的。我还发现了对名为“bash Complete”的功能的引用 - 但在我的工作电脑上,我在我的文件或目录中
找不到任何引用。tmux~/.bash_completion/etc/bash_completion.d/

有人可以解释我的工作电脑在哪里/如何设置其tmux“子命令”自动完成功能(以便我可以参考/从工作示例中学习),或者我可以/应该如何设置它?

有趣的旁注:我的工作电脑和家用电脑都会自动完成git“子命令”;例如,输入“ git clo<tab>”自动完成为“ git clone”。我没有做任何具体的设置 - 对于 和git,tmux我所做的设置分别是“ sudo apt install git”和“ sudo apt install tmux”。

bash tmux autocomplete

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

为什么编辑 core_pattern 受到限制?

这个问题与安装了 abrt-hook-cpp 的核心文件在哪里有关?.

当我试图为一个故意崩溃的程序生成一个核心文件时,起初核心文件的生成似乎受到 abrt-ccpp 的阻碍。所以我尝试/proc/sys/kernel/core_pattern用vim手动编辑:

> sudo vim /proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)

当我尝试保存文件时,vim 报了这个错误:

"/proc/sys/kernel/core_pattern" E667: Fsync failed
Run Code Online (Sandbox Code Playgroud)

我认为这是一个权限问题,所以我尝试更改权限:

> sudo chmod 666 /proc/sys/kernel/core_pattern
chmod: changing permissions of '/proc/sys/kernel/core_pattern\': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

最后,基于这篇文章,我尝试了这个:

>sudo bash -c 'echo /home/user/foo/core.%e.%p > /proc/sys/kernel/core_pattern'
Run Code Online (Sandbox Code Playgroud)

这奏效了。

基于工作解决方案,我也尝试了这些,但失败了:

> echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
>
> sudo echo "/home/user/foo/core.%e.%p" > /proc/sys/kernel/core_pattern
-bash: /proc/sys/kernel/core_pattern: Permission denied
Run Code Online (Sandbox Code Playgroud)

问题:

为什么编辑、编辑chmod和重定向echo输出到文件/proc/sys/kernel/core_pattern都失败了,只有注意到的调用sudo bash...才能覆盖/编辑文件? …

linux permissions sudo proc sysctl

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

dd 与 obs 和 seek 生成意外大小的文件

我正在dd通过实验性地使用它的参数来学习使用。我想创建一个 10 字节的文件。我认为以下方法可行:

dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
Run Code Online (Sandbox Code Playgroud)

...因为这些来自手册页的评论:

   obs=BYTES
          write BYTES bytes at a time (default: 512)
   seek=N skip N obs-sized blocks at start of output
Run Code Online (Sandbox Code Playgroud)

...但事实并非如此;它创建了一个 2 字节的文件:

>ls -l foo
-rw-rw-r-- 1 user user 2 Mar 28 16:05 foo
Run Code Online (Sandbox Code Playgroud)

我的解决方法是:

dd if=/dev/zero of=./foo count=1 bs=1 obs=1 seek=9
Run Code Online (Sandbox Code Playgroud)

但是为了我的学习,我想了解为什么第一个版本不起作用。谢谢你。

linux dd

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

安装了 abrt-hook-cpp 的核心文件在哪里?

不久前我将这个问题发布到 StackOverflow,但刚刚发现这个社区,并且觉得这至少是一个同样适合这个问题的网站:

我已经明白,如果 abrt-ccpp.service 安装在 Linux PC 上,它会取代/覆盖(我都读过,不确定哪个是真的)文件/proc/sys/kernel/core_pattern,否则指定位置和文件名模式核心文件。

问题:

当我执行时systemctl,为什么 abrt-ccpp.serviceexited在SUB列下报告?我不明白的组合active和exited:是服务“活着” /活动/运行或不?

> systemctl
UNIT                 LOAD   ACTIVE SUB
abrt-ccpp.service    loaded active exited ...
Run Code Online (Sandbox Code Playgroud)

问题:

核心文件在哪里生成?我编写了这个程序来生成一个SIGSEGV:

#include <iostream>

int main(int argc, char* argv[], char* envz[])
{
  int* pInt = NULL;
  std::cout << *pInt << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译执行如下:

> g++ main.cpp
> ./a.out
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

但是我找不到生成核心文件的位置。

我尝试过的:

  • 在与我的main.cpp. 核心文件不存在。 …

linux core-dump abrt

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

是否保证具有相同根的两个子目录位于同一个挂载的文件系统上?

一个cpp我正在使用的文件创建一个目录,即mkdir( path, ... ),在路径来自一个环境变量(例如getenv( "FOO" );)。

例如,上面创建的$FOOis/foo和path是 `/foo/newPath/'。

对于我的问题的情况下,有可能/foo/oldPath/存在,并且有内容(假设没有进一步的子目录),在这种情况下,我想从移动文件/foo/oldPath/到/foo/newPath。

我的问题是:因为/foo/newPath/是作为$FOO, 即的子目录创建的/foo/newPath/并且/foo/oldPath/具有相同的父目录,所以是否保证两个目录都在同一个“挂载的文件系统”上?我对 Linux 上的挂载点和文件系统的了解充其量是微不足道的。

这个问题背后的背景是:如果/foo/newPath/和/foo/oldPath/保证在同一个挂载的文件系统上,我可以使用rename()比其他替代方法更容易地执行文件移动。该函数的手册页说,如果oldPath和newPath不在同一个“挂载的文件系统”上,它将失败。

linux filesystems mount rename

6
推荐指数
2
解决办法
1033
查看次数

为什么流程不是预期流程组的一部分?

我正在学习 Linux 中进程、进程组(和会话)之间的关系。

我编译了以下程序...

#include <iostream>
#include <ctime>
#include <unistd.h>

int main( int argc, char* argv[] )
{
  char buf[128];
  time_t now;
  struct tm* tm_now;
  while ( true )
  {
    time( &now );
    tm_now = localtime( &now );
    strftime( buf, sizeof(buf), "%a, %d %b %Y %T %z", tm_now );
    std::cout << buf << std::endl;
    sleep(5);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

...a.out作为后台进程运行它,就像这样......

a.out &
Run Code Online (Sandbox Code Playgroud)

这个网站说以下...

每个进程都是唯一进程组的成员,由其进程组 ID 标识。(创建进程时,它成为其父进程组的成员。)按照惯例,进程组的进程组 ID 等于进程组的第一个成员的进程 ID,称为进程组组长。

根据我的阅读,第一句与括号内的内容冲突:进程是唯一进程组的成员,还是其父进程组的成员?

我试图调查 …

linux process process-groups

5
推荐指数
2
解决办法
1422
查看次数

文件只读的原因不明?

Linux 文件系统似乎有一层又一层的微妙之处,我逐案偶然发现:

我有兴趣编辑这个文件:

[user@box ~]$ ls -l /a/b/c/foo.bar
-rw-rwxr-x    1 user   user      144529 Jan 26  2018 /a/b/c/foo.bar
Run Code Online (Sandbox Code Playgroud)

看起来它应该可由用户写入user- 真的吗?但是当我尝试在 vim 中编辑文件时,我收到了一个“ W10: Warning: Changing a readonly file”警告。

我知道文件可写性依赖于其包含文件夹的权限。我认为包含文件夹需要具有执行权限 - 真的吗?我假设所需的目录权限也一直扩展到/- 真的吗?

在我看来,注释文件的包含文件夹树具有执行权限:

[user@box ~]$ ls -ld /a/b/c/                                                                                    
drwxrwxrwx    2 user   user       36864 Mar  5 17:50 /a/b/c/
[user@box ~]$ ls -ld /a/b/           
drwxrwxr-x    4 user   user        4096 Sep 22  2017 /a/b/
[user@box ~]$ ls -ld /a/                
drwxrwxr-x    9 user   user        4096 Sep 15  2017 /a/
[user@box …
Run Code Online (Sandbox Code Playgroud)

linux filesystems files

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