|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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命令的基本语法通常为:
- command [options] [arguments]
复制代码
其中:
• command是要执行的程序或命令的名称
• options(也称为标志或开关)用于修改命令的行为,通常以-(短选项)或--(长选项)开头
• arguments是命令要操作的对象,如文件名、目录名或其他数据
获取帮助
在使用命令行时,了解如何获取帮助非常重要。以下是几种获取命令帮助的方法:
1. man命令:显示命令的手册页man ls
2. --help选项:大多数命令都支持此选项,显示简要的使用说明ls --help
3. info命令:显示更详细的命令信息info ls
4. whatis命令:显示命令的简短描述whatis ls
man命令:显示命令的手册页
--help选项:大多数命令都支持此选项,显示简要的使用说明
info命令:显示更详细的命令信息
whatis命令:显示命令的简短描述
常用基础命令
以下是一些最常用的基础命令:
• 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:显示当前工作目录
cd:更改目录
- cd /var/log # 切换到/var/log目录
- cd .. # 返回上一级目录
- cd ~ # 切换到用户主目录
- cd - # 切换到上一个工作目录
复制代码
ls:列出目录内容
- ls # 列出当前目录的内容
- ls -l # 以长格式列出,显示详细信息
- ls -a # 显示所有文件,包括隐藏文件
- ls -la # 组合选项,显示所有文件的详细信息
- ls -lh # 以人类可读的格式显示文件大小
复制代码
clear:清除终端屏幕
exit:退出当前Shell会话
history:显示命令历史记录
- history # 显示所有历史命令
- history 10 # 显示最近10条命令
- !n # 执行历史记录中的第n条命令
- !! # 执行上一条命令
复制代码
命令自动补全
Bash Shell提供了命令自动补全功能,可以大大提高输入效率:
1. Tab键补全:输入命令或文件名的一部分,然后按Tab键,Shell会自动补全或显示可能的选项。
- # 输入以下内容并按Tab键
- cd Do
- # 可能会自动补全为 cd Documents/
复制代码
1. 命令历史补全:使用Ctrl+R可以搜索命令历史记录。
- # 按Ctrl+R,然后输入要搜索的命令的一部分
- (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:创建新目录
- 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 # 强制递归删除目录及其内容(慎用!)
复制代码
复制和移动文件
• 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:复制文件或目录
- 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/ # 显示移动过程的详细信息
复制代码
查看文件内容
• 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:连接文件并打印到标准输出
- 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 # 实时查看文件的更新(常用于日志文件)
复制代码
查找文件和目录
• 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:在目录树中查找文件
- 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文件
复制代码
注意:locate使用一个数据库,可能不是最新的。您可以使用updatedb命令更新该数据库(需要root权限)。
• which和whereis:查找命令的位置which ls # 显示ls命令的完整路径
whereis ls # 显示ls命令的二进制、源代码和手册页的位置
- which ls # 显示ls命令的完整路径
- whereis ls # 显示ls命令的二进制、源代码和手册页的位置
复制代码
文件权限和所有权
在Linux中,每个文件和目录都有权限设置,控制谁可以读取、写入或执行它们。
• - ls -l:查看文件权限ls -l file.txt
- # 输出示例:-rw-r--r-- 1 user group 1234 Jan 1 12:34 file.txt
- # 权限解释:-(文件类型)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:查看文件权限
- ls -l file.txt
- # 输出示例:-rw-r--r-- 1 user group 1234 Jan 1 12:34 file.txt
- # 权限解释:-(文件类型)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 # 为所有用户设置只读权限
复制代码
权限数字表示法:
• 4 = 读取(r)
• 2 = 写入(w)
• 1 = 执行(x)
• 0 = 无权限
• - chown:更改文件所有者sudo chown user file.txt # 更改文件所有者为user
- sudo chown user:group file.txt # 更改文件所有者和组
- 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:更改文件所有者
- sudo chown user file.txt # 更改文件所有者为user
- sudo chown user:group file.txt # 更改文件所有者和组
- sudo chown -R user directory/ # 递归更改目录及其内容的所有者
复制代码
chgrp:更改文件组
- sudo chgrp group file.txt # 更改文件组为group
- sudo chgrp -R group directory/ # 递归更改目录及其内容的组
复制代码
文本处理技巧
文本编辑器
在命令行中,有几种流行的文本编辑器可供选择:
1. Nano:简单易用的文本编辑器nano file.txt # 在Nano中打开文件
# 在Nano中:
# Ctrl+O:保存文件
# Ctrl+X:退出编辑器
# Ctrl+W:搜索文本
# Ctrl+\:替换文本
2. - Vim:功能强大的模式编辑器vim file.txt # 在Vim中打开文件
- # Vim有两种主要模式:
- # 普通模式:用于导航和命令
- # 插入模式:用于编辑文本
- # 在普通模式下:
- # i:进入插入模式
- # Esc:返回普通模式
- # :w:保存文件
- # :q:退出
- # :wq:保存并退出
- # :q!:不保存退出
复制代码 3. Emacs:可扩展的文本编辑器emacs file.txt # 在Emacs中打开文件
# Emacs使用大量Ctrl和Alt组合键
# Ctrl+X Ctrl+S:保存文件
# Ctrl+X Ctrl+C:退出
Nano:简单易用的文本编辑器
- nano file.txt # 在Nano中打开文件
- # 在Nano中:
- # Ctrl+O:保存文件
- # Ctrl+X:退出编辑器
- # Ctrl+W:搜索文本
- # Ctrl+\:替换文本
复制代码
Vim:功能强大的模式编辑器
- vim file.txt # 在Vim中打开文件
- # Vim有两种主要模式:
- # 普通模式:用于导航和命令
- # 插入模式:用于编辑文本
- # 在普通模式下:
- # i:进入插入模式
- # Esc:返回普通模式
- # :w:保存文件
- # :q:退出
- # :wq:保存并退出
- # :q!:不保存退出
复制代码
Emacs:可扩展的文本编辑器
- emacs file.txt # 在Emacs中打开文件
- # Emacs使用大量Ctrl和Alt组合键
- # Ctrl+X Ctrl+S:保存文件
- # 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 # 删除空行
• - awk:强大的文本处理工具awk '{print $1}' file.txt # 打印每行的第一个字段
- awk -F: '{print $1}' /etc/passwd # 使用冒号作为分隔符,打印第一个字段
- awk 'NR>5' file.txt # 显示第5行之后的内容
- awk '{print NR, $0}' file.txt # 显示行号和内容
- awk '{sum += $1} END {print sum}' file.txt # 计算第一列的总和
复制代码
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 # 删除空行
复制代码
awk:强大的文本处理工具
- awk '{print $1}' file.txt # 打印每行的第一个字段
- awk -F: '{print $1}' /etc/passwd # 使用冒号作为分隔符,打印第一个字段
- awk 'NR>5' file.txt # 显示第5行之后的内容
- awk '{print NR, $0}' file.txt # 显示行号和内容
- 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:对文本行进行排序
- 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/ # 递归比较两个目录
复制代码
文本格式化
• 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:简单的文本格式化工具
- 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 # 将文本格式化为表格形式
复制代码
系统管理
监控系统状态
• 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:动态显示运行中的进程
- 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 # 显示当前目录下各子目录的大小
复制代码
进程管理
• 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:显示当前进程
- 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 & # 将输出重定向到文件
复制代码
系统信息和性能监控
• uname:显示系统信息uname # 显示内核名称
uname -a # 显示所有系统信息
uname -r # 显示内核版本
uname -m # 显示机器硬件架构
• uptime:显示系统运行时间和负载uptime # 显示系统运行时间、用户数和负载平均值
• lscpu:显示CPU信息lscpu # 显示CPU架构、型号、核心数等信息
• lsblk:列出块设备信息lsblk # 列出块设备信息
lsblk -f # 显示文件系统信息
• - lsof:列出打开的文件lsof # 列出所有打开的文件
- lsof -i :80 # 列出使用端口80的进程
- lsof /path/to/file # 列出使用特定文件的进程
复制代码
uname:显示系统信息
- uname # 显示内核名称
- uname -a # 显示所有系统信息
- uname -r # 显示内核版本
- uname -m # 显示机器硬件架构
复制代码
uptime:显示系统运行时间和负载
- uptime # 显示系统运行时间、用户数和负载平均值
复制代码
lscpu:显示CPU信息
- lscpu # 显示CPU架构、型号、核心数等信息
复制代码
lsblk:列出块设备信息
- lsblk # 列出块设备信息
- lsblk -f # 显示文件系统信息
复制代码
lsof:列出打开的文件
- lsof # 列出所有打开的文件
- lsof -i :80 # 列出使用端口80的进程
- 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日志
- 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" # 实时查看日志中的错误
复制代码
网络配置和故障排除
网络接口配置
• 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:显示和操作路由、网络设备、策略路由和隧道
- 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 # 禁用接口
复制代码
网络连接测试
• 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:测试网络连接
- 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
复制代码
网络连接和端口检查
• 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:显示网络连接、路由表、接口统计等
- 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 # 检测操作系统
复制代码
网络配置文件
在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" # 禁用连接
查看网络连接:
- 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" # 禁用连接
复制代码
防火墙配置
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 # 移除服务
检查防火墙状态:
- 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 # 移除服务
复制代码
软件包管理
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 # 检查可用的更新
安装软件包:
- 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 # 检查可用的更新
复制代码
搜索和查询
• 搜索软件包:dnf search keyword # 搜索包含关键字的软件包
dnf provides /path/to/file # 查找提供特定文件的软件包
• 查询软件包信息:dnf info package_name # 显示软件包的详细信息
dnf list installed # 列出所有已安装的软件包
dnf list available # 列出所有可用的软件包
dnf list updates # 列出所有可用的更新
搜索软件包:
- dnf search keyword # 搜索包含关键字的软件包
- dnf provides /path/to/file # 查找提供特定文件的软件包
复制代码
查询软件包信息:
- dnf info package_name # 显示软件包的详细信息
- dnf list installed # 列出所有已安装的软件包
- dnf list available # 列出所有可用的软件包
- 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 # 添加新仓库
列出和启用仓库:
- 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 # 添加新仓库
复制代码
历史记录和回滚
• 查看DNF历史记录:dnf history # 显示DNF操作历史
dnf history info ID # 显示特定操作的详细信息
dnf history list ID # 显示特定操作影响的软件包
• 回滚操作:sudo dnf history undo ID # 撤销特定操作
sudo dnf history redo ID # 重做特定操作
查看DNF历史记录:
- dnf history # 显示DNF操作历史
- dnf history info ID # 显示特定操作的详细信息
- dnf history list ID # 显示特定操作影响的软件包
复制代码
回滚操作:
- sudo dnf history undo ID # 撤销特定操作
- sudo dnf history redo ID # 重做特定操作
复制代码
清理和缓存管理
• 清理DNF缓存:sudo dnf clean all # 清理所有缓存
sudo dnf clean packages # 清理已下载的软件包
sudo dnf clean metadata # 清理元数据
- sudo dnf clean all # 清理所有缓存
- sudo dnf clean packages # 清理已下载的软件包
- 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包:
- 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 # 验证所有已安装的软件包
复制代码
第三方软件仓库
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
• - Flatpak:通用软件包管理系统sudo dnf install flatpak # 安装Flatpak
- flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo # 添加Flathub仓库
- 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:提供多媒体软件和驱动程序
- 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:通用软件包管理系统
- sudo dnf install flatpak # 安装Flatpak
- flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo # 添加Flathub仓库
- 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应用
复制代码
Shell脚本编程入门
Shell脚本是一种强大的工具,可以自动化任务、处理文本和执行系统管理任务。在Fedora中,默认的Shell是Bash,因此我们将重点介绍Bash脚本编程。
创建和执行Shell脚本
• 创建Shell脚本:nano myscript.sh # 使用文本编辑器创建脚本文件
- nano myscript.sh # 使用文本编辑器创建脚本文件
复制代码
在文件中输入以下内容:
- #!/bin/bash
- # 这是一个简单的Shell脚本
- echo "Hello, World!"
复制代码
• 使脚本可执行:chmod +x myscript.sh # 添加执行权限
• 执行脚本:./myscript.sh # 执行脚本
bash myscript.sh # 使用bash解释器执行脚本
使脚本可执行:
- chmod +x myscript.sh # 添加执行权限
复制代码
执行脚本:
- ./myscript.sh # 执行脚本
- bash myscript.sh # 使用bash解释器执行脚本
复制代码
变量和参数
• - 变量定义和使用:#!/bin/bash
- name="John Doe"
- age=30
- echo "Name: $name"
- echo "Age: $age"
- echo "Name: ${name}"
复制代码 • - 特殊变量:#!/bin/bash
- echo "Script name: $0" # 脚本名称
- echo "First parameter: $1" # 第一个参数
- echo "Second parameter: $2" # 第二个参数
- echo "All parameters: $@" # 所有参数
- echo "Number of parameters: $#" # 参数数量
- echo "Process ID: $$" # 当前进程ID
复制代码 • - 命令行参数处理:#!/bin/bash
- while getopts ":a:b:" opt; do
- case $opt in
- a) arg_a="$OPTARG"
- echo "Option -a with value: $arg_a"
- ;;
- b) arg_b="$OPTARG"
- echo "Option -b with value: $arg_b"
- ;;
- \?) echo "Invalid option: -$OPTARG" >&2
- exit 1
- ;;
- :) echo "Option -$OPTARG requires an argument." >&2
- exit 1
- ;;
- esac
- done
复制代码
变量定义和使用:
- #!/bin/bash
- name="John Doe"
- age=30
- echo "Name: $name"
- echo "Age: $age"
- echo "Name: ${name}"
复制代码
特殊变量:
- #!/bin/bash
- echo "Script name: $0" # 脚本名称
- echo "First parameter: $1" # 第一个参数
- echo "Second parameter: $2" # 第二个参数
- echo "All parameters: $@" # 所有参数
- echo "Number of parameters: $#" # 参数数量
- echo "Process ID: $$" # 当前进程ID
复制代码
命令行参数处理:
- #!/bin/bash
- while getopts ":a:b:" opt; do
- case $opt in
- a) arg_a="$OPTARG"
- echo "Option -a with value: $arg_a"
- ;;
- b) arg_b="$OPTARG"
- echo "Option -b with value: $arg_b"
- ;;
- \?) echo "Invalid option: -$OPTARG" >&2
- exit 1
- ;;
- :) echo "Option -$OPTARG requires an argument." >&2
- exit 1
- ;;
- esac
- done
复制代码
条件语句
• - if语句:#!/bin/bash
- age=20
- if [ $age -ge 18 ]; then
- echo "You are an adult."
- else
- echo "You are a minor."
- fi
复制代码 • - 多条件判断:#!/bin/bash
- grade=85
- if [ $grade -ge 90 ]; then
- echo "A"
- elif [ $grade -ge 80 ]; then
- echo "B"
- elif [ $grade -ge 70 ]; then
- echo "C"
- else
- echo "D or F"
- fi
复制代码 • - 文件测试:#!/bin/bash
- filename="test.txt"
- if [ -f "$filename" ]; then
- echo "$filename is a regular file."
- elif [ -d "$filename" ]; then
- echo "$filename is a directory."
- else
- echo "$filename does not exist or is not a regular file or directory."
- fi
复制代码
if语句:
- #!/bin/bash
- age=20
- if [ $age -ge 18 ]; then
- echo "You are an adult."
- else
- echo "You are a minor."
- fi
复制代码
多条件判断:
- #!/bin/bash
- grade=85
- if [ $grade -ge 90 ]; then
- echo "A"
- elif [ $grade -ge 80 ]; then
- echo "B"
- elif [ $grade -ge 70 ]; then
- echo "C"
- else
- echo "D or F"
- fi
复制代码
文件测试:
- #!/bin/bash
- filename="test.txt"
- if [ -f "$filename" ]; then
- echo "$filename is a regular file."
- elif [ -d "$filename" ]; then
- echo "$filename is a directory."
- else
- echo "$filename does not exist or is not a regular file or directory."
- fi
复制代码
常用的文件测试操作符:
• -f:文件存在且是普通文件
• -d:文件存在且是目录
• -e:文件存在
• -r:文件可读
• -w:文件可写
• -x:文件可执行
• -s:文件大小不为零
循环
• - for循环:
- “`bash
- #!/bin/bash
- for i in 1 2 3 4 5; do
- echo “Number: $i”
- done
复制代码
# 使用序列
for i in {1..5}; do
done
# 遍历文件
for file in *.txt; do
done
- - while循环:
- ```bash
- #!/bin/bash
- count=1
- while [ $count -le 5 ]; do
- echo "Count: $count"
- count=$((count + 1))
- done
-
- # 读取文件行
- while IFS= read -r line; do
- echo "Line: $line"
- done < input.txt
复制代码
• - until循环:#!/bin/bash
- count=1
- until [ $count -gt 5 ]; do
- echo "Count: $count"
- count=$((count + 1))
- done
复制代码- #!/bin/bash
- count=1
- until [ $count -gt 5 ]; do
- echo "Count: $count"
- count=$((count + 1))
- done
复制代码
函数
• - 定义和调用函数:
- “`bash
- #!/bin/bash
- greet() {
- echo “Hello, $1!”
- }
复制代码
greet “John” # 调用函数并传递参数
- - 返回值:
- ```bash
- #!/bin/bash
- add() {
- local result=$((1 + $2))
- echo $result
- }
-
- sum=$(add 5 3)
- echo "Sum: $sum"
复制代码
• - 函数参数:
- “`bash
- #!/bin/bash
- print_params() {
- echo “First parameter:\(1"
- echo "Second parameter: \)2”
- echo “All parameters:\(@"
- echo "Number of parameters: \)#”
- }
复制代码
print_params “apple” “banana” “cherry”
- ### 输入和输出
- - 读取用户输入:
- ```bash
- #!/bin/bash
- echo "Enter your name:"
- read name
- echo "Hello, $name!"
-
- # 带提示的读取
- read -p "Enter your age: " age
- 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
done < input.txt
- - 管道:
- ```bash
- #!/bin/bash
- # 将一个命令的输出作为另一个命令的输入
- cat file.txt | grep "pattern"
-
- # 在脚本中使用管道
- ls -l | grep "^d" # 列出所有目录
复制代码
错误处理
• - 退出状态:#!/bin/bash
- ls /nonexistent
- if [ $? -ne 0 ]; then
- echo "Command failed."
- exit 1
- fi
复制代码 • - 错误处理函数:
- “`bash
- #!/bin/bash
- error_exit() {
- echo “\(1" >&2
- exit "\){2:-1}”
- }
复制代码
退出状态:
- #!/bin/bash
- ls /nonexistent
- if [ $? -ne 0 ]; then
- echo "Command failed."
- exit 1
- fi
复制代码
错误处理函数:
“`bash
#!/bin/bash
error_exit() {
echo “\(1" >&2
exit "\){2:-1}”
}
[ -f required_file.txt ] || error_exit “required_file.txt not found.”
- - 陷阱(Trap):
- ```bash
- #!/bin/bash
- cleanup() {
- echo "Cleaning up..."
- rm -f temp_file.txt
- }
-
- trap cleanup EXIT # 在脚本退出时执行cleanup函数
-
- echo "Creating temporary file..."
- echo "This is a temporary file." > temp_file.txt
- echo "Script continues..."
复制代码
高级命令行技巧
命令组合和管道
• 基本管道:command1 | command2 # 将command1的输出作为command2的输入
• - 复杂管道示例:
- “`bash查找最大的10个文件find . -type f -exec du -h {} + | sort -rh | head -n 10
复制代码
基本管道:
- 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
- - 重定向组合:
- ```bash
- # 将标准输出和错误都重定向到文件
- command > output.txt 2>&1
-
- # 将标准输出重定向到一个文件,错误重定向到另一个文件
- command > output.txt 2> error.txt
-
- # 丢弃所有输出
- command > /dev/null 2>&1
复制代码
命令替换
• - 基本命令替换:
- “`bash使用反引号(传统方式)current_dir=pwdecho “Current directory: $current_dir”
复制代码
基本命令替换:
“`bash
current_dir=pwdecho “Current directory: $current_dir”
# 使用\(()(推荐方式)
current_dir=\)(pwd)
echo “Current directory: $current_dir”
- - 命令替换示例:
- ```bash
- # 创建基于当前日期的备份文件
- cp important_file.txt important_file_$(date +%Y%m%d).bak
-
- # 在目录中查找并处理文件
- for file in $(find . -name "*.txt"); do
- echo "Processing $file"
- done
复制代码
进程替换
• - 基本进程替换:
- “`bash将命令的输出作为临时文件传递给另一个命令diff <(command1) <(command2)
复制代码
基本进程替换:
“`bash
diff <(command1) <(command2)
# 示例:比较两个目录的内容
diff <(ls dir1) <(ls dir2)
- - 进程替换示例:
- ```bash
- # 同时查看日志的开头和结尾
- cat <(head -n 20 logfile.txt) <(tail -n 20 logfile.txt)
-
- # 合并多个排序的文件
- sort -m <(sort file1.txt) <(sort file2.txt) <(sort file3.txt)
复制代码
数组和关联数组
• - 普通数组:
- “`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
done
- - 关联数组(Bash 4.0+):
- ```bash
- # 声明关联数组
- declare -A user_info
-
- # 添加元素
- user_info["name"]="John Doe"
- user_info["age"]=30
- user_info["email"]="john@example.com"
-
- # 访问元素
- echo ${user_info["name"]} # 输出: John Doe
-
- # 遍历关联数组
- for key in "${!user_info[@]}"; do
- echo "$key: ${user_info[$key]}"
- done
复制代码
字符串操作
• 基本字符串操作:
“`bash
string=“Hello, World!”
# 获取字符串长度
echo ${#string} # 输出: 13
# 子字符串提取
echo\({string:0:5} # 输出: Hello
echo \){string:7} # 输出: World!
# 字符串替换
echo ${string/World/Linux} # 输出: Hello, Linux!
- - 高级字符串操作:
- ```bash
- filename="document.txt"
-
- # 去除前缀和后缀
- echo ${filename#*.} # 输出: txt (去除最短匹配的前缀)
- echo ${filename##*.} # 输出: txt (去除最长匹配的前缀)
- echo ${filename%.*} # 输出: document (去除最短匹配的后缀)
- echo ${filename%%.*} # 输出: document (去除最长匹配的后缀)
-
- # 字符串大小写转换
- echo ${string^^} # 转换为大写
- echo ${string,,} # 转换为小写
复制代码
高级文本处理
• - 使用awk进行复杂文本处理:
- “`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
- - 使用sed进行高级文本编辑:
- ```bash
- # 在文件中插入行
- sed '3i\This is a new line' file.txt
-
- # 在文件中追加行
- sed '3a\This is an appended line' file.txt
-
- # 使用正则表达式进行复杂替换
- sed 's/\([0-9]\{3\}\)\([0-9]\{3\}\)\([0-9]\{4\}\)/(\1) \2-\3/g' phone_numbers.txt
-
- # 多行操作
- 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_{}
- - 使用GNU parallel进行高级并行处理:
- ```bash
- # 安装GNU parallel
- sudo dnf install parallel
-
- # 基本用法
- find . -name "*.jpg" | parallel -j 4 convert {} -resize 800x600 resized_{/}
-
- # 使用参数块
- 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
- - 使用函数:
- ```bash
- # 创建函数
- mkcd() {
- mkdir -p "$1"
- cd "$1"
- }
-
- # 使函数永久生效,添加到~/.bashrc
- echo "mkcd() { mkdir -p "$1"; cd "$1"; }" >> ~/.bashrc
- 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并执行
使用快捷键:
- 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并执行
复制代码
实用案例分析
系统维护和监控
• 磁盘空间分析:
“`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
- - 系统资源监控:
- ```bash
- # 监控CPU使用率
- top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4"%"}'
-
- # 监控内存使用情况
- free -m | awk 'NR==2{printf "%.2f%%\n", $3*100/$2}'
-
- # 监控磁盘I/O
- iostat -x 1 5
-
- # 监控网络连接
- netstat -an | grep ESTABLISHED | wc -l
复制代码
• - 日志分析:
- “`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
- ### 文件管理和处理
- - 批量重命名文件:
- ```bash
- # 将所有.txt文件重命名为.md文件
- for file in *.txt; do
- mv "$file" "${file%.txt}.md"
- done
-
- # 使用rename命令(需要安装)
- sudo dnf install prename
- rename 's/\.txt$/.md/' *.txt
复制代码
• - 批量处理图像:
- “`bash调整图像大小for img in *.jpg; do
- convert “\(img" -resize 800x600 "resized_\)img”
- done
复制代码
批量处理图像:
“`bash
for img in *.jpg; do
convert “\(img" -resize 800x600 "resized_\)img”
done
# 批量转换图像格式
for img in *.png; do
- convert "$img" "${img%.png}.jpg"
复制代码
done
- - 批量处理文本文件:
- ```bash
- # 在多个文件中查找并替换文本
- for file in *.txt; do
- sed -i 's/old_text/new_text/g' "$file"
- done
-
- # 合并多个文本文件
- cat *.txt > combined.txt
-
- # 提取特定列并合并
- for file in *.csv; do
- cut -d, -f1,3 "$file" > "temp_$file"
- done
- cat temp_*.csv > combined.csv
- 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
- - 网络流量监控:
- ```bash
- # 安装iftop
- sudo dnf install iftop
-
- # 监控网络流量
- sudo iftop -i eth0
-
- # 使用nethogs监控进程网络使用
- sudo dnf install nethogs
- 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”
- ### 数据备份和恢复
- - 创建备份脚本:
- ```bash
- #!/bin/bash
- # backup.sh
-
- SOURCE_DIR="/home/user/documents"
- BACKUP_DIR="/backup"
- DATE=$(date +%Y%m%d_%H%M%S)
- BACKUP_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
-
- # 创建备份目录(如果不存在)
- mkdir -p "$BACKUP_DIR"
-
- # 创建备份
- tar -czf "$BACKUP_FILE" "$SOURCE_DIR"
-
- # 检查备份是否成功
- if [ $? -eq 0 ]; then
- echo "Backup created successfully: $BACKUP_FILE"
- else
- echo "Backup failed!"
- exit 1
- fi
-
- # 保留最近7天的备份,删除旧的备份
- find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
复制代码
• 自动化备份:
“`bash编辑crontabcrontab -e
自动化备份:
“`bash
crontab -e
# 添加以下行以每天凌晨2点运行备份脚本
0 2 * * * /path/to/backup.sh
- - 远程备份:
- ```bash
- # 使用rsync进行远程备份
- rsync -avz -e ssh /local/directory/ user@remote:/remote/directory/
-
- # 使用scp进行远程备份
- scp -r /local/directory user@remote:/remote/directory
复制代码
系统性能优化
• 系统启动时间分析:
“`bash查看系统启动时间systemd-analyze
系统启动时间分析:
“`bash
systemd-analyze
# 查看启动过程中各个服务的耗时
systemd-analyze blame
# 生成启动时间图表
systemd-analyze plot > boot_plot.svg
- - 优化系统服务:
- ```bash
- # 列出所有启用的服务
- systemctl list-unit-files --state=enabled
-
- # 禁用不必要的服务
- sudo systemctl disable servicename
-
- # 掩码服务(防止被其他服务启动)
- 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系统。 |
|