linux 常用 shell 指令学习笔记总结

tech2025-09-07  4

文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。


资料仅供学习交流使用。 作者:Aliven888

1、简介

1.1 简述

shell : 是一个程序,他在用户和操作系统提供了一个面向行的可交互接口。用户在命令行中输入命令,运行在后台的shell把命令转化成指令代码发送给操作系统。 Shell提供了很多高级特性,使得用户和操作系统之间的交互变得简单而高效。

1.2、基础知识:

绝对路径 : 是从linux根目录“/” 开始的路径。例如:/home/work。 相对路径 : 从当前目录下开始的路径。例如:work/test/。 . : 表示当前目录。例如: ./test 表示当前目录下test目录 .. : 表示前一级目录。例如: ../test 表示与当前目录同一级的test的目录。

2、shell指令介绍

2.1、显示当前目录(pwd)

pwd : 显示当前所在的位置,即当前的工作目录。 格式: pwd 举例: pwd : 显示当前的工作目录。

2.2、目录切换(cd)

cd : 指令表示切换文件夹(跳到指定的文件下) 格式: cd + 空格 + 路径 举例: cd ~ : 切换到主目录,比如是user用户,则切到 /user下。 cd /test : 切换到目录test下。 cd test :切换到当前目录下的test目录下。 cd / : 切换到跟目录。 cd .. : 切换到当前目录的上一级。 cd ../.. :切换到当前目录的上二级(上上级)目录。 cd 'test project' : 切换到名称为 test project 的文件夹中(名称中带空格)。 注意: 在shell中, “..”表示当前目录的上一级,“.”则表示当前目录。而“~”表示用户主目录,这个符号通常在键盘 Esc 按键的下方。

2.3、列出文件(ls, dir, vdir)

ls : 打印列出当前目录下的所有文件(不包含子文件夹中的内容) 格式: ls + 空格 + [option] + [目录/路径] 举例: ls : 列出当前目录下的所有文件(带后缀)以及文件夹名。 ls A* : 列出当前目录下以字母 A 开头的所有文件(带后缀)以及文件夹。 ls -l *.txt : 列出当前目录下后缀名是 txt 的所有文件。 ls -F : 列出当前目录下所有文件以及文件夹,并在文件夹后面添加 /, 而文件依旧显示文件名(带后缀)。可以用于区分文件与文件夹。 ls -l : 查看当前目录下的文件以及文件的属性(包含文件的可读写属性,编辑时间,内存大小,编辑用户等信息),可以简写为 ll 指令。 ls -a /home : 显示home目录下的所有文件(带后缀)以及文件夹,包含隐藏的文件。 注意: ls 的指令是可以合并使用的,比如ls –la , ls –aF 等,功能是叠加的。 option可选参数如下: -A 列出所有文件,包含隐藏文件 -l 列表形式,包含文件的绝大部分属性 -F 显示当前目录下的文件以及文件夹(目录),并在文件夹(目录)后添加 “/” -R 递归显示 --help 此命令的帮助
dir : 列出当前目录下的所有文件(带后缀)以及文件夹。 格式: dir 举例: dir : 列出当前目录下的所有文件(带后缀)以及文件夹。
vdir : 列出当前目录下所有文件以及文件夹的属性信息,相当于ls -l 。 格式: vdir 举例: vdir : 列出当前目录下所有文件以及文件夹的属性信息。

2.4、查看文本文件内容(cat, more, less, head, tail)

cat : 用于查看文件的内容(通常是一个文本文件);文件的内容会一次性的显示出来,文件内容比较多时,不便于阅读。其还有一个作用就是用于文件内容合并(拷贝)。 格式: cat + 空格 + [option] + 文件名(带后缀) //打开文件 cat + 空格 + 文件1 + 空格 + 文件2 + 空格 + > + 空格 + 文件3 //先清空文件3,然后把文件1/2的内容依次拷贝进去。 cat + 空格 + 文件1 + 空格 + 文件2 + 空格 + >> + 空格 + 文件3 //不会清空文件3,直接把文件1/2的内容依次拷贝到文件3已有内容的后面。 option可选参数如下: -n 显示文本内容的行号。 举例: cat text.txt : 查看文件text.txt的内容。 cat -n text.txt : 查看文件text.txt的内容,并在每一行前显示行号。
more : 用于查看文本文件的内容,和cat相比,more会一页一页的显示,并在当前页的最后一行显示百分比,表示当前阅读的进度。 格式: more + 空格 +文件名(带后缀) 按键操作: Enter键 :向下滚动一行。 空格键:向下滚动一页。 Q键:表示退出more指令。 举例: more text.cpp : 用于查看text.cpp文本文件的内容。
less : 用于查看文本文件内容,和more相比功能更强大;在more指令的基础上添加了可编辑功能。 格式: less + 空格 + 文件名(带后缀) 按键操作: 空格键:向下翻页。 B 键:向上翻页。 ↑↓←→键 : 光标向上,下,左,右移动。 Q 键:退出less指令。 举例: less text.cpp : 用于查看text.cpp文本文件的内容。
head : 显示文件的头几行内容。默认显示前10行。 格式: head + 空格 + [option] + 空格 + 文件名(带后缀) option可选参数如下: -num : 显示文本内容的行号。 举例: head -20 text.txt : 显示text.txt文件的前20行文本内容,
tail : 显示文件的后几行内容。默认显示前10行。 格式: tail + 空格 + [option] + 空格 + 文件名(带后缀) option可选参数如下: -num : 显示文本内容的行号。 举例: tail -20 text.txt : 显示text.txt文件的后20行文本内容。

2.5、文件/文件夹操作(mkdir, rmdir, touch, rm)

mkdir : 在当前目录下创建文件夹,一次可以创建1个或者多个。 格式: mkdir + 空格 + 文件夹名 [ + 空格 + 文件夹名 … ] 举例: mkdir test1 test2 : 在当前目录下创建test1 和test2文件夹。 mkdir 'test project' : 在当前目录下创建名字为test test的文件夹(文件夹名称中带有空格)mkdir test/test1 : 在当前目录下的子级目录test下创建test1文件夹(注意 :此时子级目录test必须是存在的,否则该指令执行失败)。 mkdir -p test/test1 : 在当前目录下的子级目录test下创建test1文件夹(注意 :此时如果子级目录test不存在的,否则该指令会先依次创建子级目录test,然后再创建test1)。
rmdir : 该指令用于删除目录(文件夹)。当前目录(文件夹)必须为空才可以使用该指令删除。 格式: rmdir + 空格 + [目录(文件夹名)] 举例: rmdir test : 删除文件夹test。 注意: 1、目录(文件夹)为执行该指令会失败,因此使用该指令时,需要先清除该目录下的所有文件以及文件夹。因为rmdir的这一局限性,导致该指令很少被用,反而功能更强大的rm(下面有介绍)很受欢迎。
touch : 在当前目录下创建一个或者多个文件。 格式: touch + 空格 + 文件夹名 [ + 空格 + 文件夹名 … ] 举例: touch text1.txt text2.txt :创建文件text1.txt 和 text2.txt。 touch 'text name.txt' : 创建名称为 text name.txt 文件(名称中带空格)。
rm : 用于删除一个或者多个文件(包含目标路径下的全部文件及文件夹,是一种递归删除)。 格式: rm + 空格 + [option] + 空格 + [文件/文件夹名 … ] 举例: rm text.txt : 删除当前目录下的text.txt文件。 rm *.txt : 删除当前目录下以“.txt”为后缀名的全部文件。 rm -i text.txt : 删除当前目录下的text.txt文件,在删除前,系统会询问用户是否执行删除操作,如果回答“y”表示确认删除;“n”则表示跳过该文件。 rm -r test/ : 遍历删除当前目录下子级目录test下的全部文件和文件夹。 注意: 1、通过该指令被删除的文件将永远的从系统中消失,而不会被放在几个被称为“回收站”的临时目录下。 2、使用rm指令时应该格外小心些,特别是以root权限操作时。因为文件彻底删除的特性,往往会导致一些惨痛的教训。

2.6、编辑文本文件(vi, vim)

vi/vim : 编辑文本文件。 格式: vi/vim + 空格 + 文件 编辑操作: i 键 : 表示在当前光标前面插入。 a 键 :在当前光标后面进行插入。 o 键 :另起一行进行插入。 A (shift + a) : 在当前行尾插入。 I (shift + i) : 在当前行首插入。 O (shift + o) : 在当前行上面插入一行进行内容插入。 Page Up & Page Down : 键可以上下翻页。 Esc键 : 退出当前编辑模式。 :x : 删除当前字符。 :dd : 删除当前行。 :u : 恢复前一步操作。 :p : 复制之前删除的行。 :wq: 退出当前编辑并保存。 :q!: 退出当前编辑,不保存本次编辑内容。 :set nu : 显示行号。 :set nonu : 取消显示行号。 gg : 调到文件首行。 G(Shift + g) : 调到文件的最后一行。 nG : 调到第 n 行 :n : 调到第 n 行。 :$ : 移至尾行。 :0 : 移至首行。 h : 左移一个字符。 j : 下移一个字符。 k : 上移一个字符。 l : 右移一个字符。 H(shift + h) : 移至屏幕上端。 M(shift + m) : 移至屏幕中央。 L(shift + l) : 移至屏幕下端。 //删除指令 x : 删除光标所在处的字符。 nx : 删除光标所在处后面的 n 行。 dd : 删除光标所在的行。 ndd : 删除光标所在行后面的 n 行。 :m,nd : 删除指定范围的行(eg:1,4d - 删除1,2,3,4这四行)。 dG : 删除光标所在行到末尾行的内容。 D : 删除当前行光标位置到行尾的内容。 举例: vi/vim file.txt : 编辑当前路径下file.txt文件。 vi/vim /bin/file.txt : 编辑当前自己下路径下file.txt文件。

2.7、查找文本文件内容(grep)

grep : 有时候我们并不需要查文件的全内容,此时就可以根据该指令包含查询信息的一行或者多行。 格式: grep + 空格 + [option] + 空格 + 查询信息(条件) + 文件 举例: grep 1111 text.txt : 在文件中查询包含“1111”文本的一行或者多行。

2.8、移动文件/文件夹(mv)

mv : 用于移动文件或者文件夹。重名时将会覆盖目标路径下的原有文件。所以 mv 指令也可以称为重命名指令。 格式: mv + 空格 + 文件/文件夹 + 空格 + 目录 option 可选参数如下: -v : 显示移动/重命名过程。 举例: mv file.txt bin/ : 将当前目录下的file.txt文件移动到bin目录下。 mv test/ bin/ : 将当前目录下的test文件夹移动到bin目录下。 注意: 1、 如果目标目录下有同名的文件或者文件夹,将会被迁移进来的文件或者文件夹覆盖。

2.9、拷贝复制文件/文件夹(cp)

cp : 用来赋值文件或者文件夹。默认情况下cp命令会跳过文件夹(目录),此时就可以使用-r指令实现递归拷贝,将文件夹以及其目录下的内容一起拷贝到目标路径下。 格式: cp + 空格 + [option] + 空格 + 文件/文件夹 + 空格 + 目录 option 可选参数如下: -a : 是指archive的意思,也说是指复制所有的目录 -d : 若源文件为连接文件(link file),则复制连接文件属性而非文件本身 -f : 强制(force),若有重复或其它疑问时,不会询问用户,而强制复制 -i : 若目标文件(destination)已存在,在覆盖时会先询问是否真的操作 -l : 建立硬连接(hard link)的连接文件,而非复制文件本身 -p : 与文件的属性一起复制,而非使用默认属性 -r : 递归复制,用于目录的复制操作 -R :包含当前目录一起拷贝到目标文件夹中去。 -s : 复制成符号连接文件(symbolic link),即“快捷方式”文件 -u : 若目标文件比源文件旧,更新目标文件。 -v : 显示拷贝过程。 举例: //普通拷贝复制 cp file.txt bin/ : 拷贝复制文件file.txt到目录bin下。 cp -i file.txt bin/ : 考本文件file.txt到目录bin下,在真正执行拷贝前,系统会先询问,“y”表示覆盖,“n”表示跳过该文件。 cp -r test/ bin/ : 递归拷贝test文件夹下的内容到bin目录下。 cp * /home : 把当前目录下的所有为隐藏文件都拷贝到home目录下。 cp -rf /usr /root :将 /usr 文件夹复制到 /root 文件夹下(会形成: /root/usr 文件夹)。 cp -rf /usr/** /root :将 /usr 文件夹下的全部文件复制到 /root文件夹下。 (会形成: /root/usr文件夹下的内容) //强制拷贝覆盖、替换文件(如果目标路径有重名的,强制覆盖) \cp src dest : 前面增加 反斜杠“\” , 表示强制覆盖文件。 \cp Hello.java World.java : 将 Hello.java 文件强制替换到 World.java下。 (相当于: World.java 删除,Hello.java 文件复制过来,改名 World.java) \cp -rf /usr /root : 将 /usr 文件夹复制到 /root 文件夹下,遇到相同,会强制覆盖掉! \cp -rf /usr/** /root :将 /usr 文件夹下的全部文件复制到 /root 文件夹下,遇到相同,会强制覆盖掉!

2.10、文件/文件夹权(chmod)

chmod : 用于改变一个文件的权限,该指令使用“用户组+/-权限”的表达方式来增加或者删除对应的权限。 格式: chmod + 空格 + 用户组+/-权限 + 空格 + 文件 用户组: u : 文件属主 g : 文件属组 o : 其他人 a : 所有人 权限: r : 读取,对应数字 4 w : 写入,对应数字 2 x : 执行,对应数字 1 比如 6(4 + 2)表示读 + 写权限 7(4 + 2 + 1)表示读 + 写 + 执行权限 注意事项: 1、用户还可以通过“用户组=权限”的规则直接设置文件的权限。例如:chmod ug=rw, a=r file.txt 表示赋予属主(u)和数组(g)的读写权限和所有人(a)的读取权限。 举例: chmod u+x file.txt : 增加了属主对文件file.txt的执行权限。 chmod o=u file.txt : 直接将属主的权限赋值给其他人,赋值后,两者的权限相同。

解读文件权限: “-” 开头的表示文件,“d” 开头的表示文件夹(目录) . “rw-rw-r- -” 这九个字符每三个是一对: 前三个“rw-” 表示 拥有者 的权限 中间三个 “rw-” 表示用户组权限 后面三个 “r- -” 表示其他用户权限

2.11、修改用户密码(password):

password : 修改用户密码。 格式: password + [option] + 用户名 option 可选参数如下: -S :查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用; -l :暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用; -u :解锁用户,和 -l 选项相对应,也是只能 root 用户使用; --stdin :可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用; -n 天数 :设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段; -x 天数 :设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段; -w 天数 :设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段; -i 日期 :设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。

2.12、其他基础常用操作*

su root : 切换用户到root(从root用户切换到其他用户下,不需要密码,但是由其他用户切到root下,必须要root账户的密码)。 svn checkout svn路径 : 下载svn中的代码到当前路(目录)径下(该过程需要录入svn代码)。 df : 查看磁盘使用情况(详细参见:截图1:df 指令)。df 命令会收集当前已经挂载的全部文件系统的一些重要的统计数据。显示的信息有 : 文件系统名、1K-blocks、已用、可用、已用%、挂载点等信息。 clear : 清屏(清除当前指令操作窗口的历史记录)。

截图1:df 指令:

最新回复(0)