小编Kus*_*nda的帖子

如何在简单的 shell 脚本中获取分发名称和版本号?

我正在开发一个简单的 bash 脚本,它应该能够在 Ubuntu 和 CentOS 发行版上运行(对 Debian 和 Fedora/RHEL 的支持将是一个加分项),我需要知道脚本正在运行的发行版的名称和版本(以触​​发特定操作,例如创建存储库)。到目前为止,我所得到的是:

OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')

if [ -z "$OS" ]; then
    OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi

if [ -z "$VERSION" ]; then
    VERSION=$(awk '{print $3}' /etc/*-release)
fi

echo $OS
echo $ARCH
echo $VERSION
Run Code Online (Sandbox Code Playgroud)

似乎有效,返回ubuntucentos(我没有尝试过其他人)作为发布名称。但是,我有一种感觉,必须有一种更简单、更可靠的方法来解决这个问题——这是真的吗?

它不适用于 RedHat。/etc/redhat-release 包含:Redhat Linux 企业版 5.5 …

linux shell-script distributions

231
推荐指数
8
解决办法
29万
查看次数

OOM 杀手如何决定先杀死哪个进程?

这个答案根据 的值解释了当遇到 OOM 情况时内核采取的行动sysctl vm.overcommit_memory

overcommit_memory设置为0或1,overcommit启用,并计划允许分配更多的内存比实际可用。

现在当我们在这种情况下内存不足时会发生什么?OOM 杀手如何决定先杀死哪个进程?

linux memory out-of-memory

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

多行 shell 脚本注释 - 这是如何工作的?

最近,我偶然发现了一种我以前从未见过的多行注释类型——这是一个脚本示例:

echo a
#
: aaa 
: ddd 
#
echo b
Run Code Online (Sandbox Code Playgroud)

这似乎有效,甚至vim语法突出显示它。这种评论风格是什么,我如何找到有关它的更多信息?

bash shell-script

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

理解“IFS= read -r line”

我显然明白可以为内部字段分隔符变量添加值。例如:

$ IFS=blah
$ echo "$IFS"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

我也明白这read -r line会将数据保存stdin到名为的变量line

$ read -r line <<< blah
$ echo "$line"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

但是,命令如何分配变量值?它是否首先存储来自stdinto 变量的数据line,然后赋予lineto 的值IFS

bash shell-script

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

目录中文件类型的递归统计?

我为转换项目做了一个网站抓取。我想对那里的文件类型进行一些统计——例如,400 个.html文件、100 个.gif等。有什么简单的方法可以做到这一点?它必须是递归的。

编辑:使用 maxschelpzig 发布的脚本,由于我抓取的网站架构,我遇到了一些问题。一些文件的名称*.php?blah=blah&foo=bar带有各种参数,因此它认为它们都是唯一的。所以解决方案需要考虑*.php*到所有的类型都是相同的,可以这么说。

shell filenames

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

如何隐藏 tmux 窗格?

我的 tmux 窗口中有 3 个窗格:

--------------------------
|             |      2   |
|             |          |
|        1    |----------|
|             |      3   |
|             |          |
--------------------------
Run Code Online (Sandbox Code Playgroud)

窗格 1 和 2 具有vim. 窗格 3 运行我正在开发的 cli。有时我想比较窗格 1 和 2,所以我想隐藏窗格 3:

--------------------------
|             |          |
|             |          |
|        1    |       2  |
|             |          |
|             |          |
--------------------------
Run Code Online (Sandbox Code Playgroud)

然后再次带回窗格 3。我不想杀死窗格 3,因为我已经在那里设置了一些东西并且不想再次设置它们。

  • 是否有类似的东西PREFIX + z可以缩放窗格 2 但不触摸窗格 1?或者
  • 有没有办法快速隐藏窗格 3 并在需要时将其恢复?

tmux

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

如何从文件的最后一行删除换行符以便向该行添加文本?

假设我有一个名为file

$ cat file
Hello
Welcome to
Unix
Run Code Online (Sandbox Code Playgroud)

我想and Linux在文件最后一行的末尾添加。如果我这样做echo " and Linux" >> file将被添加到一个新行。但我想要最后一行Unix and Linux

所以,为了解决这个问题,我想删除文件末尾的换行符。因此,如何删除文件末尾的换行符以便向该行添加文本?

shell-script text-processing newlines

77
推荐指数
4
解决办法
12万
查看次数

tar 退出“无法统计:没有这样的目录文件”,为什么?

我正在尝试使用以下命令创建 tar.gz 文件:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/
Run Code Online (Sandbox Code Playgroud)

然后它开始创建文件(文件夹中的许多文件),但随后出现以下错误:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)

我没有看到此错误的任何描述,这是什么意思?

tar

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

“猫”和“猫&lt;”的区别

我是通过一个教程和锯同时使用的工作cat myfile.txtcat < myfile.txt。这两个命令序列之间有区别吗?似乎都将文件的内容打印到 shell。

io-redirection cat

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

这个命令如何合法?"&gt; 文件 1 &lt; 文件 2 猫"

假设file2已经存在,命令

> file1 < file2 cat
Run Code Online (Sandbox Code Playgroud)

似乎是复制的内容file2file1

但我无法理解这种结构。

我了解“无”是针对file1(创建或删除其内容)。然后将 的内容file2定向到file1

为什么是catfile2?它如何知道cat file2操作数的顺序是否不正确?

shell io-redirection

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