Linux系统文件与目录内容检索
一、文件和目录内容检索处理命令
1、grep筛选
grep [选项] file
选项 | 作用 |
---|---|
-i | 忽略大小写。 |
-v | 反转匹配,只显示不匹配的行。 |
-c | 计数,只输出匹配行的数量。 |
-n | 显示匹配行及其行号。 |
-l(小写L) | 只输出包含匹配字符串的文件名。 |
-L | 只输出不包含匹配字符串的文件名。 |
-q(暂时不用) | 静默模式,不输出任何匹配信息。 |
-E | 使用扩展正则表达式。 |
-o | 只输出匹配到的部分,而不是整行内容。 |
-A [NUM] | 打印匹配行和之后的[NUM]行。 |
-B [NUM] | 打印匹配行和之前的[NUM]行。 |
-C [NUM] 或 --context=[NUM] | 打印匹配行及其前后的[NUM]行。 |
-P | 使用Perl正则表达式。 |
-r 或 --recursive | 递归搜索目录中的文件。 |
-R 或 --text | 将二进制文件当作文本文件处理。 |
-s 或 --no-messages | 不显示错误信息。 |
1.1.基本grep使用
题目要求:
-
在用户主目录下创建一个名为
grep_practice
的目录 -
在
grep_practice
目录中创建fruits.txt
文件 -
使用grep命令完成以下操作:
-
查找包含"apple"的行(忽略大小写)
-
查找不包含"banana"的行
-
统计包含"orange"的行数
-
显示包含"grape"的行及其行号
-
# 1. 创建目录
mkdir ~/grep_practice
# 2. 进入目录并创建文件
cd ~/grep_practice
touch fruits.txt
# 3. 使用cat添加内容
cat <<EOF >> fruits.txt
Apple
Banana
Orange
Grape
apple pie
banana bread
orange juice
grape jelly
EOF
# 4. 执行grep操作
# 查找包含"apple"的行(忽略大小写)
grep -i "apple" fruits.txt
# 查找不包含"banana"的行
grep -v "banana" fruits.txt
# 统计包含"orange"的行数
grep -c "orange" fruits.txt
# 显示包含"grape"的行及其行号
grep -n "grape" fruits.txt
1.2.递归搜索与文件处理
题目要求:
-
在
~/grep_practice
目录下创建logs
子目录 -
在
logs
目录中创建三个日志文件:-
system.log
-
app.log
-
network.log
-
-
使用grep命令完成以下操作:
-
递归查找所有包含"ERROR"的文件名
-
递归查找所有包含"WARNING"但不显示匹配内容
-
递归统计所有文件中"INFO"的出现次数
-
递归查找不包含"DEBUG"的文件
-
# 1. 创建logs目录
mkdir ~/grep_practice/logs
# 2. 创建并填充日志文件
# system.log
cat <<EOF >> ~/grep_practice/logs/system.log
[INFO] System started
[ERROR] Disk full
[WARNING] Memory low
EOF
# app.log
cat <<EOF >> ~/grep_practice/logs/app.log
[INFO] Application loaded
[DEBUG] Initializing modules
[WARNING] Configuration missing
EOF
# network.log
cat <<EOF >> ~/grep_practice/logs/network.log
[INFO] Network connected
[ERROR] Connection timeout
[DEBUG] Resolving host
EOF
# 3. 执行grep操作
# 递归查找所有包含"ERROR"的文件名
grep -rl "ERROR" ~/grep_practice
# 递归查找所有包含"WARNING"但不显示匹配内容
grep -r "WARNING" ~/grep_practice -l
# 递归统计所有文件中"INFO"的出现次数
grep -rc "INFO" ~/grep_practice
# 递归查找不包含"DEBUG"的文件
grep -rL "DEBUG" ~/grep_practice
2、find查找
选项 | 作用 |
---|---|
-name | 根据关键字查找,支持通配符* |
-type | 根据文件类型查找 |
-size | 根据文件大小查找 |
-maxdepth | 指定查找时的路径深度 |
-exec | 将find命令查找到的内容交给-exec后面的命令再次处理 |
-user | 根据文件的属主进行查找 |
-perm | 根据文件的权限进行查找 |
2.1.基本find使用
题目要求:
-
在用户主目录下创建
find_practice
目录 -
在
find_practice
目录中创建:-
3个文本文件:
file1.txt
,file2.log
,notes.txt
-
2个子目录:
logs
,backups
-
在
logs
目录中创建system.log
文件
-
-
使用find命令完成以下操作:
-
查找所有
.txt
文件 -
查找所有目录
-
查找大于1KB的文件
-
查找空文件
-
查找属主为当前用户的文件
-
# 1. 创建目录和文件
mkdir ~/find_practice
cd ~/find_practice
# 创建文件
touch file1.txt file2.log notes.txt
# 创建子目录和文件
mkdir logs backups
touch logs/system.log
# 添加一些内容使文件大小不同
echo "This is a test file" > file1.txt
echo "Another test file with more content" > file2.log
# 2. 执行find操作
# 查找所有.txt文件
find ~/find_practice -name "*.txt"
# 查找所有目录
find ~/find_practice -type d
# 查找大于1KB的文件
find ~/find_practice -size +1k
# 查找空文件
find ~/find_practice -empty
# 查找属主为当前用户的文件
find ~/find_practice -user $(whoami)
2.2.高级find使用与处理
题目要求:
-
在
~/find_practice
目录中创建:-
文件
important.doc
(大小:10KB) -
文件
backup.tar
(大小:100KB) -
文件
temp.txt
(空文件)
-
-
使用find命令完成以下操作:
-
查找所有大于5KB的文件并显示详细信息
-
查找所有.txt文件并删除
-
查找空文件并添加内容
-
查找所有.log文件并统计数量
-
查找所有目录并修改权限
-
# 1. 创建大文件
cd ~/find_practice
# 创建10KB文件
dd if=/dev/zero of=important.doc bs=1K count=10
# 创建100KB文件
dd if=/dev/zero of=backup.tar bs=1K count=100
# 创建空文件
touch temp.txt
# 2. 执行find操作
# 查找所有大于5KB的文件并显示详细信息
find ~/find_practice -size +5k -exec ls -lh {} \;
# 查找所有.txt文件并删除
find ~/find_practice -name "*.txt" -exec rm -f {} \;
# 查找空文件并添加内容
find ~/find_practice -empty -exec sh -c 'echo "This was empty" > {}' \;
# 查找所有.log文件并统计数量
find ~/find_practice -name "*.log" | wc -l
# 查找所有目录并修改权限为755
find ~/find_practice -type d -exec chmod 755 {} \;
# 验证目录权限
find ~/find_practice -type d -exec ls -ld {} \;
3、sort排序
选项 | 作用 |
---|---|
-f | 忽略大小写,会将小写字母都转换为大写字母来进行比较 |
-b | 忽略每行前面的空格 |
-n | 按照数值进行排序 |
-r | 反向排序 |
-u | 等同于uniq,表示相同的数据仅显示一行 |
-t | 指定字段分隔符,默认使用[Tab]键分隔 |
-k | 指定排序字段 |
-o<输出文件> | 将排序后的结果转存至指定文件 |
-h | 友好显示 |
3.1.基本排序操作
题目要求:
-
在用户主目录下创建
sort_practice
目录 -
在
sort_practice
目录中创建numbers.txt
文件,内容如下:10 5 3 8 1 15 7 12
-
使用sort命令完成以下操作:
-
按数值升序排序
-
按数值降序排序
-
按数值升序排序并将结果保存到
sorted_numbers.txt
-
按数值降序排序并将结果保存到
reverse_sorted_numbers.txt
-
# 1. 创建目录和文件
mkdir ~/sort_practice
cd ~/sort_practice
# 2. 创建numbers.txt文件
cat <<EOF >> numbers.txt
10
5
3
8
1
15
7
12
EOF
# 3. 执行sort操作
# 按数值升序排序
sort -n numbers.txt
# 按数值降序排序
sort -n -r numbers.txt
# 按数值升序排序并保存结果
sort -n numbers.txt -o sorted_numbers.txt
# 按数值降序排序并保存结果
sort -n -r numbers.txt -o reverse_sorted_numbers.txt
# 4. 查看结果文件
cat sorted_numbers.txt
cat reverse_sorted_numbers.txt
3.2.多字段排序与复杂数据
题目要求:
-
在
~/sort_practice
目录中创建employees.csv
文件,内容如下:John,Smith,35,50000 Jane,Doe,28,45000 Bob,Johnson,42,60000 Alice,Williams,35,55000 Mike,Brown,28,40000
-
使用sort命令完成以下操作:
-
按年龄(第3列)升序排序
-
按年龄降序排序
-
按年龄升序排序,相同年龄按工资降序排序
-
按姓氏(第2列)字母顺序排序
-
# 1. 创建employees.csv文件
cd ~/sort_practice
cat <<EOF >> employees.csv
John,Smith,35,50000
Jane,Doe,28,45000
Bob,Johnson,42,60000
Alice,Williams,35,55000
Mike,Brown,28,40000
EOF
# 2. 执行sort操作
# 按年龄(第3列)升序排序
sort -t ',' -k 3n employees.csv
# 按年龄降序排序
sort -t ',' -k 3nr employees.csv
# 按年龄升序排序,相同年龄按工资降序排序
sort -t ',' -k 3n -k 4nr employees.csv
# 按姓氏(第2列)字母顺序排序
sort -t ',' -k 2 employees.csv
# 3. 可选:将结果保存到文件
sort -t ',' -k 3n employees.csv -o sorted_by_age.csv
sort -t ',' -k 2 employees.csv -o sorted_by_lastname.csv