Linux常用命令及vi编辑器
- 一、Linux常用命令
- 1. 查看目录与文件
- 2. 文件与目录操作
- 3. 文件内容查看
- 4. 搜索与查找
- 5. 系统与进程管理
- 6. 网络操作
- 7. 文件权限与所有者
- 8. 磁盘与文件系统
- 9. 其他常用命令
- 二、vi编辑器详细操作
- **命令模式**
- **输入模式**
- **末行模式**
Linux作为开源的操作系统,其强大的功能离不开其丰富的命令行工具。本文将介绍Linux中一些常用的命令以及vi编辑器的详细操作,帮助用户更好地掌握Linux系统。
一、Linux常用命令
1. 查看目录与文件
ls 命令——列表(List)显示目录内容
常用选项有
-l 以长格式列出信息(包括文件权限、所有者、大小等)。不使用-l 选项时,ls 命令默认以短格式显示目录名或文件名信息
-a 显示所有文件,包括以点(.)开头的隐藏文件。
-A 与-a 选项的作用基本类似,但有两个特殊隐藏目录不会显示,即表示当前目录的“.”和表示父目录的“..”
-d 仅列出目录本身,而非其内容。
-h 与 -l 一起使用时,以更易读的格式(如 KB、MB)显示文件大小。
-R 以递归(Recursive)的方式显示指定目录及其子目录中的所有内容
示例
[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1257 5月 6 23:42 anaconda-ks.cfg
[root@localhost ~]# ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@localhost ~]# ls -A
anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .tcshrc
[root@localhost ~]# ls -lh
总用量 4.0K
-rw-------. 1 root root 1.3K 5月 6 23:42 anaconda-ks.cfg
[root@localhost ~]# ls -d /root/
/root/
[root@localhost ~]# ls -R /root/
/root/:
pwd 命令 ——查看当前的工作目录(Print Working Directory)
示例
[root@localhost ~]# pwd
/root
2. 文件与目录操作
cd命令——切换工作目录。
- 在Linux系统中,命令行提示符通常包含了当前用户的信息、当前所在的目录(或主机名)以及一个特殊符号(如#或$),这个特殊符号用来区分用户是否具有管理员(root)权限。
- [root@localhost /]#:这个提示符表示当前用户是root用户(具有最高权限的管理员用户),当前所在的目录是根目录(/),而~符号则表明当前用户是root用户。
示例
[root@localhost ~]# cd /etc //切换到根目录下的etc目录
[root@localhost etc]#
[root@localhost ~]# cd - //返回上一次的目录
/root
[root@localhost ~]#
[root@localhost ~]# cd .. //切换到当前目录的上级目录
[root@localhost /]#
mkdir 命令——创建新的目录(Make Directory)
mkdir [选项] <目录名>
[root@localhost ~]# mkdir new_directory //创建单个目录
[root@localhost ~]# ls
anaconda-ks.cfg new_directory
[root@localhost ~]# mkdir dir1 dir2 dir3 //创建多个目录
[root@localhost ~]# ls
anaconda-ks.cfg dir1 dir2 dir3 new_directory
[root@localhost ~]# mkdir -p aaa/bbb/ccc // -p 递归创建目录,如果目录的父目录不存在,也会一并创建
[root@localhost ~]# ls
aaa anaconda-ks.cfg dir1 dir2 dir3 new_directory
[root@localhost ~]# ls aaa/bbb/
ccc
[root@localhost ~]# mkdir -m 755 newdir // -m 设置新创建目录的权限。需要跟上权限的数字表示(八进制)
[root@localhost ~]# ls -ld newdir
drwxr-xr-x 2 root root 6 7月 12 15:49 newdir
[root@localhost ~]# mkdir -v abc // -v 显示命令在执行过程中所创建的目录的详细信息
mkdir: 已创建目录 "abc"
[root@localhost ~]# ls
aaa abc anaconda-ks.cfg dir1 dir2 dir3 newdir new_directory
[root@localhost ~]# rmdir dir1 dir2 dir3 // rmdir 删除多个空目录
[root@localhost ~]# ls
aaa anaconda-ks.cfg newdir new_directory
rm:删除文件或目录。
基本语法
rm [选项]... 文件...
rm [选项]... 目录...
常用选项:
- -f, --force:忽略不存在的文件,不提示确认。
- -i:交互式删除,删除每个文件前都会询问用户。
- -r, -R, --recursive:递归删除目录及其内容。
- -v, --verbose:显示被删除的文件或目录的详细信息。
示例
[root@localhost ~]# ls
anaconda-ks.cfg file1.txt file2.txt file3.txt newfile.txt
[root@localhost ~]# rm -f file1.txt //删除单个文件
[root@localhost ~]# ls
anaconda-ks.cfg file2.txt file3.txt newfile.txt
[root@localhost ~]# rm -i file2.txt file3.txt //交互式删除多个文件
rm:是否删除普通空文件 "file2.txt"?y
rm:是否删除普通空文件 "file3.txt"?y
[root@localhost ~]# ls
anaconda-ks.cfg newfile.txt
[root@localhost ~]# rm -r newfile.txt //递归删除目录及其内容
rm:是否删除普通空文件 "newfile.txt"?n
[root@localhost ~]# ls
anaconda-ks.cfg newfile.txt
[root@localhost ~]# rm -rf newfile.txt //强制递归删除目录及其内容
[root@localhost ~]# ls
anaconda-ks.cfg
cp:复制文件或目录。
基本语法
cp [选项]... [-T] 源文件 目标文件
cp [选项]... 源文件... 目录
cp [选项]... -t 目录 源文件...
常用选项:
- -f, --force:如果目标文件已存在,并且无法被写入(例如,因为权限问题),则移除目标文件并尝试再次复制(请注意,这通常不会覆盖只读文件)。
- -i:在覆盖目标文件之前提示用户确认。
- -r, -R, --recursive:递归复制目录及其内容。
- -v, --verbose:显示详细过程信息。
- -p:连同文件的属性一起复制,常用于备份。
示例
[root@localhost ~]# ls
anaconda-ks.cfg file.txt newfile.txt
[root@localhost ~]# cp file.txt newfile.txt //复制文件
cp:是否覆盖"newfile.txt"? y
[root@localhost ~]# cat newfile.txt
nihao
hello
[root@localhost ~]# ls
aaa anaconda-ks.cfg bbb file.txt newfile.txt
[root@localhost ~]# ls aaa/
aa.txt
[root@localhost ~]# cp -r aaa/ bbb/ //复制目录(递归)
[root@localhost ~]# ls bbb/aaa/
aa.txt
[root@localhost ~]# cp -v file.txt newfile.txt //复制文件并显示详细信息
cp:是否覆盖"newfile.txt"? y
"file.txt" -> "newfile.txt"
mv:移动或重命名文件或目录。
- 相同路径重命名,不同路径移动
基本语法:
mv [选项]... [-T] 源文件 目标文件
mv [选项]... 源文件... 目录
mv [选项]... -t 目录 源文件...
常用选项:
- -f, --force:如果目标文件已存在,并且无法被写入(例如,因为权限问题),则移除目标文件并尝试再次移动。
- -i:在覆盖目标文件之前提示用户确认。
- -n:不要覆盖任何已存在的文件(使mv表现得像重命名而不是移动)。
- -u:只有在源文件比目标文件新,或者目标文件不存在时,才移动文件。
- -v, --verbose:显示详细过程信息。
示例:
[root@localhost ~]# ls
anaconda-ks.cfg kgc kgc.txt
[root@localhost ~]# mv kgc.txt kgc/kc65/ //移动文件
[root@localhost ~]# ls kgc/kc65/
kgc.txt
[root@localhost kc65]# mv kgc.txt file.txt //重命名文件
[root@localhost kc65]# ls
file.txt
[root@localhost kc65]# touch kgc1.txt kgc2.txt
[root@localhost kc65]# ls
file.txt kgc1.txt kgc2.txt
[root@localhost kc65]# mv kgc1.txt kgc2.txt ~ //移动多个文件到目录
[root@localhost ~]# ls
anaconda-ks.cfg kgc kgc1.txt kgc2.txt
[root@localhost ~]# mv -v kgc1.txt kgc/kc65/ //显示详细信息
"kgc1.txt" -> "kgc/kc65/kgc1.txt"
3. 文件内容查看
cat:连接和显示文件内容。
- cat 命令用于查看纯文本文件(内容较少的)
- 使用>和>>可以将文件内容输出或追加到另一个文件中。
常用选项:
- -n 或 --number:显示每一行的行号。
- -b 或 --number-nonblank:显示非空行的行号。
- -s 或 --squeeze-blank:多个空行连续出现时,压缩成一行空行。
- -v 或 --show-nonprinting:显示非打印字符。
- -E:在每一行的末尾添加 $ 符号。
- -T:将制表符显示为 ^I。
- -A:相当于 -vET 的组合选项,即显示非打印字符、在每一行的末尾添加 $ 符号,并将制表符显示为 ^I。
示例
[root@localhost ~]# ls
anaconda-ks.cfg file1.txt file2.txt kgc kgc2.txt
[root@localhost ~]# cat file1.txt file2.txt > file.txt //将file1和file2内容合并后覆盖到file
[root@localhost ~]# cat file.txt
nihao
zhangsan
[root@localhost ~]# echo "hello" >> file.txt //将字符串"Hello"追加到file.txt的末尾
[root@localhost ~]# cat file.txt
nihao
zhangsan
hello
more和less:分页显示文本文件内容。
- more和less都支持使用空格键翻页,less还支持更多操作如向前翻页。
more命令
常用操作:
- 空格键:向下翻页。
- b 键:向上翻页(在某些版本的more中可能不支持,使用Page Up键)。
- q 键:退出more。
- / 后跟字符串:搜索文件中的内容。
- n:查找下一个匹配项。
- N:查找上一个匹配项。
注意:more命令主要用于分页查看文件内容,不支持编辑文件。
less命令
常用操作:
- 空格键:向下翻页。
- b 键:向上翻页。
- / 后跟字符串:向前搜索。
- ? 后跟字符串:向后搜索。
- n:查找下一个匹配项。
- N:查找上一个匹配项。
- G:跳转到文件末尾。
- g:跳转到文件开头。
- -N:显示行号。
head和tail:分别显示文件的前几行或后几行。
- head 显示文件的前几行:head filename(默认为前10行)
- tail 显示文件的末尾内容:tail filename(默认为最后10行)
head命令
常用选项:
- -n 或 --lines=行数:指定显示的文件行数。
- -q 或 --quiet 或 --silent:不显示文件名。
- -v 或 --verbose:显示文件名。
示例:
head -n 15 file.txt # 显示文件的前15行:
head -q file1.txt file2.txt # 显示多个文件的前10行,不显示文件名
tail命令
常用选项:
- -n 数量:指定要显示的行数。
- -f:实时显示文件的新增内容,常用于查看日志文件。
示例:
tail -n 20 file.txt # 显示文件末尾的最后20行
tail -f log.txt # 实时监控文件变化
4. 搜索与查找
find:在文件系统中查找文件和目录。
- find 命令用于在文件系统中递归地搜索文件和目录
基本语法
find [搜索路径] [选项] [表达式]
常用选项:
- -name “文件名”:按文件名查找文件。
- -iname “文件名”:忽略文件名的大小写进行查找。
- -type:根据文件类型查找,如 f 代表文件,d 代表目录。
- -size [±]大小:根据文件大小查找,单位可以是 c(字节)、k(千字节)、M(兆字节)等。
- -user 用户名:查找属于指定用户的文件。
- -group 组名:查找属于指定组的文件。
- -exec 命令 {} ;:对查找到的每个文件执行指定的命令,{} 是一个特殊字符串,对于每一个匹配的文件,{} 会被替换成相应的文件名。
示例:
- 查找当前目录及子目录下名为 example.txt 的文件:
find . -name "example.txt"
- 查找当前目录及子目录下所有 .txt 文件,并删除它们(慎用):
find . -name "*.txt" -exec rm {} \;
- 查找 /home 目录下所有大于 10MB 的文件:
find /home -type f -size +10M
grep:在文件中搜索指定文本。
- grep 命令用于搜索文件中包含指定模式的行,并打印出来
- 例如,grep search_term file.txt。
基本语法
grep [选项] 模式 [文件...]
常用选项:
- -i:忽略大小写。
- -v:反向选择,即只显示不包含匹配文本的行。
- -n:显示匹配行及其行号。
- -r 或 -R:递归搜索目录中的所有文件。
- -l:只列出包含匹配文本的文件名,而不显示匹配的行。
- -c:计算匹配行的数量。
示例:
- 在文件 file.txt 中搜索单词 example:
grep "example" file.txt
- 忽略大小写,在文件 file.txt 中搜索单词 example:
grep -i "example" file.txt
- 递归搜索当前目录及子目录下所有文件中的单词 example:
grep -r "example" .
- 只列出包含单词 example 的文件名:
grep -rl "example" .
5. 系统与进程管理
ps 命令
- ps 命令用于显示当前系统中的活动进程。它是“process status”的缩写。
常用选项和用法:
- a: 显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
- u: 使用以用户为主的格式输出进程信息。
- x: 显示当前用户在所有终端下的进程信息。
- -e: 显示系统内的所有进程信息。
- -l: 使用长(Long)格式显示进程信息。
- -f: 使用完整的(Full)格式显示进程信息。
示例:
ps aux # 以简单列表的形式显示出进程信息
ps -elf # 以长格式显示系统中的进程信息
ps -elf | grep ssh # 过滤出包含“ssh”的进程信息
kill 命令
- kill 命令用于向进程发送信号,通常用于终止进程。默认发送的是SIGTERM(15)信号,要求进程终止运行。
常用选项和用法:
- 启动进程
- 命令 & 启动后台进程
- 改变进程的运行方式
- ctrl + z 将当前进程挂起(调入后台并停止执行)
- jobs -l 查看当前终端中在后台运行的进程任务
- bg 编号 后台运行某个任务
- fg 编号 把某个任务调回前台
- 终止进程执行
- ctrl + c 中断正在执行的命令
- kill PID号 用于终止指定PID号的进程
- killall 用于终止指定名称的所有进程
- -9 选项强制终止
- kill -9 7095 //强制终止目标进程
- killall -9 vim //通过进程名终止多个进程
-
pkill命令
- -U 根据进程所属的用户名终止相应进程
- -t 根据进程所在的终端终止相应进程
- pgrep –l -U “hackli” //确认目标进程相关信息
- pkill -9 -U “hackli” //强行终止用户hackli 的进程
- pgrep -l -U “hackli” //确认目标进程已被终止
top:显示系统资源的实时使用情况和进程信息。
- top 命令提供了一个实时的系统进程和资源使用情况的视图。它持续更新显示的信息,直到用户退出。
常用选项:
- top 以动态刷新的方式显示各进程的状态信息
- P:根据 CPU 使用率排序。
- M:根据内存使用量排序。
- T:根据时间/累计时间排序(这可能与启动时间不同,取决于 top 的版本和配置)。
- h:显示帮助信息。
- q:退出 top。
6. 网络操作
ping命令
- ping 命令可以向目标主机持续地发送测试数据包,并显示反馈结果,直到按 Ctrl+C 组合键后中止测试,并显示最终统计结果
常用选项 - ping 目标主机地址
- -c:指定ping几次
- -i:间隔时间
- -W:超时
ifconfig命令
- ifconfig(或ip addr show):查看和配置网络接口信息。
- ifconfig 网络接口
wget命令
wget 命令用于在终端中下载网络文件
基本语法
wget [参数] 下载地址
常用选项
- -b 后台下载模式
- -P 下载到指定目录
- -t 最大尝试次数
- -c 断点续传
- -p 下载页面内所有资源,包括图片、视频等
- -r 递归下载
示例
wget https://example.com/
wget -P /tmp/ https://example.com/
7. 文件权限与所有者
chmod命令
- chmod:修改文件或目录的权限
基本用法
chmod [ugoa...][+-=][rwx] 文件...
chmod nnn 文件
- 读(r=4)、写(w=2)和执行(x=1)
- 777是最高权限
示例
chmod ugo-x file //删除所有的 “x” 权限,也可以改用 “a-x”
chmod u+x,o-r file //为属主用户添加执行权限,删除其他用户的读取权限
chmod 755 file //将 file 文件访问权限设置为 “rwxr-xr-x” 对应的数字是755
chown命令
- chown:修改文件或目录的所有者。
基本用法
chown [选项]... [所有者][:组] 文件...
- 所有者:指定新的文件或目录的所有者用户名。
- 组(可选):指定新的文件或目录的所属组名,与所有者之间用冒号:分隔。
- 文件…:指定要更改的文件或目录列表。
常用选项
- -R:递归修改指定目录下所有文件、子目录的归属
示例
chown john:staff example.txt # 同时更改文件的所有者和所属组
chown -R john docs/ # 递归更改目录及其内容的所有者
8. 磁盘与文件系统
df 命令
- df 命令用于显示磁盘分区的总空间、已用空间、剩余空间以及挂载点等信息。
常用选项
- “-h”选项可以显示更易读的容量单位(如 KB, MB, GB)
- “-T”选项用于显示对应文件系统的类型
示例
[root@localhost ~]# df -Th # 查看所有挂载分区的磁盘使用情况,并显示文件系统类型:
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 1.5G 49G 3% /
/dev/mapper/centos-home xfs 26G 33M 26G 1% /home
/dev/sda1 xfs 1014M 153M 862M 15% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
du 命令
- du 命令用于估算文件或目录的磁盘空间使用量。
常用选项
- -h:以人类可读的格式(如 KB, MB, GB)显示信息。
- -s:对每个参数只给出总计,而不是列出每个子目录的占用情况。
示例
- *表示当前目录下的所有文件和目录
[root@localhost ~]# du -sh /root/ # 查看当前目录下所有文件和子目录的磁盘使用情况(以人类可读的格式):
28K /root/
mount 命令
- mount 命令用于挂载文件系统。
常用选项
- -t:指定文件系统的类型,如 ext4, ntfs, vfat 等。
- -o:后面接挂载选项,如 rw, ro, nosuid 等。
示例
[root@localhost ~]# mkdir /kgc/kc65
[root@localhost ~]# mount -t ext4 /dev/sdb1 /kgc/kc65 # 挂载一个设备到指定目录
umount 命令
- umount 命令用于卸载已挂载的文件系统。
常用选项
- -l:在卸载时,如果设备正忙,则将其标记为已卸载,并等待设备不再忙时真正卸载。
- -f:强制卸载。
示例
[root@localhost ~]# umount /kgc/kc65 # 卸载已挂载的文件系统
[root@localhost ~]# umount -l /kgc/kc65 # 如果设备正忙,尝试标记为卸载并等待
[root@localhost ~]# umount -f /kgc/kc65 # 强制卸载(不推荐,除非其他方法都失败了):
9. 其他常用命令
touch 命令
- touch 命令用于创建空文件或更新现有文件的时间戳(访问时间和修改时间)。
- 如果指定的文件不存在,touch 会创建一个空文件。
示例
[root@localhost ~]# touch file.txt # 创建单个空文件
[root@localhost ~]# touch kgc1.txt kgc2.txt kgc3.txt # 创建多个空文件
[root@localhost ~]# touch -d "2017-05-04 15:44" anaconda-ks.cfg # 修改文件的修改时间为2017-05-04 15:44
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1257 5月 4 2017 anaconda-ks.cfg
date 命令
- date 命令用于显示或设置系统的日期和时间。
常用选项
- +%Y:显示四位数的年份。
- +%m:显示月份(01-12)。
- +%d:显示月份中的第几天(01-31)。
- +%H:显示小时(00-23)。
- +%M:显示分钟(00-59)。
- +%S:显示秒(00-59)。
- -s:设置系统的日期和时间。
示例
[root@localhost ~]# date # 显示当前日期和时间
2024年 07月 14日 星期日 12:03:32 CST
[root@localhost ~]# date +"%Y-%m-%d %H:%M:%S" # 自定义显示格式(例如,年-月-日 时:分:秒)
2024-07-14 12:04:03
[root@localhost ~]# date -s "2023-01-01 12:00:00" # 设置系统的日期和时间(需要管理员权限)
2023年 01月 01日 星期日 12:00:00 CST
echo 命令
- echo 命令用于将文本输出到标准输出(通常是屏幕)。
示例
[root@localhost ~]# echo Hello, World!
Hello, World!
shutdown 命令
- shutdown 命令用于关闭或重启系统,并且可以在关闭前向所有登录的用户发送警告消息。
常用选项
- -h:关闭系统。
- -r:重启系统。
- -n:不进行任何实际关机,只显示消息或进行其他操作。
- -t:设置关机前的延迟时间(秒)。
- +m:m 是分钟数,表示从现在开始多少分钟后关机。
示例
shutdown -h now # 立即关闭系统
shutdown -r +5 # 5分钟后重启系统
shutdown -c # 取消已计划的关机或重启
reboot 命令
- reboot 命令用于重启系统。
示例
reboot # 重启系统
二、vi编辑器详细操作
- vi编辑器有三个模式:
- 命令模式 (默认进入)
- 输入模式
- 末行模式
命令模式
- 默认进入:打开vi时,默认进入命令模式。
- 功能:用于执行移动光标、删除文本、复制粘贴、搜索替换等命令。
- 如何进入:从输入模式或末行模式按 Esc 键。
- 常用命令:
- h:左移光标
- j:下移光标
- k:上移光标
- l:右移光标
- x:删除当前光标下的字符
- yy:复制光标所在行
- dd:删除光标所在行
- p:粘贴之前删除或复制的文本
- u:撤销上一次操作
- dG:将光标之后所有的内容清空
- dgg:从结尾删到开头
- G:跳转到末尾行
- gg:跳转到开头行
- ZZ:保存退出
- ::进入末行模式
输入模式
- 功能:用于插入或修改文本。
- 如何进入:
- i:在当前光标前插入文本。
- a:在当前光标后插入文本。
- o:在当前光标所在行的下一行开始新行并插入文本。
- I:在当前行的第一个非空白字符前插入文本。
- A:在当前行的末尾插入文本。
- O:在当前光标所在行的上一行开始新行并插入文本。
- 如何退出:按 Esc 键回到命令模式。
末行模式
- 功能:执行如保存文件、退出vi、搜索替换文本、设置vi选项等命令。
- 如何进入:在命令模式下按 : 键。
- 常用命令:
- :w:保存文件。
- :q:退出vi(如果文件已修改,会提示保存)。
- :wq 或 :x:保存并退出vi。
- :q!:强制退出vi,不保存修改。
- :/字符串:在文本中从上至下搜索该字符串,n上至下 N下至上
- :?字符串:在文本中从下至上搜索该字符串,n上至下 N下至上
- :set nu:显示行号。
- :set nonu:隐藏行号。
- :% s/one/two/g:将全文中的所有 one 替换成 two
- :% s/one:将全文中的所有one删除
- 如何退出:执行完命令后按 Enter 键,或按 Esc 键回到命令模式。