我正在开发一个简单的 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)
这似乎有效,返回ubuntu或centos(我没有尝试过其他人)作为发布名称。但是,我有一种感觉,必须有一种更简单、更可靠的方法来解决这个问题——这是真的吗?
它不适用于 RedHat。/etc/redhat-release 包含:Redhat Linux 企业版 5.5 …
这个答案根据 的值解释了当遇到 OOM 情况时内核采取的行动sysctl vm.overcommit_memory。
当overcommit_memory设置为0或1,overcommit启用,并计划允许分配更多的内存比实际可用。
现在当我们在这种情况下内存不足时会发生什么?OOM 杀手如何决定先杀死哪个进程?
最近,我偶然发现了一种我以前从未见过的多行注释类型——这是一个脚本示例:
echo a
#
: aaa
: ddd
#
echo b
Run Code Online (Sandbox Code Playgroud)
这似乎有效,甚至vim语法突出显示它。这种评论风格是什么,我如何找到有关它的更多信息?
我显然明白可以为内部字段分隔符变量添加值。例如:
$ 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?
我为转换项目做了一个网站抓取。我想对那里的文件类型进行一些统计——例如,400 个.html文件、100 个.gif等。有什么简单的方法可以做到这一点?它必须是递归的。
编辑:使用 maxschelpzig 发布的脚本,由于我抓取的网站架构,我遇到了一些问题。一些文件的名称*.php?blah=blah&foo=bar带有各种参数,因此它认为它们都是唯一的。所以解决方案需要考虑*.php*到所有的类型都是相同的,可以这么说。
我的 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?或者假设我有一个名为file:
$ cat file
Hello
Welcome to
Unix
Run Code Online (Sandbox Code Playgroud)
我想and Linux在文件最后一行的末尾添加。如果我这样做echo " and Linux" >> file将被添加到一个新行。但我想要最后一行Unix and Linux
所以,为了解决这个问题,我想删除文件末尾的换行符。因此,如何删除文件末尾的换行符以便向该行添加文本?
我正在尝试使用以下命令创建 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)
我没有看到此错误的任何描述,这是什么意思?
我是通过一个教程和锯同时使用的工作cat myfile.txt和cat < myfile.txt。这两个命令序列之间有区别吗?似乎都将文件的内容打印到 shell。
假设file2已经存在,命令
> file1 < file2 cat
Run Code Online (Sandbox Code Playgroud)
似乎是复制的内容file2来file1。
但我无法理解这种结构。
我了解“无”是针对file1(创建或删除其内容)。然后将 的内容file2定向到file1。
为什么是cat后file2?它如何知道cat file2操作数的顺序是否不正确?