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

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


资料仅供学习交流使用。
作者: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 : 直接将属主的权限赋值给其他人,赋值后,两者的权限相同。

linux 常用 shell 指令学习笔记总结_第1张图片

解读文件权限:
“-” 开头的表示文件,“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 指令:
linux 常用 shell 指令学习笔记总结_第2张图片

你可能感兴趣的:(Linux,linux,shell)