Linux常用命令及vi编辑器

时间:2024-07-14 15:20:08

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 56 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 56 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 712 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 54 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		# 显示当前日期和时间
20240714日 星期日 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"		# 设置系统的日期和时间(需要管理员权限)
20230101日 星期日 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 键回到命令模式。