Linux 命令

条件测试

1. 文件测试:

* -e file:检查文件是否存在。
* -f file:检查文件是否为常规文件。
* -d file:检查文件是否为目录。
* -r file:检查文件是否可读。
* -w file:检查文件是否可写。
* -x file:检查文件是否可执行。

2. 字符串测试:

* -z string:检查字符串是否为空。
* -n string:检查字符串是否非空。

3. 比较数字:

* -eq:等于。
* -ne:不等于。
* -lt:小于。
* -le:小于等于。
* -gt:大于。
* -ge:大于等于。

4. 逻辑操作:

* !:逻辑非。
* -a:逻辑与。
* -o:逻辑或

5. 文件比较:

* file1 -nt file2:检查文件1是否比文件2新。
* file1 -ot file2:检查文件1是否比文件2旧。

6. 变量比较:

* $var1 == $var2:检查两个变量是否相等。
* $var1 != $var2:检查两个变量是否不相等。

7. 正则表达式匹配:

* string =~ regex:检查字符串是否匹配正则表达式。

awk

1. 简介

awk是一种文本处理工具,用于对结构化文本数据进行扫描和处理。它通过定义模式和相应的动作来执行文本处理操作。awk通常用于从文件或管道中提取、转换和格式化数据。

2. 基本语法

awk的基本语法结构如下:

awk 'pattern { action }' file

3. 常见用法

3.1 打印整行

awk '{ print }' file

上述命令将打印文件中的每一行。

3.2 按字段打印

awk '{ print $1, $2 }' file

上述命令将打印每一行的第一个和第二个字段。

3.3 匹配模式

awk '/pattern/ { print }' file

上述命令将打印包含指定模式的行。

3.4 数学运算

awk '{ total += $1 } END { print total }' file

上述命令将对文件中的第一个字段进行求和,并在文件末尾打印总和。

3.5 自定义分隔符

awk -F ',' '{ print $1 }' file.csv

上述命令将使用逗号作为字段分隔符,打印文件中的第一个字段。

4. 变量和内置函数

awk支持多种内置变量和函数,如NRNFlength()等。以下是一些常用的内置变量和函数:

5. 示例

5.1 查找包含关键字的行

awk '/keyword/ { print }' file

5.2 计算文件总行数

awk 'END { print NR }' file

5.3 按字段求和

awk '{ total += $2 } END { print total }' file

6. 注意事项

cut

1. 简介

cut是一个用于剪切文件中的字段(列)的命令行工具。它通常用于对文本文件进行轻量级的字段提取操作,是Unix和类Unix操作系统中的常见工具。

2. 基本语法

cut的基本语法结构如下:

cut OPTION... [FILE]...

3. 常用选项

3.1 -f, --fields=LIST

指定要剪切的字段(列)列表,字段之间用逗号分隔。例如:

cut -f 1,3 file.txt

上述命令将提取文件 file.txt 中的第1列和第3列。

3.2 -d, --delimiter=DELIM

指定字段分隔符,用于标识字段的边界。默认情况下,cut 使用制表符作为分隔符。

cut -d':' -f 1 /etc/passwd

上述命令将使用冒号作为字段分隔符,提取 /etc/passwd 文件的第1列。

3.3 -c, --characters=LIST

按字符位置切割。指定字符列表,用逗号分隔。

cut -c 1-5 file.txt

上述命令将提取文件 file.txt 中每一行的第1到第5个字符。

3.4 --complement

补充选择。将选择的字段反转,即选择未包含在列表中的字段。

cut -f 2 --complement file.txt

上述命令将选择除了第2列以外的所有列。

4. 示例

4.1 提取文件的指定列

cut -f 2,4 data.txt

上述命令将提取 data.txt 文件的第2列和第4列。

4.2 按字符位置提取内容

cut -c 1-10 file.txt

上述命令将提取 file.txt 文件每一行的第1到第10个字符。

4.3 使用不同的字段分隔符

cut -d ',' -f 3,5 data.csv

上述命令将使用逗号作为字段分隔符,提取 data.csv 文件的第3列和第5列。

5. 注意事项

ln

1. 简介

ln 是一个用于创建链接(链接文件或目录)的命令行工具。在Unix和类Unix系统中,链接允许多个文件名引用相同的文件或目录,为文件系统提供了一种有效的方式来共享和重用数据。

2. 基本语法

ln 的基本语法结构如下:

ln [OPTION]... [-T] TARGET LINK_NAME
ln [OPTION]... TARGET
ln [OPTION]... TARGET... DIRECTORY

3. 常用选项

3.1 -s, --symbolic

创建符号链接(软链接)。符号链接是指向目标文件或目录的引用,类似于Windows中的快捷方式。

ln -s target_file link_name

上述命令将创建一个指向 target_file 的符号链接,命名为 link_name

3.2 -b, --backup

在创建链接之前,将目标文件备份。备份文件的后缀是 ~

ln -b target_file link_name

上述命令将创建一个指向 target_file 的链接,并在创建之前备份 target_file

3.3 -i, --interactive

在创建链接之前,交互式地提示用户确认是否覆盖现有文件。

ln -i target_file link_name

上述命令将创建一个指向 target_file 的链接,并在创建之前要求用户确认。

4. 示例

4.1 创建硬链接

ln file.txt hard_link.txt

上述命令将创建一个名为 hard_link.txt 的硬链接,该链接与 file.txt 引用相同的数据块。

4.2 创建符号链接

ln -s /path/to/target_file symbolic_link

上述命令将创建一个名为 symbolic_link 的符号链接,指向 /path/to/target_file

4.3 创建备份并创建链接

ln -b source.txt backup/source.txt

上述命令将备份 source.txt 并在 backup/ 目录中创建一个硬链接。

5. 注意事项

for

1. 简介

for 是一种循环结构,用于在Shell脚本和许多编程语言中重复执行一组语句,通常用于遍历一系列元素(如数组、文件列表等)。

2. 基本语法

for 循环的基本语法结构如下:

for variable in list
do
    # 循环体
    # 可以包含多条语句
done

3. 示例

3.1 遍历字符串中的字符

#!/bin/bash

string="hello"

for char in $(echo $string | sed -e 's/\(.\)/\1 /g'); do
    echo "Character: $char"
done

上述脚本将输出:

Character: h
Character: e
Character: l
Character: l
Character: o

在这个例子中,使用 sed 命令将字符串拆分为单个字符,并通过 for 循环遍历每个字符。

3.2 遍历字符串中的单词

#!/bin/bash

sentence="Bash is a powerful scripting language"

for word in $sentence; do
    echo "Word: $word"
done

输出:

Word: Bash
Word: is
Word: a
Word: powerful
Word: scripting
Word: language

在这个例子中,for 循环按空格拆分字符串,将每个单词作为一个元素进行遍历。

3.3 遍历数字范围

#!/bin/bash

for number in {1..5}
do
    echo "Number: $number"
done

上述脚本将输出数字1到5,演示了一个简单的数字范围遍历。

3.4 遍历数组

#!/bin/bash

fruits=("apple" "banana" "orange")

for fruit in "${fruits[@]}"
do
    echo "Fruit: $fruit"
done

上述脚本将遍历数组 fruits 中的元素,并输出每个水果的名称。

3.5 遍历文件列表

#!/bin/bash

for file in $(ls *.txt)
do
    echo "Processing file: $file"
    # 在这里可以添加处理文件的语句
done

上述脚本将遍历当前目录中所有以 .txt 结尾的文件,并输出文件名。

4. 注意事项

while

1. 简介

while 是一种控制流结构,用于在指定条件为真(true)时重复执行一组语句块。在Shell脚本和许多编程语言中,while 循环是一种常见的迭代结构,用于处理需要多次执行的任务。

2. 基本语法

while 循环的基本语法结构如下:

while [ condition ]
do
    # 循环体
    # 可以包含多条语句
done

3. 示例

3.1 数字递增循环

#!/bin/bash

counter=1
while [ $counter -le 5 ]
do
    echo "Iteration: $counter"
    ((counter++))
done

上述脚本将输出数字 1 到 5,演示了一个简单的数字递增循环。

3.2 读取文件内容

#!/bin/bash

file="example.txt"
while IFS= read -r line
do
    echo "Line: $line"
done < "$file"

上述脚本将逐行读取文件 example.txt 的内容,并输出每一行。

3.3 使用条件判断

#!/bin/bash

while true
do
    read -p "Enter a number (0 to exit): " number
    if [ $number -eq 0 ]
    then
        echo "Exiting the loop."
        break
    else
        echo "You entered: $number"
    fi
done

上述脚本创建一个循环,用户输入数字,当输入0时退出循环。

4. 注意事项

cat

1. 简介

cat 是一个用于连接、显示文件内容或将文件合并的命令行工具。cat 的名称来源于concatenate(连接)的缩写,尽管它的主要用途不仅仅是连接文件。

2. 基本语法

cat 的基本语法结构如下:

cat [OPTION]... [FILE]...

3. 常用选项

3.1 -n, --number

显示每一行的行号。

cat -n file.txt

上述命令将显示 file.txt 文件的内容,并在每一行前显示行号。

3.2 -b, --number-nonblank

类似于 -n,但只对非空行显示行号。

cat -b file.txt

上述命令将在 file.txt 文件的非空行前显示行号。

3.3 -A, --show-all

显示非打印字符(控制字符)和行尾结束符。

cat -A file.txt

上述命令将显示 file.txt 文件的内容,包括控制字符和行尾结束符。

4. 示例

4.1 显示文件内容

cat file.txt

上述命令将在终端显示 file.txt 文件的内容。

4.2 合并多个文件

cat file1.txt file2.txt > merged_file.txt

上述命令将 file1.txtfile2.txt 的内容合并到新文件 merged_file.txt 中。

4.3 显示带有行号的文件内容

cat -n myfile.txt

上述命令将显示 myfile.txt 文件的内容,并在每一行前显示行号。

5. 注意事项

IFS

1. 简介

IFS 是Shell脚本中的一个环境变量,用于定义字段分隔符,即用于分割文本数据中字段的特殊字符或字符串。IFS 在解析字符串时告诉Shell如何切分输入。

2. 基本语法

在Shell脚本中,可以使用 IFS 来设置字段分隔符。基本语法如下:

IFS="delimiter"

其中,delimiter 是用于分隔字段的字符或字符串。

3. 示例

3.1 使用空格作为字段分隔符

#!/bin/bash

# 设置IFS为一个空格
IFS=" "

# 按空格分割字符串
string="word1 word2 word3"
read -ra words <<< "$string"

# 打印分割后的单词
for word in "${words[@]}"; do
    echo "$word"
done

上述脚本将按照空格分割字符串,并逐个打印单词。

3.2 使用逗号作为字段分隔符

#!/bin/bash

# 设置IFS为逗号
IFS=","

# 按逗号分割字符串
string="item1,item2,item3"
read -ra items <<< "$string"

# 打印分割后的项
for item in "${items[@]}"; do
    echo "$item"
done

上述脚本将按照逗号分割字符串,并逐个打印项。

4. 注意事项

find

1. 简介

find 是一个用于在文件系统中查找文件和目录的命令行工具。find 命令提供了灵活的选项,可以根据各种条件搜索文件,并执行相应的操作。

2. 基本语法

find 的基本语法结构如下:

find [PATH] [OPTIONS] [EXPRESSION]

3. 常用选项

3.1 -name

按照文件名进行匹配。

find /path/to/search -name "*.txt"

上述命令将在 /path/to/search 中查找所有以 .txt 结尾的文件。

3.2 -type

按照文件类型进行匹配,如文件、目录等。

find /path/to/search -type f

上述命令将在 /path/to/search 中查找所有文件。

3.3 -exec

对搜索结果执行指定的命令。

find /path/to/search -name "*.txt" -exec cat {} \;

上述命令将查找所有以 .txt 结尾的文件,并使用 cat 命令输出它们的内容。

4. 示例

4.1 查找所有的文件

find /path/to/search -type f

上述命令将在 /path/to/search 中查找并列出所有的文件。

文件测试运算符

4.2 查找大于1GB的文件

find /path/to/search -type f -size +1G

上述命令将在 /path/to/search 中查找并列出所有大小大于1GB的文件。

4.3 查找并删除所有空目录

find /path/to/search -type d -empty -delete

上述命令将在 /path/to/search 中查找并删除所有空目录。

5. 注意事项

case

1. 简介

case 是一种在Shell脚本中用于多分支条件判断的结构。它允许根据变量的值或模式匹配来执行不同的代码块。

2. 基本语法

case 的基本语法结构如下:

case expression in
    pattern1)
        # 代码块1
        ;;
    pattern2)
        # 代码块2
        ;;
    pattern3|pattern4)
        # 代码块3
        ;;
    *)
        # 默认代码块
        ;;
esac

3. 示例

3.1 基本用法

#!/bin/bash

fruit="apple"

case $fruit in
    "apple")
        echo "It's an apple."
        ;;
    "banana")
        echo "It's a banana."
        ;;
    "orange" | "grape")
        echo "It's an orange or grape."
        ;;
    *)
        echo "Unknown fruit."
        ;;
esac

上述脚本将根据变量 fruit 的值执行不同的代码块。

3.2 数字范围匹配

#!/bin/bash

score=85

case $score in
    90|91|92|93|94|95|96|97|98|99|100)
        echo "Excellent!"
        ;;
    80[0-9])
        echo "Good."
        ;;
    7[0-9])
        echo "Pass."
        ;;
    *)
        echo "Fail."
        ;;
esac

上述脚本将根据分数的范围执行不同的代码块。

4. 注意事项

sed

1. 简介

sed(流编辑器)是一种用于在文本流中进行流式文本编辑的命令行工具。它常用于对文本进行搜索、替换、删除、插入等操作。sed 在处理大量文本数据时非常强大,并且可以通过简单的脚本实现复杂的文本编辑任务。

2. 基本语法

sed 的基本语法结构如下:

sed OPTIONS 'command' file

3. 常见命令

3.1 替换文本

sed 's/old/new/g' file.txt

上述命令将在 file.txt 文件中将所有匹配到的 old 替换为 new

3.2 删除行

sed '/pattern/d' file.txt

上述命令将删除包含指定模式的行。

3.3 插入文本

sed '2i\
New line of text' file.txt

上述命令将在 file.txt 文件的第二行之前插入新文本。

3.4 显示特定行

sed -n '5p' file.txt

上述命令将仅显示 file.txt 文件的第五行。

4. 示例

4.1 批量替换文件中的字符串

sed -i 's/old/new/g' *.txt

上述命令将批量替换所有以 .txt 结尾的文件中的 oldnew

4.2 删除包含特定关键字的行

sed -i '/pattern/d' file.txt

上述命令将删除 file.txt 文件中包含指定模式的所有行。

5. 注意事项

tree

1. 简介

tree 是一个用于以树状结构显示目录和文件的命令行工具。它以递归方式列出指定目录的内容,并以树形图形式显示子目录和文件。

2. 基本语法

tree 的基本语法结构如下:

tree [OPTIONS] [DIRECTORY]

3. 常见选项

3.1 -a, --all

显示所有文件和目录,包括以点号开头的隐藏文件。

tree -a /path/to/directory

上述命令将显示 /path/to/directory 及其所有子目录和文件,包括隐藏文件。

3.2 -d, --dirs-only

仅显示目录,不显示文件。

tree -d /path/to/directory

上述命令将仅显示 /path/to/directory 及其所有子目录,而不包括文件。

3.3 -L, --max-depth

限制显示的深度,指定目录的最大层级。

tree -L 2 /path/to/directory

上述命令将显示 /path/to/directory 及其直接子目录和文件,而不会深入到第三层。

4. 示例

4.1 显示当前目录的目录结构

tree

上述命令将以树形图形式显示当前工作目录的目录结构。

4.2 显示指定目录及其所有子目录和文件

tree /path/to/directory

上述命令将以树形图形式显示 /path/to/directory 及其所有子目录和文件。

4.3 显示指定深度的目录结构

tree -L 2 /path/to/directory

上述命令将以树形图形式显示 /path/to/directory 及其直接子目录和文件,不会深入到第三层。

5. 注意事项

pgrep

简介

pgrep 是一个用于查找进程 ID(PID)的强大命令,可通过匹配进程的属性,如名称、用户、命令行参数等,定位符合条件的进程。通常与 kill 命令一起使用,用于终止或信号通知进程。本文将详细介绍 pgrep 命令的基本用法、选项和一些示例,同时加入进程状态的判断。

基本语法

pgrep [options] pattern

示例

1. 根据进程名称查找进程 ID

pgrep nginx

上述命令将查找所有名称为 "nginx" 的进程,并输出相应的进程 ID。

2. 显示完整的命令行

pgrep -a apache2

使用 -a 选项,可以显示与进程关联的完整命令行。

3. 根据正则表达式匹配进程

pgrep -f "pattern.*"

使用 -f 选项,可以根据正则表达式匹配整个进程的命令行。

4. 显示进程 ID 和名称

pgrep -l sshd

使用 -l 选项,可以显示进程 ID 和进程名称。

5. 根据用户名过滤进程

pgrep -u username

使用 -u 选项,可以根据用户名过滤进程。

6. 显示最老的进程

pgrep -o bash

使用 -o 选项,可以显示最老的匹配进程。

7. 精确匹配进程名称

pgrep -x process_name

使用 -x 选项,精确匹配进程名称。

进程状态判断

为了进一步确认进程的运行状态,可以结合 ps 命令来判断进程是否存在。

if pgrep nginx > /dev/null; then
    echo "Nginx is running."
else
    echo "Nginx is not running."
fi

上述脚本通过 pgrep nginx 检查 Nginx 进程是否存在。如果存在,输出 "Nginx is running.";否则输出 "Nginx is not running."。

选项

结论

pgrep 命令是一个强大的工具,用于查找符合条件的进程,并提供了多种选项以满足不同的使用需求。结合 ps 命令,可以更全面地判断进程的存在与状态。希望本文提供的示例和解释对你理解和使用 pgrep 命令以及进程状态判断有所帮助。

${}

1. 简介

${} 是一种用于在Shell脚本中引用变量值的语法。它通常用于替换变量或执行变量相关的操作。

2. 基本语法

${variable} 的基本语法结构如下:

variable_name="value"
echo "${variable_name}"

在上述例子中,${variable_name} 将被替换为变量 variable_name 的实际值,即 "value"。

3. 变量引用

${} 用于引用变量,以获取变量的值。它可以用在字符串中、命令中等多种情境。

3.1 在字符串中引用变量

name="John"
echo "Hello, ${name}!"

上述脚本将输出 "Hello, John!",其中 ${name} 被替换为变量 name 的值。

3.2 在命令中引用变量

directory="/path/to/directory"
ls -l "${directory}"

上述脚本将列出指定目录的详细信息,其中 "${directory}" 用于引用变量 directory

4. 变量操作

${} 还可以用于进行一些简单的变量操作,例如截取字符串、连接字符串等。

4.1 截取字符串

string="Hello, World!"
echo "${string:0:5}"

上述脚本将输出 "Hello",其中 ${string:0:5} 表示从字符串 string 中截取索引 0 到 4 的子字符串。

4.2 连接字符串

first_name="John"
last_name="Doe"
full_name="${first_name} ${last_name}"
echo "${full_name}"

上述脚本将输出 "John Doe",其中 ${first_name} ${last_name} 用于连接两个字符串。

4.3 字符串长度

${#var} 用于获取变量值的长度。

word="Hello"
length=${#word}
echo "Length of the word: ${length}"

这将输出 "Length of the word: 5"。

4.4 查找子字符串位置

${var#substring} 用于从字符串的开头删除最短匹配的子字符串。

string="Hello, World!"
result=${string#Hello}
echo "Result: ${result}"

这将输出 "Result: , World!"。

4.5 字符串替换

${var/old/new} 用于替换字符串中的第一个匹配项。

sentence="I like apples, and I like oranges."
new_sentence="${sentence/apples/bananas}"
echo "New Sentence: ${new_sentence}"

这将输出 "New Sentence: I like bananas, and I like oranges."。

${var//old/new} 用于替换字符串中的所有匹配项。

4.6 删除前缀和后缀

${var#prefix} 用于从字符串的开头删除最短匹配的前缀。

path="/home/user/documents"
result=${path#/home/user/}
echo "Result: ${result}"

这将输出 "Result: documents"。

${var##prefix} 用于从字符串的开头删除最长匹配的前缀。

${var%suffix} 用于从字符串的末尾删除最短匹配的后缀。

${var%%suffix} 用于从字符串的末尾删除最长匹配的后缀。

5. 默认值

${} 还可以用于提供变量的默认值,防止在变量未设置时产生错误。

echo "${undefined_variable:-default_value}"

上述脚本将输出 "default_value",如果变量 undefined_variable 未设置,则使用默认值。

6. 注意事项

这是一个基本的 ${} 文档,如果需要更多详细信息,可以参考相关Shell编程的文档或手册。希望这个文档对你有帮助!