简体中文 繁體中文 English Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français Japanese

站内搜索

搜索

活动公告

通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31

Fedora系统命令行完全指南 从入门到精通的实用技巧 让你轻松掌握Linux命令行操作提高工作效率解决实际问题

SunJu_FaceMall

3万

主题

153

科技点

3万

积分

大区版主

碾压王

积分
32103
发表于 2025-9-3 10:20:00 | 显示全部楼层 |阅读模式 [标记阅至此楼]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Fedora是一个基于RPM的Linux发行版,它以其先进的技术和社区驱动的开发模式而闻名。作为Red Hat Enterprise Linux的上游项目,Fedora提供了最新的软件包和技术,使其成为开发人员和系统管理员的首选操作系统之一。

命令行界面(CLI)是Linux系统中最强大和灵活的工具之一。通过命令行,用户可以精确控制系统、自动化任务、高效处理数据和解决复杂问题。掌握Fedora的命令行操作不仅能提高工作效率,还能深入理解Linux系统的工作原理。

本指南将带您从Fedora命令行的基础知识开始,逐步深入到高级技巧,帮助您成为一名真正的命令行专家。无论您是Linux新手还是有经验的用户,本指南都将提供有价值的信息和实用技巧,帮助您充分利用Fedora系统的命令行功能。

Fedora命令行基础

终端与Shell

在Fedora中,您可以通过多种方式访问命令行界面。最常见的方式是使用终端应用程序,如GNOME Terminal、Konsole或Terminator。默认情况下,Fedora使用Bash(Bourne Again Shell)作为用户的默认Shell,但您也可以选择其他Shell,如Zsh或Fish。

要打开终端,您可以使用快捷键Ctrl+Alt+T,或者在应用程序菜单中搜索”Terminal”。

基本命令语法

Linux命令的基本语法通常为:
  1. command [options] [arguments]
复制代码

其中:

• command是要执行的程序或命令的名称
• options(也称为标志或开关)用于修改命令的行为,通常以-(短选项)或--(长选项)开头
• arguments是命令要操作的对象,如文件名、目录名或其他数据

获取帮助

在使用命令行时,了解如何获取帮助非常重要。以下是几种获取命令帮助的方法:

1. man命令:显示命令的手册页man ls
2. --help选项:大多数命令都支持此选项,显示简要的使用说明ls --help
3. info命令:显示更详细的命令信息info ls
4. whatis命令:显示命令的简短描述whatis ls

man命令:显示命令的手册页
  1. man ls
复制代码

--help选项:大多数命令都支持此选项,显示简要的使用说明
  1. ls --help
复制代码

info命令:显示更详细的命令信息
  1. info ls
复制代码

whatis命令:显示命令的简短描述
  1. whatis ls
复制代码

常用基础命令

以下是一些最常用的基础命令:

• pwd:显示当前工作目录pwd
# 输出:/home/username
• cd:更改目录cd /var/log  # 切换到/var/log目录
cd ..        # 返回上一级目录
cd ~         # 切换到用户主目录
cd -         # 切换到上一个工作目录
• ls:列出目录内容ls           # 列出当前目录的内容
ls -l        # 以长格式列出,显示详细信息
ls -a        # 显示所有文件,包括隐藏文件
ls -la       # 组合选项,显示所有文件的详细信息
ls -lh       # 以人类可读的格式显示文件大小
• clear:清除终端屏幕clear
• exit:退出当前Shell会话exit
• history:显示命令历史记录history      # 显示所有历史命令
history 10   # 显示最近10条命令
!n           # 执行历史记录中的第n条命令
!!           # 执行上一条命令

pwd:显示当前工作目录
  1. pwd
  2. # 输出:/home/username
复制代码

cd:更改目录
  1. cd /var/log  # 切换到/var/log目录
  2. cd ..        # 返回上一级目录
  3. cd ~         # 切换到用户主目录
  4. cd -         # 切换到上一个工作目录
复制代码

ls:列出目录内容
  1. ls           # 列出当前目录的内容
  2. ls -l        # 以长格式列出,显示详细信息
  3. ls -a        # 显示所有文件,包括隐藏文件
  4. ls -la       # 组合选项,显示所有文件的详细信息
  5. ls -lh       # 以人类可读的格式显示文件大小
复制代码

clear:清除终端屏幕
  1. clear
复制代码

exit:退出当前Shell会话
  1. exit
复制代码

history:显示命令历史记录
  1. history      # 显示所有历史命令
  2. history 10   # 显示最近10条命令
  3. !n           # 执行历史记录中的第n条命令
  4. !!           # 执行上一条命令
复制代码

命令自动补全

Bash Shell提供了命令自动补全功能,可以大大提高输入效率:

1. Tab键补全:输入命令或文件名的一部分,然后按Tab键,Shell会自动补全或显示可能的选项。
  1. # 输入以下内容并按Tab键
  2.    cd Do
  3.    # 可能会自动补全为 cd Documents/
复制代码

1. 命令历史补全:使用Ctrl+R可以搜索命令历史记录。
  1. # 按Ctrl+R,然后输入要搜索的命令的一部分
  2.    (reverse-i-search)`ssh': ssh user@example.com
复制代码

文件和目录操作

创建和删除目录

• mkdir:创建新目录mkdir new_directory          # 创建名为new_directory的目录
mkdir -p dir1/dir2/dir3     # 创建嵌套目录,包括所有必要的父目录
• rmdir:删除空目录rmdir empty_directory       # 删除空目录
• rm:删除文件或目录rm file.txt                 # 删除文件
rm -r directory             # 递归删除目录及其内容
rm -f file.txt              # 强制删除文件,不提示确认
rm -rf directory            # 强制递归删除目录及其内容(慎用!)

mkdir:创建新目录
  1. mkdir new_directory          # 创建名为new_directory的目录
  2. mkdir -p dir1/dir2/dir3     # 创建嵌套目录,包括所有必要的父目录
复制代码

rmdir:删除空目录
  1. rmdir empty_directory       # 删除空目录
复制代码

rm:删除文件或目录
  1. rm file.txt                 # 删除文件
  2. rm -r directory             # 递归删除目录及其内容
  3. rm -f file.txt              # 强制删除文件,不提示确认
  4. rm -rf directory            # 强制递归删除目录及其内容(慎用!)
复制代码

复制和移动文件

• cp:复制文件或目录cp file1.txt file2.txt      # 复制文件
cp file.txt directory/      # 复制文件到目录
cp -r directory1/ directory2/  # 递归复制目录
cp -p file.txt file_backup.txt  # 复制时保留文件属性
cp -v file.txt directory/   # 显示复制过程的详细信息
• mv:移动或重命名文件和目录mv old_name.txt new_name.txt  # 重命名文件
mv file.txt directory/       # 移动文件到目录
mv -v file.txt directory/    # 显示移动过程的详细信息

cp:复制文件或目录
  1. cp file1.txt file2.txt      # 复制文件
  2. cp file.txt directory/      # 复制文件到目录
  3. cp -r directory1/ directory2/  # 递归复制目录
  4. cp -p file.txt file_backup.txt  # 复制时保留文件属性
  5. cp -v file.txt directory/   # 显示复制过程的详细信息
复制代码

mv:移动或重命名文件和目录
  1. mv old_name.txt new_name.txt  # 重命名文件
  2. mv file.txt directory/       # 移动文件到目录
  3. mv -v file.txt directory/    # 显示移动过程的详细信息
复制代码

查看文件内容

• cat:连接文件并打印到标准输出cat file.txt                # 显示文件内容
cat file1.txt file2.txt     # 显示多个文件的内容
cat -n file.txt             # 显示行号
• less:分页查看文件内容less file.txt               # 分页查看文件
# 在less中,可以使用以下命令:
# 空格或Page Down:向下翻页
# b或Page Up:向上翻页
# /pattern:搜索模式
# q:退出
• head和tail:查看文件的开头和结尾head file.txt               # 显示文件的前10行
head -n 20 file.txt         # 显示文件的前20行
tail file.txt               # 显示文件的最后10行
tail -n 20 file.txt         # 显示文件的最后20行
tail -f file.txt            # 实时查看文件的更新(常用于日志文件)

cat:连接文件并打印到标准输出
  1. cat file.txt                # 显示文件内容
  2. cat file1.txt file2.txt     # 显示多个文件的内容
  3. cat -n file.txt             # 显示行号
复制代码

less:分页查看文件内容
  1. less file.txt               # 分页查看文件
  2. # 在less中,可以使用以下命令:
  3. # 空格或Page Down:向下翻页
  4. # b或Page Up:向上翻页
  5. # /pattern:搜索模式
  6. # q:退出
复制代码

head和tail:查看文件的开头和结尾
  1. head file.txt               # 显示文件的前10行
  2. head -n 20 file.txt         # 显示文件的前20行
  3. tail file.txt               # 显示文件的最后10行
  4. tail -n 20 file.txt         # 显示文件的最后20行
  5. tail -f file.txt            # 实时查看文件的更新(常用于日志文件)
复制代码

查找文件和目录

• find:在目录树中查找文件find . -name "*.txt"        # 在当前目录及其子目录中查找所有.txt文件
find /home -name "report"   # 在/home目录中查找名为report的文件
find . -type f -name "*.py" # 查找所有Python文件
find . -mtime -7            # 查找7天内修改过的文件
find . -size +10M           # 查找大于10MB的文件
• locate:使用数据库快速查找文件locate file.txt             # 查找名为file.txt的文件
locate -i "*.pdf"           # 不区分大小写地查找所有PDF文件

find:在目录树中查找文件
  1. find . -name "*.txt"        # 在当前目录及其子目录中查找所有.txt文件
  2. find /home -name "report"   # 在/home目录中查找名为report的文件
  3. find . -type f -name "*.py" # 查找所有Python文件
  4. find . -mtime -7            # 查找7天内修改过的文件
  5. find . -size +10M           # 查找大于10MB的文件
复制代码

locate:使用数据库快速查找文件
  1. locate file.txt             # 查找名为file.txt的文件
  2. locate -i "*.pdf"           # 不区分大小写地查找所有PDF文件
复制代码

注意:locate使用一个数据库,可能不是最新的。您可以使用updatedb命令更新该数据库(需要root权限)。

• which和whereis:查找命令的位置which ls                    # 显示ls命令的完整路径
whereis ls                 # 显示ls命令的二进制、源代码和手册页的位置
  1. which ls                    # 显示ls命令的完整路径
  2. whereis ls                 # 显示ls命令的二进制、源代码和手册页的位置
复制代码

文件权限和所有权

在Linux中,每个文件和目录都有权限设置,控制谁可以读取、写入或执行它们。

  1. ls -l:查看文件权限ls -l file.txt
  2. # 输出示例:-rw-r--r-- 1 user group 1234 Jan 1 12:34 file.txt
  3. # 权限解释:-(文件类型)rw-(所有者权限)r--(组权限)r--(其他用户权限)
复制代码
• chmod:更改文件权限chmod 755 script.sh         # 设置权限为rwxr-xr-x
chmod u+x script.sh         # 为所有者添加执行权限
chmod go-w file.txt         # 删除组和其他用户的写权限
chmod a=r file.txt          # 为所有用户设置只读权限

ls -l:查看文件权限
  1. ls -l file.txt
  2. # 输出示例:-rw-r--r-- 1 user group 1234 Jan 1 12:34 file.txt
  3. # 权限解释:-(文件类型)rw-(所有者权限)r--(组权限)r--(其他用户权限)
复制代码

chmod:更改文件权限
  1. chmod 755 script.sh         # 设置权限为rwxr-xr-x
  2. chmod u+x script.sh         # 为所有者添加执行权限
  3. chmod go-w file.txt         # 删除组和其他用户的写权限
  4. chmod a=r file.txt          # 为所有用户设置只读权限
复制代码

权限数字表示法:

• 4 = 读取(r)
• 2 = 写入(w)
• 1 = 执行(x)
• 0 = 无权限
  1. chown:更改文件所有者sudo chown user file.txt    # 更改文件所有者为user
  2. sudo chown user:group file.txt  # 更改文件所有者和组
  3. sudo chown -R user directory/   # 递归更改目录及其内容的所有者
复制代码
• chgrp:更改文件组sudo chgrp group file.txt   # 更改文件组为group
sudo chgrp -R group directory/  # 递归更改目录及其内容的组

4 = 读取(r)

2 = 写入(w)

1 = 执行(x)

0 = 无权限

chown:更改文件所有者
  1. sudo chown user file.txt    # 更改文件所有者为user
  2. sudo chown user:group file.txt  # 更改文件所有者和组
  3. sudo chown -R user directory/   # 递归更改目录及其内容的所有者
复制代码

chgrp:更改文件组
  1. sudo chgrp group file.txt   # 更改文件组为group
  2. sudo chgrp -R group directory/  # 递归更改目录及其内容的组
复制代码

文本处理技巧

文本编辑器

在命令行中,有几种流行的文本编辑器可供选择:

1. Nano:简单易用的文本编辑器nano file.txt              # 在Nano中打开文件
# 在Nano中:
# Ctrl+O:保存文件
# Ctrl+X:退出编辑器
# Ctrl+W:搜索文本
# Ctrl+\:替换文本
2.
  1. Vim:功能强大的模式编辑器vim file.txt               # 在Vim中打开文件
  2. # Vim有两种主要模式:
  3. # 普通模式:用于导航和命令
  4. # 插入模式:用于编辑文本
  5. # 在普通模式下:
  6. # i:进入插入模式
  7. # Esc:返回普通模式
  8. # :w:保存文件
  9. # :q:退出
  10. # :wq:保存并退出
  11. # :q!:不保存退出
复制代码
3. Emacs:可扩展的文本编辑器emacs file.txt             # 在Emacs中打开文件
# Emacs使用大量Ctrl和Alt组合键
# Ctrl+X Ctrl+S:保存文件
# Ctrl+X Ctrl+C:退出

Nano:简单易用的文本编辑器
  1. nano file.txt              # 在Nano中打开文件
  2. # 在Nano中:
  3. # Ctrl+O:保存文件
  4. # Ctrl+X:退出编辑器
  5. # Ctrl+W:搜索文本
  6. # Ctrl+\:替换文本
复制代码

Vim:功能强大的模式编辑器
  1. vim file.txt               # 在Vim中打开文件
  2. # Vim有两种主要模式:
  3. # 普通模式:用于导航和命令
  4. # 插入模式:用于编辑文本
  5. # 在普通模式下:
  6. # i:进入插入模式
  7. # Esc:返回普通模式
  8. # :w:保存文件
  9. # :q:退出
  10. # :wq:保存并退出
  11. # :q!:不保存退出
复制代码

Emacs:可扩展的文本编辑器
  1. emacs file.txt             # 在Emacs中打开文件
  2. # Emacs使用大量Ctrl和Alt组合键
  3. # Ctrl+X Ctrl+S:保存文件
  4. # Ctrl+X Ctrl+C:退出
复制代码

文本搜索和过滤

• grep:在文件中搜索模式grep "pattern" file.txt     # 在文件中搜索模式
grep -i "pattern" file.txt  # 不区分大小写地搜索
grep -r "pattern" directory/  # 递归搜索目录中的文件
grep -n "pattern" file.txt  # 显示匹配行的行号
grep -v "pattern" file.txt  # 显示不匹配模式的行
grep -c "pattern" file.txt  # 计算匹配模式的行数
• sed:流编辑器,用于文本转换sed 's/old/new/g' file.txt  # 将文件中的"old"替换为"new"
sed -i 's/old/new/g' file.txt  # 直接修改文件(替换)
sed '1,5d' file.txt         # 删除1到5行
sed -n '1,5p' file.txt      # 只显示1到5行
sed '/^$/d' file.txt        # 删除空行
  1. awk:强大的文本处理工具awk '{print $1}' file.txt   # 打印每行的第一个字段
  2. awk -F: '{print $1}' /etc/passwd  # 使用冒号作为分隔符,打印第一个字段
  3. awk 'NR>5' file.txt         # 显示第5行之后的内容
  4. awk '{print NR, $0}' file.txt  # 显示行号和内容
  5. awk '{sum += $1} END {print sum}' file.txt  # 计算第一列的总和
复制代码

grep:在文件中搜索模式
  1. grep "pattern" file.txt     # 在文件中搜索模式
  2. grep -i "pattern" file.txt  # 不区分大小写地搜索
  3. grep -r "pattern" directory/  # 递归搜索目录中的文件
  4. grep -n "pattern" file.txt  # 显示匹配行的行号
  5. grep -v "pattern" file.txt  # 显示不匹配模式的行
  6. grep -c "pattern" file.txt  # 计算匹配模式的行数
复制代码

sed:流编辑器,用于文本转换
  1. sed 's/old/new/g' file.txt  # 将文件中的"old"替换为"new"
  2. sed -i 's/old/new/g' file.txt  # 直接修改文件(替换)
  3. sed '1,5d' file.txt         # 删除1到5行
  4. sed -n '1,5p' file.txt      # 只显示1到5行
  5. sed '/^$/d' file.txt        # 删除空行
复制代码

awk:强大的文本处理工具
  1. awk '{print $1}' file.txt   # 打印每行的第一个字段
  2. awk -F: '{print $1}' /etc/passwd  # 使用冒号作为分隔符,打印第一个字段
  3. awk 'NR>5' file.txt         # 显示第5行之后的内容
  4. awk '{print NR, $0}' file.txt  # 显示行号和内容
  5. awk '{sum += $1} END {print sum}' file.txt  # 计算第一列的总和
复制代码

文本排序和比较

• sort:对文本行进行排序sort file.txt               # 对文件行进行排序
sort -n file.txt           # 按数字值排序
sort -r file.txt           # 逆序排序
sort -k 2 file.txt         # 按第二列排序
sort -u file.txt           # 去除重复行后排序
• uniq:去除或报告重复行uniq file.txt              # 去除相邻的重复行
uniq -c file.txt          # 计算每行出现的次数
uniq -d file.txt          # 只显示重复的行
uniq -u file.txt          # 只显示不重复的行
• diff:比较文件的差异diff file1.txt file2.txt   # 比较两个文件的差异
diff -u file1.txt file2.txt  # 以统一格式显示差异
diff -r dir1/ dir2/       # 递归比较两个目录

sort:对文本行进行排序
  1. sort file.txt               # 对文件行进行排序
  2. sort -n file.txt           # 按数字值排序
  3. sort -r file.txt           # 逆序排序
  4. sort -k 2 file.txt         # 按第二列排序
  5. sort -u file.txt           # 去除重复行后排序
复制代码

uniq:去除或报告重复行
  1. uniq file.txt              # 去除相邻的重复行
  2. uniq -c file.txt          # 计算每行出现的次数
  3. uniq -d file.txt          # 只显示重复的行
  4. uniq -u file.txt          # 只显示不重复的行
复制代码

diff:比较文件的差异
  1. diff file1.txt file2.txt   # 比较两个文件的差异
  2. diff -u file1.txt file2.txt  # 以统一格式显示差异
  3. diff -r dir1/ dir2/       # 递归比较两个目录
复制代码

文本格式化

• fmt:简单的文本格式化工具fmt file.txt              # 格式化文本,使其每行宽度合理
fmt -w 60 file.txt       # 设置每行宽度为60个字符
• fold:将长行折叠为多行fold -w 60 file.txt       # 将每行折叠为60个字符宽
fold -s -w 60 file.txt    # 在单词边界处折叠
• column:将输入格式化为列cat file.txt | column -t  # 将文本格式化为表格形式

fmt:简单的文本格式化工具
  1. fmt file.txt              # 格式化文本,使其每行宽度合理
  2. fmt -w 60 file.txt       # 设置每行宽度为60个字符
复制代码

fold:将长行折叠为多行
  1. fold -w 60 file.txt       # 将每行折叠为60个字符宽
  2. fold -s -w 60 file.txt    # 在单词边界处折叠
复制代码

column:将输入格式化为列
  1. cat file.txt | column -t  # 将文本格式化为表格形式
复制代码

系统管理

监控系统状态

• top:动态显示运行中的进程top                       # 启动top命令
# 在top中:
# M:按内存使用排序
# P:按CPU使用排序
# k:终止进程
# q:退出
• htop:交互式进程查看器(需要安装)sudo dnf install htop     # 安装htop
htop                      # 启动htop
• free:显示内存使用情况free                      # 以KB为单位显示内存使用情况
free -h                   # 以人类可读的格式显示
free -m                   # 以MB为单位显示
• df:显示磁盘空间使用情况df                        # 显示磁盘空间使用情况
df -h                     # 以人类可读的格式显示
df -T                     # 显示文件系统类型
• du:显示目录或文件的磁盘使用情况du                        # 显示当前目录的磁盘使用情况
du -h                     # 以人类可读的格式显示
du -sh directory/         # 显示目录的总大小
du -h --max-depth=1       # 显示当前目录下各子目录的大小

top:动态显示运行中的进程
  1. top                       # 启动top命令
  2. # 在top中:
  3. # M:按内存使用排序
  4. # P:按CPU使用排序
  5. # k:终止进程
  6. # q:退出
复制代码

htop:交互式进程查看器(需要安装)
  1. sudo dnf install htop     # 安装htop
  2. htop                      # 启动htop
复制代码

free:显示内存使用情况
  1. free                      # 以KB为单位显示内存使用情况
  2. free -h                   # 以人类可读的格式显示
  3. free -m                   # 以MB为单位显示
复制代码

df:显示磁盘空间使用情况
  1. df                        # 显示磁盘空间使用情况
  2. df -h                     # 以人类可读的格式显示
  3. df -T                     # 显示文件系统类型
复制代码

du:显示目录或文件的磁盘使用情况
  1. du                        # 显示当前目录的磁盘使用情况
  2. du -h                     # 以人类可读的格式显示
  3. du -sh directory/         # 显示目录的总大小
  4. du -h --max-depth=1       # 显示当前目录下各子目录的大小
复制代码

进程管理

• ps:显示当前进程ps                        # 显示当前用户的进程
ps aux                    # 显示所有用户的进程
ps -ef                    # 显示所有进程的详细信息
ps aux | grep process_name  # 查找特定进程
• kill:终止进程kill PID                  # 终止指定PID的进程
kill -9 PID               # 强制终止进程
killall process_name      # 终止所有指定名称的进程
pkill process_name        # 根据进程名终止进程
• jobs、bg和fg:管理后台任务command &                 # 在后台运行命令
jobs                      # 显示后台任务
bg %1                     # 将任务1放到后台运行
fg %1                     # 将任务1带到前台
• nohup:运行不受挂断影响的命令nohup command &           # 运行命令,即使退出终端也不中断
nohup command > output.txt 2>&1 &  # 将输出重定向到文件

ps:显示当前进程
  1. ps                        # 显示当前用户的进程
  2. ps aux                    # 显示所有用户的进程
  3. ps -ef                    # 显示所有进程的详细信息
  4. ps aux | grep process_name  # 查找特定进程
复制代码

kill:终止进程
  1. kill PID                  # 终止指定PID的进程
  2. kill -9 PID               # 强制终止进程
  3. killall process_name      # 终止所有指定名称的进程
  4. pkill process_name        # 根据进程名终止进程
复制代码

jobs、bg和fg:管理后台任务
  1. command &                 # 在后台运行命令
  2. jobs                      # 显示后台任务
  3. bg %1                     # 将任务1放到后台运行
  4. fg %1                     # 将任务1带到前台
复制代码

nohup:运行不受挂断影响的命令
  1. nohup command &           # 运行命令,即使退出终端也不中断
  2. nohup command > output.txt 2>&1 &  # 将输出重定向到文件
复制代码

系统信息和性能监控

• uname:显示系统信息uname                     # 显示内核名称
uname -a                  # 显示所有系统信息
uname -r                  # 显示内核版本
uname -m                  # 显示机器硬件架构
• uptime:显示系统运行时间和负载uptime                    # 显示系统运行时间、用户数和负载平均值
• lscpu:显示CPU信息lscpu                     # 显示CPU架构、型号、核心数等信息
• lsblk:列出块设备信息lsblk                     # 列出块设备信息
lsblk -f                  # 显示文件系统信息
  1. lsof:列出打开的文件lsof                      # 列出所有打开的文件
  2. lsof -i :80               # 列出使用端口80的进程
  3. lsof /path/to/file        # 列出使用特定文件的进程
复制代码

uname:显示系统信息
  1. uname                     # 显示内核名称
  2. uname -a                  # 显示所有系统信息
  3. uname -r                  # 显示内核版本
  4. uname -m                  # 显示机器硬件架构
复制代码

uptime:显示系统运行时间和负载
  1. uptime                    # 显示系统运行时间、用户数和负载平均值
复制代码

lscpu:显示CPU信息
  1. lscpu                     # 显示CPU架构、型号、核心数等信息
复制代码

lsblk:列出块设备信息
  1. lsblk                     # 列出块设备信息
  2. lsblk -f                  # 显示文件系统信息
复制代码

lsof:列出打开的文件
  1. lsof                      # 列出所有打开的文件
  2. lsof -i :80               # 列出使用端口80的进程
  3. lsof /path/to/file        # 列出使用特定文件的进程
复制代码

日志管理

• journalctl:查询systemd日志journalctl                # 显示所有日志
journalctl -u service_name  # 显示特定服务的日志
journalctl -f             # 实时跟踪日志
journalctl --since today  # 显示今天的日志
journalctl -p err         # 显示错误级别的日志
• dmesg:显示内核消息dmesg                     # 显示内核消息
dmesg | tail              # 显示最新的内核消息
dmesg -T                  # 显示人类可读的时间戳
dmesg -l err              # 只显示错误消息
• tail和grep组合查看日志tail -f /var/log/messages  # 实时查看系统日志
grep "error" /var/log/logfile  # 在日志中搜索错误
tail -f /var/log/logfile | grep "error"  # 实时查看日志中的错误

journalctl:查询systemd日志
  1. journalctl                # 显示所有日志
  2. journalctl -u service_name  # 显示特定服务的日志
  3. journalctl -f             # 实时跟踪日志
  4. journalctl --since today  # 显示今天的日志
  5. journalctl -p err         # 显示错误级别的日志
复制代码

dmesg:显示内核消息
  1. dmesg                     # 显示内核消息
  2. dmesg | tail              # 显示最新的内核消息
  3. dmesg -T                  # 显示人类可读的时间戳
  4. dmesg -l err              # 只显示错误消息
复制代码

tail和grep组合查看日志
  1. tail -f /var/log/messages  # 实时查看系统日志
  2. grep "error" /var/log/logfile  # 在日志中搜索错误
  3. tail -f /var/log/logfile | grep "error"  # 实时查看日志中的错误
复制代码

网络配置和故障排除

网络接口配置

• ip:显示和操作路由、网络设备、策略路由和隧道ip addr show               # 显示所有网络接口的IP地址
ip link show               # 显示所有网络接口的状态
ip route show              # 显示路由表
ip addr add 192.168.1.100/24 dev eth0  # 为接口添加IP地址
ip link set eth0 up        # 启用网络接口
ip link set eth0 down      # 禁用网络接口
• ifconfig:配置网络接口(传统工具,已逐渐被ip命令替代)ifconfig                   # 显示所有网络接口
ifconfig eth0              # 显示特定接口
ifconfig eth0 up           # 启用接口
ifconfig eth0 down         # 禁用接口

ip:显示和操作路由、网络设备、策略路由和隧道
  1. ip addr show               # 显示所有网络接口的IP地址
  2. ip link show               # 显示所有网络接口的状态
  3. ip route show              # 显示路由表
  4. ip addr add 192.168.1.100/24 dev eth0  # 为接口添加IP地址
  5. ip link set eth0 up        # 启用网络接口
  6. ip link set eth0 down      # 禁用网络接口
复制代码

ifconfig:配置网络接口(传统工具,已逐渐被ip命令替代)
  1. ifconfig                   # 显示所有网络接口
  2. ifconfig eth0              # 显示特定接口
  3. ifconfig eth0 up           # 启用接口
  4. ifconfig eth0 down         # 禁用接口
复制代码

网络连接测试

• ping:测试网络连接ping example.com           # 测试与example.com的连接
ping -c 4 example.com      # 发送4个ping包
ping -i 2 example.com      # 设置ping间隔为2秒
• traceroute:显示数据包到主机的路径traceroute example.com     # 显示到example.com的路由路径
traceroute -n example.com  # 显示IP地址而不是主机名
• mtr:网络诊断工具(结合了ping和traceroute的功能)sudo dnf install mtr       # 安装mtr
mtr example.com            # 启动mtr

ping:测试网络连接
  1. ping example.com           # 测试与example.com的连接
  2. ping -c 4 example.com      # 发送4个ping包
  3. ping -i 2 example.com      # 设置ping间隔为2秒
复制代码

traceroute:显示数据包到主机的路径
  1. traceroute example.com     # 显示到example.com的路由路径
  2. traceroute -n example.com  # 显示IP地址而不是主机名
复制代码

mtr:网络诊断工具(结合了ping和traceroute的功能)
  1. sudo dnf install mtr       # 安装mtr
  2. mtr example.com            # 启动mtr
复制代码

网络连接和端口检查

• netstat:显示网络连接、路由表、接口统计等netstat -a                 # 显示所有连接
netstat -t                 # 显示TCP连接
netstat -u                 # 显示UDP连接
netstat -l                 # 显示监听中的端口
netstat -p                 # 显示进程ID和名称
netstat -tuln              # 显示所有监听端口,不解析名称
• ss:显示套接字统计信息(netstat的替代品)ss -tuln                   # 显示所有监听端口
ss -t                      # 显示TCP连接
ss -u                      # 显示UDP连接
ss -a                      # 显示所有套接字
ss -p                      # 显示使用套接字的进程
• nmap:网络探测和安全审核工具sudo dnf install nmap      # 安装nmap
nmap localhost             # 扫描本地主机
nmap -p 1-100 localhost    # 扫描1到100端口
nmap -sS localhost         # 执行SYN扫描
nmap -O localhost          # 检测操作系统

netstat:显示网络连接、路由表、接口统计等
  1. netstat -a                 # 显示所有连接
  2. netstat -t                 # 显示TCP连接
  3. netstat -u                 # 显示UDP连接
  4. netstat -l                 # 显示监听中的端口
  5. netstat -p                 # 显示进程ID和名称
  6. netstat -tuln              # 显示所有监听端口,不解析名称
复制代码

ss:显示套接字统计信息(netstat的替代品)
  1. ss -tuln                   # 显示所有监听端口
  2. ss -t                      # 显示TCP连接
  3. ss -u                      # 显示UDP连接
  4. ss -a                      # 显示所有套接字
  5. ss -p                      # 显示使用套接字的进程
复制代码

nmap:网络探测和安全审核工具
  1. sudo dnf install nmap      # 安装nmap
  2. nmap localhost             # 扫描本地主机
  3. nmap -p 1-100 localhost    # 扫描1到100端口
  4. nmap -sS localhost         # 执行SYN扫描
  5. nmap -O localhost          # 检测操作系统
复制代码

网络配置文件

在Fedora中,网络配置通常使用NetworkManager管理:

• 查看网络连接:nmcli connection show       # 显示所有网络连接
nmcli connection show "连接名称"  # 显示特定连接的详细信息
• 配置网络连接:nmcli connection add type ethernet ifname eth0 con-name "MyConnection"  # 添加新连接
nmcli connection modify "MyConnection" ipv4.addresses 192.168.1.100/24  # 修改IP地址
nmcli connection modify "MyConnection" ipv4.gateway 192.168.1.1  # 修改网关
nmcli connection modify "MyConnection" ipv4.dns "8.8.8.8 8.8.4.4"  # 修改DNS
nmcli connection up "MyConnection"  # 启用连接
nmcli connection down "MyConnection"  # 禁用连接

查看网络连接:
  1. nmcli connection show       # 显示所有网络连接
  2. nmcli connection show "连接名称"  # 显示特定连接的详细信息
复制代码

配置网络连接:
  1. nmcli connection add type ethernet ifname eth0 con-name "MyConnection"  # 添加新连接
  2. nmcli connection modify "MyConnection" ipv4.addresses 192.168.1.100/24  # 修改IP地址
  3. nmcli connection modify "MyConnection" ipv4.gateway 192.168.1.1  # 修改网关
  4. nmcli connection modify "MyConnection" ipv4.dns "8.8.8.8 8.8.4.4"  # 修改DNS
  5. nmcli connection up "MyConnection"  # 启用连接
  6. nmcli connection down "MyConnection"  # 禁用连接
复制代码

防火墙配置

Fedora使用firewalld作为默认的防火墙管理工具:

• 检查防火墙状态:sudo firewall-cmd --state  # 检查防火墙状态
sudo firewall-cmd --list-all  # 列出所有规则
• 管理防火墙规则:sudo firewall-cmd --add-service=http  # 允许HTTP服务
sudo firewall-cmd --add-port=8080/tcp  # 开放特定端口
sudo firewall-cmd --permanent --add-service=http  # 永久添加规则
sudo firewall-cmd --reload  # 重新加载防火墙规则
sudo firewall-cmd --remove-service=http  # 移除服务

检查防火墙状态:
  1. sudo firewall-cmd --state  # 检查防火墙状态
  2. sudo firewall-cmd --list-all  # 列出所有规则
复制代码

管理防火墙规则:
  1. sudo firewall-cmd --add-service=http  # 允许HTTP服务
  2. sudo firewall-cmd --add-port=8080/tcp  # 开放特定端口
  3. sudo firewall-cmd --permanent --add-service=http  # 永久添加规则
  4. sudo firewall-cmd --reload  # 重新加载防火墙规则
  5. sudo firewall-cmd --remove-service=http  # 移除服务
复制代码

软件包管理

Fedora使用DNF(Dandified YUM)作为其默认的软件包管理器。DNF是一个强大的命令行工具,用于安装、更新和删除软件包。

DNF基础操作

• 安装软件包:sudo dnf install package_name       # 安装软件包
sudo dnf install package1 package2  # 安装多个软件包
sudo dnf localinstall package.rpm   # 从本地文件安装RPM包
• 卸载软件包:sudo dnf remove package_name       # 卸载软件包
sudo dnf autoremove                # 卸载不再需要的依赖包
• 更新软件包:sudo dnf update                    # 更新所有已安装的软件包
sudo dnf update package_name       # 更新特定软件包
sudo dnf check-update              # 检查可用的更新

安装软件包:
  1. sudo dnf install package_name       # 安装软件包
  2. sudo dnf install package1 package2  # 安装多个软件包
  3. sudo dnf localinstall package.rpm   # 从本地文件安装RPM包
复制代码

卸载软件包:
  1. sudo dnf remove package_name       # 卸载软件包
  2. sudo dnf autoremove                # 卸载不再需要的依赖包
复制代码

更新软件包:
  1. sudo dnf update                    # 更新所有已安装的软件包
  2. sudo dnf update package_name       # 更新特定软件包
  3. sudo dnf check-update              # 检查可用的更新
复制代码

搜索和查询

• 搜索软件包:dnf search keyword                 # 搜索包含关键字的软件包
dnf provides /path/to/file         # 查找提供特定文件的软件包
• 查询软件包信息:dnf info package_name              # 显示软件包的详细信息
dnf list installed                 # 列出所有已安装的软件包
dnf list available                 # 列出所有可用的软件包
dnf list updates                   # 列出所有可用的更新

搜索软件包:
  1. dnf search keyword                 # 搜索包含关键字的软件包
  2. dnf provides /path/to/file         # 查找提供特定文件的软件包
复制代码

查询软件包信息:
  1. dnf info package_name              # 显示软件包的详细信息
  2. dnf list installed                 # 列出所有已安装的软件包
  3. dnf list available                 # 列出所有可用的软件包
  4. dnf list updates                   # 列出所有可用的更新
复制代码

仓库管理

• 列出和启用仓库:dnf repolist                      # 列出所有启用的仓库
dnf repolist all                  # 列出所有仓库(包括禁用的)
sudo dnf config-manager --set-enabled repository  # 启用仓库
sudo dnf config-manager --set-disabled repository  # 禁用仓库
• 添加新仓库:sudo dnf config-manager --add-repo http://example.com/repo.repo  # 添加新仓库

列出和启用仓库:
  1. dnf repolist                      # 列出所有启用的仓库
  2. dnf repolist all                  # 列出所有仓库(包括禁用的)
  3. sudo dnf config-manager --set-enabled repository  # 启用仓库
  4. sudo dnf config-manager --set-disabled repository  # 禁用仓库
复制代码

添加新仓库:
  1. sudo dnf config-manager --add-repo http://example.com/repo.repo  # 添加新仓库
复制代码

历史记录和回滚

• 查看DNF历史记录:dnf history                      # 显示DNF操作历史
dnf history info ID              # 显示特定操作的详细信息
dnf history list ID              # 显示特定操作影响的软件包
• 回滚操作:sudo dnf history undo ID         # 撤销特定操作
sudo dnf history redo ID         # 重做特定操作

查看DNF历史记录:
  1. dnf history                      # 显示DNF操作历史
  2. dnf history info ID              # 显示特定操作的详细信息
  3. dnf history list ID              # 显示特定操作影响的软件包
复制代码

回滚操作:
  1. sudo dnf history undo ID         # 撤销特定操作
  2. sudo dnf history redo ID         # 重做特定操作
复制代码

清理和缓存管理

• 清理DNF缓存:sudo dnf clean all               # 清理所有缓存
sudo dnf clean packages          # 清理已下载的软件包
sudo dnf clean metadata          # 清理元数据
  1. sudo dnf clean all               # 清理所有缓存
  2. sudo dnf clean packages          # 清理已下载的软件包
  3. sudo dnf clean metadata          # 清理元数据
复制代码

RPM命令

虽然DNF是Fedora的推荐软件包管理器,但有时您可能需要直接使用RPM命令:

• 安装RPM包:sudo rpm -i package.rpm          # 安装RPM包
sudo rpm -ivh package.rpm        # 安装RPM包并显示进度
• 查询RPM包:rpm -q package_name              # 查询软件包是否安装
rpm -qa                          # 列出所有已安装的RPM包
rpm -ql package_name             # 列出软件包安装的所有文件
rpm -qi package_name             # 显示软件包的详细信息
rpm -qf /path/to/file            # 查找文件属于哪个软件包
• 验证RPM包:rpm -V package_name              # 验证软件包的文件
rpm -Va                          # 验证所有已安装的软件包

安装RPM包:
  1. sudo rpm -i package.rpm          # 安装RPM包
  2. sudo rpm -ivh package.rpm        # 安装RPM包并显示进度
复制代码

查询RPM包:
  1. rpm -q package_name              # 查询软件包是否安装
  2. rpm -qa                          # 列出所有已安装的RPM包
  3. rpm -ql package_name             # 列出软件包安装的所有文件
  4. rpm -qi package_name             # 显示软件包的详细信息
  5. rpm -qf /path/to/file            # 查找文件属于哪个软件包
复制代码

验证RPM包:
  1. rpm -V package_name              # 验证软件包的文件
  2. rpm -Va                          # 验证所有已安装的软件包
复制代码

第三方软件仓库

Fedora允许您添加第三方软件仓库以获取更多软件:

• RPM Fusion:提供多媒体软件和驱动程序sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
  1. Flatpak:通用软件包管理系统sudo dnf install flatpak         # 安装Flatpak
  2. flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo  # 添加Flathub仓库
  3. flatpak install flathub app_name # 安装Flatpak应用
复制代码
• Snap:另一个通用软件包管理系统sudo dnf install snapd           # 安装Snap
sudo ln -s /var/lib/snapd/snap /snap  # 创建符号链接
snap install app_name            # 安装Snap应用

RPM Fusion:提供多媒体软件和驱动程序
  1. sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
复制代码

Flatpak:通用软件包管理系统
  1. sudo dnf install flatpak         # 安装Flatpak
  2. flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo  # 添加Flathub仓库
  3. flatpak install flathub app_name # 安装Flatpak应用
复制代码

Snap:另一个通用软件包管理系统
  1. sudo dnf install snapd           # 安装Snap
  2. sudo ln -s /var/lib/snapd/snap /snap  # 创建符号链接
  3. snap install app_name            # 安装Snap应用
复制代码

Shell脚本编程入门

Shell脚本是一种强大的工具,可以自动化任务、处理文本和执行系统管理任务。在Fedora中,默认的Shell是Bash,因此我们将重点介绍Bash脚本编程。

创建和执行Shell脚本

• 创建Shell脚本:nano myscript.sh                # 使用文本编辑器创建脚本文件
  1. nano myscript.sh                # 使用文本编辑器创建脚本文件
复制代码

在文件中输入以下内容:
  1. #!/bin/bash
  2.   # 这是一个简单的Shell脚本
  3.   echo "Hello, World!"
复制代码

• 使脚本可执行:chmod +x myscript.sh            # 添加执行权限
• 执行脚本:./myscript.sh                   # 执行脚本
bash myscript.sh                # 使用bash解释器执行脚本

使脚本可执行:
  1. chmod +x myscript.sh            # 添加执行权限
复制代码

执行脚本:
  1. ./myscript.sh                   # 执行脚本
  2. bash myscript.sh                # 使用bash解释器执行脚本
复制代码

变量和参数

  1. 变量定义和使用:#!/bin/bash
  2. name="John Doe"
  3. age=30
  4. echo "Name: $name"
  5. echo "Age: $age"
  6. echo "Name: ${name}"
复制代码
  1. 特殊变量:#!/bin/bash
  2. echo "Script name: $0"          # 脚本名称
  3. echo "First parameter: $1"      # 第一个参数
  4. echo "Second parameter: $2"     # 第二个参数
  5. echo "All parameters: $@"       # 所有参数
  6. echo "Number of parameters: $#" # 参数数量
  7. echo "Process ID: $$"           # 当前进程ID
复制代码
  1. 命令行参数处理:#!/bin/bash
  2. while getopts ":a:b:" opt; do
  3. case $opt in
  4.   a) arg_a="$OPTARG"
  5.      echo "Option -a with value: $arg_a"
  6.      ;;
  7.   b) arg_b="$OPTARG"
  8.      echo "Option -b with value: $arg_b"
  9.      ;;
  10.   \?) echo "Invalid option: -$OPTARG" >&2
  11.      exit 1
  12.      ;;
  13.   :) echo "Option -$OPTARG requires an argument." >&2
  14.      exit 1
  15.      ;;
  16. esac
  17. done
复制代码

变量定义和使用:
  1. #!/bin/bash
  2. name="John Doe"
  3. age=30
  4. echo "Name: $name"
  5. echo "Age: $age"
  6. echo "Name: ${name}"
复制代码

特殊变量:
  1. #!/bin/bash
  2. echo "Script name: $0"          # 脚本名称
  3. echo "First parameter: $1"      # 第一个参数
  4. echo "Second parameter: $2"     # 第二个参数
  5. echo "All parameters: $@"       # 所有参数
  6. echo "Number of parameters: $#" # 参数数量
  7. echo "Process ID: $$"           # 当前进程ID
复制代码

命令行参数处理:
  1. #!/bin/bash
  2. while getopts ":a:b:" opt; do
  3. case $opt in
  4.   a) arg_a="$OPTARG"
  5.      echo "Option -a with value: $arg_a"
  6.      ;;
  7.   b) arg_b="$OPTARG"
  8.      echo "Option -b with value: $arg_b"
  9.      ;;
  10.   \?) echo "Invalid option: -$OPTARG" >&2
  11.      exit 1
  12.      ;;
  13.   :) echo "Option -$OPTARG requires an argument." >&2
  14.      exit 1
  15.      ;;
  16. esac
  17. done
复制代码

条件语句

  1. if语句:#!/bin/bash
  2. age=20
  3. if [ $age -ge 18 ]; then
  4. echo "You are an adult."
  5. else
  6. echo "You are a minor."
  7. fi
复制代码
  1. 多条件判断:#!/bin/bash
  2. grade=85
  3. if [ $grade -ge 90 ]; then
  4. echo "A"
  5. elif [ $grade -ge 80 ]; then
  6. echo "B"
  7. elif [ $grade -ge 70 ]; then
  8. echo "C"
  9. else
  10. echo "D or F"
  11. fi
复制代码
  1. 文件测试:#!/bin/bash
  2. filename="test.txt"
  3. if [ -f "$filename" ]; then
  4. echo "$filename is a regular file."
  5. elif [ -d "$filename" ]; then
  6. echo "$filename is a directory."
  7. else
  8. echo "$filename does not exist or is not a regular file or directory."
  9. fi
复制代码

if语句:
  1. #!/bin/bash
  2. age=20
  3. if [ $age -ge 18 ]; then
  4. echo "You are an adult."
  5. else
  6. echo "You are a minor."
  7. fi
复制代码

多条件判断:
  1. #!/bin/bash
  2. grade=85
  3. if [ $grade -ge 90 ]; then
  4. echo "A"
  5. elif [ $grade -ge 80 ]; then
  6. echo "B"
  7. elif [ $grade -ge 70 ]; then
  8. echo "C"
  9. else
  10. echo "D or F"
  11. fi
复制代码

文件测试:
  1. #!/bin/bash
  2. filename="test.txt"
  3. if [ -f "$filename" ]; then
  4. echo "$filename is a regular file."
  5. elif [ -d "$filename" ]; then
  6. echo "$filename is a directory."
  7. else
  8. echo "$filename does not exist or is not a regular file or directory."
  9. fi
复制代码

常用的文件测试操作符:

• -f:文件存在且是普通文件
• -d:文件存在且是目录
• -e:文件存在
• -r:文件可读
• -w:文件可写
• -x:文件可执行
• -s:文件大小不为零

循环

  1. for循环:
  2. “`bash
  3. #!/bin/bash
  4. for i in 1 2 3 4 5; do
  5. echo “Number: $i”
  6. done
复制代码

# 使用序列
  for i in {1..5}; do
  1. echo "Number: $i"
复制代码

done

# 遍历文件
  for file in *.txt; do
  1. echo "Processing $file"
复制代码

done
  1. - while循环:
  2.   ```bash
  3.   #!/bin/bash
  4.   count=1
  5.   while [ $count -le 5 ]; do
  6.     echo "Count: $count"
  7.     count=$((count + 1))
  8.   done
  9.   
  10.   # 读取文件行
  11.   while IFS= read -r line; do
  12.     echo "Line: $line"
  13.   done < input.txt
复制代码

  1. until循环:#!/bin/bash
  2. count=1
  3. until [ $count -gt 5 ]; do
  4. echo "Count: $count"
  5. count=$((count + 1))
  6. done
复制代码
  1. #!/bin/bash
  2. count=1
  3. until [ $count -gt 5 ]; do
  4. echo "Count: $count"
  5. count=$((count + 1))
  6. done
复制代码

函数

  1. 定义和调用函数:
  2. “`bash
  3. #!/bin/bash
  4. greet() {
  5. echo “Hello, $1!”
  6. }
复制代码

greet “John”  # 调用函数并传递参数
  1. - 返回值:
  2.   ```bash
  3.   #!/bin/bash
  4.   add() {
  5.     local result=$((1 + $2))
  6.     echo $result
  7.   }
  8.   
  9.   sum=$(add 5 3)
  10.   echo "Sum: $sum"
复制代码

  1. 函数参数:
  2. “`bash
  3. #!/bin/bash
  4. print_params() {
  5. echo “First parameter:\(1"
  6. echo "Second parameter: \)2”
  7. echo “All parameters:\(@"
  8. echo "Number of parameters: \)#”
  9. }
复制代码

print_params “apple” “banana” “cherry”
  1. ### 输入和输出
  2. - 读取用户输入:
  3.   ```bash
  4.   #!/bin/bash
  5.   echo "Enter your name:"
  6.   read name
  7.   echo "Hello, $name!"
  8.   
  9.   # 带提示的读取
  10.   read -p "Enter your age: " age
  11.   echo "You are $age years old."
复制代码

• 重定向:
“`bash
#!/bin/bash输出重定向到文件echo “This will be written to a file.” > output.txt

重定向:
“`bash
#!/bin/bash

echo “This will be written to a file.” > output.txt

# 追加到文件
  echo “This will be appended to the file.” >> output.txt

# 输入重定向
  while IFS= read -r line; do
  1. echo "Read: $line"
复制代码

done < input.txt
  1. - 管道:
  2.   ```bash
  3.   #!/bin/bash
  4.   # 将一个命令的输出作为另一个命令的输入
  5.   cat file.txt | grep "pattern"
  6.   
  7.   # 在脚本中使用管道
  8.   ls -l | grep "^d"  # 列出所有目录
复制代码

错误处理

  1. 退出状态:#!/bin/bash
  2. ls /nonexistent
  3. if [ $? -ne 0 ]; then
  4. echo "Command failed."
  5. exit 1
  6. fi
复制代码
  1. 错误处理函数:
  2. “`bash
  3. #!/bin/bash
  4. error_exit() {
  5. echo “\(1" >&2
  6. exit "\){2:-1}”
  7. }
复制代码

退出状态:
  1. #!/bin/bash
  2. ls /nonexistent
  3. if [ $? -ne 0 ]; then
  4. echo "Command failed."
  5. exit 1
  6. fi
复制代码

错误处理函数:
“`bash
#!/bin/bash
error_exit() {
echo “\(1" >&2
exit "\){2:-1}”
}

[ -f required_file.txt ] || error_exit “required_file.txt not found.”
  1. - 陷阱(Trap):
  2.   ```bash
  3.   #!/bin/bash
  4.   cleanup() {
  5.     echo "Cleaning up..."
  6.     rm -f temp_file.txt
  7.   }
  8.   
  9.   trap cleanup EXIT  # 在脚本退出时执行cleanup函数
  10.   
  11.   echo "Creating temporary file..."
  12.   echo "This is a temporary file." > temp_file.txt
  13.   echo "Script continues..."
复制代码

高级命令行技巧

命令组合和管道

• 基本管道:command1 | command2  # 将command1的输出作为command2的输入
  1. 复杂管道示例:
  2. “`bash查找最大的10个文件find . -type f -exec du -h {} + | sort -rh | head -n 10
复制代码

基本管道:
  1. command1 | command2  # 将command1的输出作为command2的输入
复制代码

复杂管道示例:
“`bash

find . -type f -exec du -h {} + | sort -rh | head -n 10

# 查找最常用的命令
  history | awk ‘{print $2}’ | sort | uniq -c | sort -nr | head -n 10
  1. - 重定向组合:
  2.   ```bash
  3.   # 将标准输出和错误都重定向到文件
  4.   command > output.txt 2>&1
  5.   
  6.   # 将标准输出重定向到一个文件,错误重定向到另一个文件
  7.   command > output.txt 2> error.txt
  8.   
  9.   # 丢弃所有输出
  10.   command > /dev/null 2>&1
复制代码

命令替换

  1. 基本命令替换:
  2. “`bash使用反引号(传统方式)current_dir=pwdecho “Current directory: $current_dir”
复制代码

基本命令替换:
“`bash

current_dir=pwdecho “Current directory: $current_dir”

# 使用\(()(推荐方式)
  current_dir=\)(pwd)
  echo “Current directory: $current_dir”
  1. - 命令替换示例:
  2.   ```bash
  3.   # 创建基于当前日期的备份文件
  4.   cp important_file.txt important_file_$(date +%Y%m%d).bak
  5.   
  6.   # 在目录中查找并处理文件
  7.   for file in $(find . -name "*.txt"); do
  8.     echo "Processing $file"
  9.   done
复制代码

进程替换

  1. 基本进程替换:
  2. “`bash将命令的输出作为临时文件传递给另一个命令diff <(command1) <(command2)
复制代码

基本进程替换:
“`bash

diff <(command1) <(command2)

# 示例:比较两个目录的内容
  diff <(ls dir1) <(ls dir2)
  1. - 进程替换示例:
  2.   ```bash
  3.   # 同时查看日志的开头和结尾
  4.   cat <(head -n 20 logfile.txt) <(tail -n 20 logfile.txt)
  5.   
  6.   # 合并多个排序的文件
  7.   sort -m <(sort file1.txt) <(sort file2.txt) <(sort file3.txt)
复制代码

数组和关联数组

  1. 普通数组:
  2. “`bash声明数组fruits=(“apple” “banana” “cherry”)
复制代码

普通数组:
“`bash

fruits=(“apple” “banana” “cherry”)

# 访问数组元素
  echo\({fruits[0]}     # 输出: apple
  echo \){fruits[1]}     # 输出: banana
  echo\({fruits[@]}     # 输出所有元素
  echo \){#fruits[@]}    # 输出数组长度

# 遍历数组
  for fruit in “${fruits[@]}”; do
  1. echo "Fruit: $fruit"
复制代码

done
  1. - 关联数组(Bash 4.0+):
  2.   ```bash
  3.   # 声明关联数组
  4.   declare -A user_info
  5.   
  6.   # 添加元素
  7.   user_info["name"]="John Doe"
  8.   user_info["age"]=30
  9.   user_info["email"]="john@example.com"
  10.   
  11.   # 访问元素
  12.   echo ${user_info["name"]}  # 输出: John Doe
  13.   
  14.   # 遍历关联数组
  15.   for key in "${!user_info[@]}"; do
  16.     echo "$key: ${user_info[$key]}"
  17.   done
复制代码

字符串操作

• 基本字符串操作:
“`bash
string=“Hello, World!”

# 获取字符串长度
  echo ${#string}  # 输出: 13

# 子字符串提取
  echo\({string:0:5}  # 输出: Hello
  echo \){string:7}    # 输出: World!

# 字符串替换
  echo ${string/World/Linux}  # 输出: Hello, Linux!
  1. - 高级字符串操作:
  2.   ```bash
  3.   filename="document.txt"
  4.   
  5.   # 去除前缀和后缀
  6.   echo ${filename#*.}  # 输出: txt (去除最短匹配的前缀)
  7.   echo ${filename##*.} # 输出: txt (去除最长匹配的前缀)
  8.   echo ${filename%.*}  # 输出: document (去除最短匹配的后缀)
  9.   echo ${filename%%.*} # 输出: document (去除最长匹配的后缀)
  10.   
  11.   # 字符串大小写转换
  12.   echo ${string^^}     # 转换为大写
  13.   echo ${string,,}     # 转换为小写
复制代码

高级文本处理

  1. 使用awk进行复杂文本处理:
  2. “`bash计算文件中每列的总和awk ‘{for(i=1;i<=NF;i++) sum[i]+=$i} END {for(i=1;i<=NF;i++) print “Column ” i “ sum: ” sum[i]}’ file.txt
复制代码

使用awk进行复杂文本处理:
“`bash

awk ‘{for(i=1;i<=NF;i++) sum+=$i} END {for(i=1;i<=NF;i++) print “Column ” i “ sum: ” sum}’ file.txt

# 提取特定列并计算平均值
  awk ‘{sum+=$2; count++} END {print “Average: ” sum/count}’ file.txt

# 使用多个分隔符
  awk -F[:,] ‘{print\(1, \)3}’ file.txt
  1. - 使用sed进行高级文本编辑:
  2.   ```bash
  3.   # 在文件中插入行
  4.   sed '3i\This is a new line' file.txt
  5.   
  6.   # 在文件中追加行
  7.   sed '3a\This is an appended line' file.txt
  8.   
  9.   # 使用正则表达式进行复杂替换
  10.   sed 's/\([0-9]\{3\}\)\([0-9]\{3\}\)\([0-9]\{4\}\)/(\1) \2-\3/g' phone_numbers.txt
  11.   
  12.   # 多行操作
  13.   sed '/start/,/end/d' file.txt  # 删除从start到end的所有行
复制代码

并行处理

• 使用xargs进行并行处理:
“`bash基本用法find . -name “*.jpg” | xargs -P 4 convert -resize 800x600

使用xargs进行并行处理:
“`bash

find . -name “*.jpg” | xargs -P 4 convert -resize 800x600

# 使用占位符
  find . -name “*.jpg” | xargs -I {} -P 4 convert {} -resize 800x600 resized_{}
  1. - 使用GNU parallel进行高级并行处理:
  2.   ```bash
  3.   # 安装GNU parallel
  4.   sudo dnf install parallel
  5.   
  6.   # 基本用法
  7.   find . -name "*.jpg" | parallel -j 4 convert {} -resize 800x600 resized_{/}
  8.   
  9.   # 使用参数块
  10.   parallel -j 4 echo "Processing {}" ::: file1 file2 file3 file4
复制代码

命令行效率技巧

• 使用别名(alias):
“`bash创建别名alias ll=‘ls -alF’
alias grep=‘grep –color=auto’
alias ..=‘cd ..’

使用别名(alias):
“`bash

alias ll=‘ls -alF’
alias grep=‘grep –color=auto’
alias ..=‘cd ..’

# 使别名永久生效,添加到~/.bashrc
  echo “alias ll=‘ls -alF’” >> ~/.bashrc
  source ~/.bashrc
  1. - 使用函数:
  2.   ```bash
  3.   # 创建函数
  4.   mkcd() {
  5.     mkdir -p "$1"
  6.     cd "$1"
  7.   }
  8.   
  9.   # 使函数永久生效,添加到~/.bashrc
  10.   echo "mkcd() { mkdir -p "$1"; cd "$1"; }" >> ~/.bashrc
  11.   source ~/.bashrc
复制代码

• 使用快捷键:Ctrl+A    # 移动到行首
Ctrl+E    # 移动到行尾
Ctrl+L    # 清屏
Ctrl+R    # 搜索命令历史
Ctrl+C    # 中断当前命令
Ctrl+D    # 退出当前shell
Ctrl+Z    # 暂停当前命令
Ctrl+K    # 删除从光标到行尾的内容
Ctrl+U    # 删除从光标到行首的内容
Ctrl+W    # 删除光标前的一个单词
Ctrl+Y    # 粘贴删除的内容
• 使用历史扩展:!!        # 执行上一条命令
!n        # 执行历史记录中的第n条命令
!-n       # 执行倒数第n条命令
!string   # 执行最近以string开头的命令
!$        # 上一条命令的最后一个参数
!*        # 上一条命令的所有参数(除了命令本身)
^string1^string2  # 将上一条命令中的string1替换为string2并执行

使用快捷键:
  1. Ctrl+A    # 移动到行首
  2. Ctrl+E    # 移动到行尾
  3. Ctrl+L    # 清屏
  4. Ctrl+R    # 搜索命令历史
  5. Ctrl+C    # 中断当前命令
  6. Ctrl+D    # 退出当前shell
  7. Ctrl+Z    # 暂停当前命令
  8. Ctrl+K    # 删除从光标到行尾的内容
  9. Ctrl+U    # 删除从光标到行首的内容
  10. Ctrl+W    # 删除光标前的一个单词
  11. Ctrl+Y    # 粘贴删除的内容
复制代码

使用历史扩展:
  1. !!        # 执行上一条命令
  2. !n        # 执行历史记录中的第n条命令
  3. !-n       # 执行倒数第n条命令
  4. !string   # 执行最近以string开头的命令
  5. !$        # 上一条命令的最后一个参数
  6. !*        # 上一条命令的所有参数(除了命令本身)
  7. ^string1^string2  # 将上一条命令中的string1替换为string2并执行
复制代码

实用案例分析

系统维护和监控

• 磁盘空间分析:
“`bash查找占用空间最大的目录du -h –max-depth=1 / | sort -rh | head -n 10

磁盘空间分析:
“`bash

du -h –max-depth=1 / | sort -rh | head -n 10

# 查找大文件
  find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -rh | head -n 10

# 查找重复文件
  find /path/to/directory -type f -exec md5sum {} + | sort | uniq -d -w 32
  1. - 系统资源监控:
  2.   ```bash
  3.   # 监控CPU使用率
  4.   top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4"%"}'
  5.   
  6.   # 监控内存使用情况
  7.   free -m | awk 'NR==2{printf "%.2f%%\n", $3*100/$2}'
  8.   
  9.   # 监控磁盘I/O
  10.   iostat -x 1 5
  11.   
  12.   # 监控网络连接
  13.   netstat -an | grep ESTABLISHED | wc -l
复制代码

  1. 日志分析:
  2. “`bash查找最频繁的IP访问grep “GET” /var/log/httpd/access_log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -n 10
复制代码

日志分析:
“`bash

grep “GET” /var/log/httpd/access_log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -n 10

# 查找HTTP错误
  grep “ 5[0-9][0-9] ” /var/log/httpd/error_log | awk ‘{print $8}’ | sort | uniq -c | sort -nr

# 查找最近的SSH登录尝试
  journalctl _SYSTEMD_UNIT=ssh.service –since today | grep “Failed password” | awk ‘{print $(NF-3)}’ | sort | uniq -c | sort -nr
  1. ### 文件管理和处理
  2. - 批量重命名文件:
  3.   ```bash
  4.   # 将所有.txt文件重命名为.md文件
  5.   for file in *.txt; do
  6.     mv "$file" "${file%.txt}.md"
  7.   done
  8.   
  9.   # 使用rename命令(需要安装)
  10.   sudo dnf install prename
  11.   rename 's/\.txt$/.md/' *.txt
复制代码

  1. 批量处理图像:
  2. “`bash调整图像大小for img in *.jpg; do
  3. convert “\(img" -resize 800x600 "resized_\)img”
  4. done
复制代码

批量处理图像:
“`bash

for img in *.jpg; do
convert “\(img" -resize 800x600 "resized_\)img”
done

# 批量转换图像格式
  for img in *.png; do
  1. convert "$img" "${img%.png}.jpg"
复制代码

done
  1. - 批量处理文本文件:
  2.   ```bash
  3.   # 在多个文件中查找并替换文本
  4.   for file in *.txt; do
  5.     sed -i 's/old_text/new_text/g' "$file"
  6.   done
  7.   
  8.   # 合并多个文本文件
  9.   cat *.txt > combined.txt
  10.   
  11.   # 提取特定列并合并
  12.   for file in *.csv; do
  13.     cut -d, -f1,3 "$file" > "temp_$file"
  14.   done
  15.   cat temp_*.csv > combined.csv
  16.   rm temp_*.csv
复制代码

网络管理

• 网络故障排除:
“`bash检查网络连接ping -c 4 8.8.8.8

网络故障排除:
“`bash

ping -c 4 8.8.8.8

# 跟踪路由
  traceroute 8.8.8.8

# 检查DNS解析
  nslookup example.com

# 检查端口是否开放
  nc -zv example.com 80

# 检查本地监听端口
  ss -tuln
  1. - 网络流量监控:
  2.   ```bash
  3.   # 安装iftop
  4.   sudo dnf install iftop
  5.   
  6.   # 监控网络流量
  7.   sudo iftop -i eth0
  8.   
  9.   # 使用nethogs监控进程网络使用
  10.   sudo dnf install nethogs
  11.   sudo nethogs
复制代码

• 网络安全检查:
“`bash扫描开放端口sudo nmap -sS -O 192.168.1.1

网络安全检查:
“`bash

sudo nmap -sS -O 192.168.1.1

# 检查异常网络连接
  netstat -an | grep ESTABLISHED | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr

# 监控网络连接变化
  watch -n 1 “netstat -an | grep ESTABLISHED | wc -l”
  1. ### 数据备份和恢复
  2. - 创建备份脚本:
  3.   ```bash
  4.   #!/bin/bash
  5.   # backup.sh
  6.   
  7.   SOURCE_DIR="/home/user/documents"
  8.   BACKUP_DIR="/backup"
  9.   DATE=$(date +%Y%m%d_%H%M%S)
  10.   BACKUP_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
  11.   
  12.   # 创建备份目录(如果不存在)
  13.   mkdir -p "$BACKUP_DIR"
  14.   
  15.   # 创建备份
  16.   tar -czf "$BACKUP_FILE" "$SOURCE_DIR"
  17.   
  18.   # 检查备份是否成功
  19.   if [ $? -eq 0 ]; then
  20.     echo "Backup created successfully: $BACKUP_FILE"
  21.   else
  22.     echo "Backup failed!"
  23.     exit 1
  24.   fi
  25.   
  26.   # 保留最近7天的备份,删除旧的备份
  27.   find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
复制代码

• 自动化备份:
“`bash编辑crontabcrontab -e

自动化备份:
“`bash

crontab -e

# 添加以下行以每天凌晨2点运行备份脚本
  0 2 * * * /path/to/backup.sh
  1. - 远程备份:
  2.   ```bash
  3.   # 使用rsync进行远程备份
  4.   rsync -avz -e ssh /local/directory/ user@remote:/remote/directory/
  5.   
  6.   # 使用scp进行远程备份
  7.   scp -r /local/directory user@remote:/remote/directory
复制代码

系统性能优化

• 系统启动时间分析:
“`bash查看系统启动时间systemd-analyze

系统启动时间分析:
“`bash

systemd-analyze

# 查看启动过程中各个服务的耗时
  systemd-analyze blame

# 生成启动时间图表
  systemd-analyze plot > boot_plot.svg
  1. - 优化系统服务:
  2.   ```bash
  3.   # 列出所有启用的服务
  4.   systemctl list-unit-files --state=enabled
  5.   
  6.   # 禁用不必要的服务
  7.   sudo systemctl disable servicename
  8.   
  9.   # 掩码服务(防止被其他服务启动)
  10.   sudo systemctl mask servicename
复制代码

• 优化系统内核参数:
“`bash查看当前内核参数sysctl -a

优化系统内核参数:
“`bash

sysctl -a

# 临时修改内核参数
  sudo sysctl -w vm.swappiness=10

# 永久修改内核参数
  echo “vm.swappiness=10” | sudo tee -a /etc/sysctl.conf
  sudo sysctl -p
  “`

总结与资源推荐

总结

本指南全面介绍了Fedora系统命令行的使用,从基础命令到高级技巧,涵盖了文件管理、文本处理、系统管理、网络配置、软件包管理、Shell脚本编程等多个方面。通过掌握这些命令和技巧,您可以大大提高工作效率,更好地管理和维护Fedora系统。

命令行是Linux系统中最强大和灵活的工具之一。虽然学习曲线可能较陡峭,但一旦掌握,您将能够以图形界面无法比拟的方式控制和自动化系统任务。继续实践和探索,您将发现命令行的无限可能。

进一步学习的资源

1. 官方文档:Fedora DocumentationBash Reference Manual
2. Fedora Documentation
3. Bash Reference Manual
4. 在线教程和网站:The Linux Documentation ProjectLinux JourneyExplain Shell- 解释命令行命令
5. The Linux Documentation Project
6. Linux Journey
7. Explain Shell- 解释命令行命令
8. 书籍推荐:“The Linux Command Line” by William Shotts“How Linux Works” by Brian Ward“Shell Scripting: Expert Recipes for Linux, Bash and more” by Jason Cannon
9. “The Linux Command Line” by William Shotts
10. “How Linux Works” by Brian Ward
11. “Shell Scripting: Expert Recipes for Linux, Bash and more” by Jason Cannon
12. 实践平台:OverTheWire- 提供命令行安全游戏Linux Academy- 提供Linux课程和实验环境
13. OverTheWire- 提供命令行安全游戏
14. Linux Academy- 提供Linux课程和实验环境
15. 社区和论坛:Fedora ForumStack Exchange Unix & LinuxReddit r/linux4noobs
16. Fedora Forum
17. Stack Exchange Unix & Linux
18. Reddit r/linux4noobs

官方文档:

• Fedora Documentation
• Bash Reference Manual

在线教程和网站:

• The Linux Documentation Project
• Linux Journey
• Explain Shell- 解释命令行命令

书籍推荐:

• “The Linux Command Line” by William Shotts
• “How Linux Works” by Brian Ward
• “Shell Scripting: Expert Recipes for Linux, Bash and more” by Jason Cannon

实践平台:

• OverTheWire- 提供命令行安全游戏
• Linux Academy- 提供Linux课程和实验环境

社区和论坛:

• Fedora Forum
• Stack Exchange Unix & Linux
• Reddit r/linux4noobs

终极建议

1. 持续实践:命令行技能需要通过不断实践来提高。尝试在日常工作中使用命令行替代图形界面操作。
2. 创建个人知识库:记录您学到的命令和技巧,创建自己的速查表和脚本库。
3. 学习脚本编程:掌握Shell脚本编程可以大大提高工作效率,实现复杂任务的自动化。
4. 探索其他工具:除了Bash,还可以探索Zsh、Fish等现代Shell,以及Tmux、Screen等终端复用工具。
5. 参与社区:加入Fedora和Linux社区,与其他用户交流经验和技巧。

持续实践:命令行技能需要通过不断实践来提高。尝试在日常工作中使用命令行替代图形界面操作。

创建个人知识库:记录您学到的命令和技巧,创建自己的速查表和脚本库。

学习脚本编程:掌握Shell脚本编程可以大大提高工作效率,实现复杂任务的自动化。

探索其他工具:除了Bash,还可以探索Zsh、Fish等现代Shell,以及Tmux、Screen等终端复用工具。

参与社区:加入Fedora和Linux社区,与其他用户交流经验和技巧。

通过本指南的学习和实践,您已经迈出了成为Fedora命令行专家的重要一步。继续探索和学习,您将发现命令行的强大之处,并能够更高效地管理和使用您的Fedora系统。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Discord频道

加入Discord频道

加入QQ社群

加入QQ社群

联系我们|小黑屋|TG频道|RSS |网站地图

Powered by Pixtech

© 2025-2026 Pixtech Team.