【Linux命令】文件操作、通配符、文件属性、创建链接文件、关机重启

一、文件操作相关命令

1.cat命令

功能:回显文件的内容到终端
用法:
	cat  文件名 : 回显文件的内容到终端
	cat -n 文件名 : 回显文件的内容到终端并显示行号
	cat 文件名1 文件名2 > 文件名3  : 将文件名1和文件名2中的内容重定向到文件名3,文件名1和文件名2中的内容不在终端进行回显

2.head命令

作用:从文件头开始回显文件内容到终端,默认回显前10行
用法:
	head 文件名  : 回显文件的前10行内容到终端,如果不够就全部回显
	head -n 文件名 : 回显文件的前n行内容到终端,n是一个整数

3.tail命令

作用:从文件尾开始回显文件内容到终端,默认回显后10行
用法:
	tail 文件名  : 回显文件的后10行内容到终端,如果不够就全部回显
	tail -n 文件名 : 回显文件的和n行内容到终端,n是一个整数

4.重定向符命令 >、>>

功能: 将命令的执行结果可以使用重定向的方式重定向到某个文件中,而不再终端进行回显
用法:
shell命令 > 或者 >> 普通文件的名字(将shell命令的执行结果重定向到文件中)

‘>’ :如果重定向的文件不存在,则创建文件;如果文件存在,则将文件中的内容清空之后,从文件的头开始重新写入数据
‘>>’:如果重定向的文件不存在,则创建文件;如果文件存在,则从文件的末尾追加写入数据。

5.find命令

作用:按照名字查找某个文件
用法:
	find  从哪个目录下查找(目录的路径)  -name  要查找的文件的名字
	文件的名字中可以使用通配符 :*(多个字符) ?(单个字符)		
案例:
	find . -name hello.c   ---> 从当前目录下查找hello.c文件
	find /etc  -name  passwd  ---> 从/etc目录下查找passwd文件

6.file命令

作用:查看文件的属性信息
用法:file  文件的名字
案例:
	file helloworld.c
	file a.out

在这里插入图片描述

7.grep命令(重点)

作用:从某个文件或者目录中的文件中查找字符串
格式:
	grep -参数  "要搜索的字符串"  文件名及路径/路径
	
	参数:
	-n : 回显搜索的内容的行号
	-R : 递归搜索,如果从目录中的文件中搜索,必须加-R参数
	-i : 查找字符串时不区分大小写
	-w : 按照单词进行查找
	
案例:
	grep -n "main" helloworld.c  
			 ---> 从helloword.c文件中查找"main"字符串
	
	grep -nR "main" ./  
			----> 从当前目录下的所有文件中查找"main"字符串
	
	grep -n "linux" /etc/passwd  
			---> 从/etc/passwd文件中查找"linux"字符串
			
	grep -n "^linux" /etc/passwd 
			---> 从/etc/pwaasw文件中查找每行内容头为"linux"字符串
			
	grep -n "bash$" /etc/passwd 
			---> 从/etc/pwaasw文件中查找每行内容末尾为"bash"字符串
			
	grep -n "^linux$" /etc/passwd 
			---> 从/etc/pwaasw文件中查找每行内容开头和末尾都为"linux"字符串		
				
	grep -ni "MAIN" helloworld.c  
			---> 从helloword.c文件中查找"MAIN"字符串,不区分大小写   
			
    grep -nwR "int" ./ 
    		---> 从当前目录下所有的文件中查找"int字符串",按照单词

	grep -nwR "in" ./ 
    		---> 从当前目录下所有的文件中查找"in字符串",按照单词
    
    grep -nR "int" ./ 
    		---> 从当前目录下所有的文件中查找"int字符串",按照单词

8.cut命令

作用:从文件中按照某种格式截取字符串

用法:
	cut -d "分隔符" -f 截取的域  从哪个文件中截取(文件的名字)
	
	-d : 指定分隔符
	-f : 指定截取的域, 
		表示域的方式,如果截取的域连续使用“-”隔开,比如3-6.
			如果截取的域不连续使用“,”隔开,比如1,6,7
			截取的域既有连续又有不连续的,比如 1-3,6,7
	
	假设分隔符为":", 
	linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
	   1  2   3    4      5         6          7
	   |  |   |	   | 	  |			|		   |---> 使用bash解析器
	   |  |   |	   |	  |			|---> 家目录
	   |  |   |    |   	  |----> 用户信息
	   |  |   |    |---> 组ID
	   |  |   |---> 用户ID
	   |  |---> 密码
	   |---> 用户名
		
案例:	
	将以下两行内容写到当前目录的passwd文件中
	root:x:0:0:root:/root:/bin/bash
	linux:x:1000:1000:linux,,,:/home/linux:/bin/bash

	从passwd文件中截取用户的用户名及对应的加目录:
	cut -d ":" -f 1,6 ./passwd 
	
	从passwd文件中截取用户ID和组ID
	cut -d ":" -f 3-4 ./passwd 
	cut -d ":" -f 1,3-4 ./passwd 

9.管道命令 |

功能:将前一个命令的输出作为后一个命令的输入

格式:
	shell命令1 | shell命令2 | shell命令3 | ....
	
案例:
	从当前目录下下查找hello.c文件是否存在,需要使用管道符
	思路:将ls命令的执行结果给到下一个命令,使用搜索的命令查找hello.c字符串
	ls -l | grep "hello.c"
	
	从/etc/passwd文件中查找linux用户对应的信息,
	grep -n "^linux" /etc/passwd 
  	
    cat /etc/passwd | grep "^linux" 
    cat -n /etc/pwsswd | grep "linux" 
练习题:

 	1. 从/etc/passwd文件中查找的linux用户对应的信息,
 		并从中截取家目录对应的字符串截取出来。
	grep "^linux" /etc/passwd | cut -d ":" -f 6
				|
				|
				|
				|
	linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
  域   1  2   3    4       5        6          7
	-------------------------------------------------------
	grep -n "^linux" /etc/passwd | cut -d ":" -f 7
				|
				|
				|
				|
	46:linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
  域 1   2   3   4    5      6          7        8
	-------------------------------------------------------	
	head -46 /etc/passwd | tail -1 |  cut -d ":" -f 6
		  | 
		  |----> linux用户在第46行,你们的linux用户不一定在46行
	
    2. 从/etc/passwd文件中查找的linux用户对应的信息,
    	并从中截取用户ID和组ID对应的字符串截取出来。
    	
    	grep "^linux" /etc/passwd | cut -d ":" -f 3-4
				|
				|
				|
				|
	linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
  域   1  2   3    4       5        6          7
	-------------------------------------------------------
	grep -n "^linux" /etc/passwd | cut -d ":" -f 4-5
				|
				|
				|
				|
	46:linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
  域 1   2   3   4    5      6          7        8
	-------------------------------------------------------	
	head -46 /etc/passwd | tail -1 |  cut -d ":" -f 3-4
		  | 
		  |----> linux用户在第46行,你们的linux用户不一定在46行	

二、通配符的使用

在终端中执行以下命令:
touch a1.c a2.c a3.c a4.c aa.c ab.c ac.c ad.c aaa.c abb.c acc.c add.c

1. * ---> 匹配多个字符
	linux@ubuntu:day02$ ls a*.c
	a1.c  a2.c  a3.c  a4.c  aaa.c  aa.c  abb.c  ab.c  ac.c  acc.c  ad.c  add.c

2. ? ---> 匹配一个字符
	linux@ubuntu:day02$ ls a?.c
	a1.c  a2.c  a3.c  a4.c  aa.c  ab.c  ac.c  ad.c

3. [] ---> 匹配中括号中的某一个字符
    linux@ubuntu:day02$ ls a[abcd].c  ---> 第2个字符为abcd中的任意一个
    aa.c  ab.c  ac.c  ad.c
    linux@ubuntu:day02$ ls a[a-d].c  ---> 第2个字符为a-d中的任意一个
    aa.c  ab.c  ac.c  ad.c
    linux@ubuntu:day02$ ls a[1-4].c   ---> 第2个字符为1234中的任意一个
    a1.c  a2.c  a3.c  a4.c
    linux@ubuntu:day02$ ls a[1234].c   ---> 第2个字符为1-4中的任意一个
    a1.c  a2.c  a3.c  a4.c
    linux@ubuntu:day02$ ls a[^a-d].c   ---> 第2个字符为除了a-d中的任意一个
    a1.c  a2.c  a3.c  a4.c

三、文件属性操作相关命令

1.修改文件权限的命令 --> chmod

1. 文件权限相关的介绍
	-rwxrwxr-x 1 linux linux 16472 Nov 16 17:50 a.out
	| |  |  |  |   |     |     |        |         |----> 文件名
	| |  |  |  |   |     |     |        |----> 时间
    | |  |  |  |   |     |     |----> 文件大小
    | |  |  |  |   |     |----> 文件所属的组
    | |  |  |  |   |----> 文件所属用户
    | |  |  |  |----> 硬链接数
    | |  |  |----> 文件其他用户的权限
    | |  |----> 文件所属组的权限
    | |----> 文件所属用户的权限
    |----> 文件的类型

2. 文件的类型字符
	bsp-lcd
	块设备文件/套接字文件/管道文件/普通文件/链接文件/字符设备文件/目录

3. 文件权限的字符
	r : 具有可读的权限(4)
	w :具有可写的权限(2)
	x :具有可执行的权限(1)
	- :没有此权限(0)

4. 文件所属用户的字符
	u : 表示普通用户(user)
	g : 表示组(group)
	o : 表示其他用户(other)
	a : 所有的用户(all)

5. 修改文件权限的字符
	+ :添加权限
	- :删除权限
	= :修改权限

6. 修改文件的权限
	方式1:
	格式:chmod  文件的权限  要修改的文件名
					|
					|
		"augo" + "+/-/=" + "rwx" : 从任意组中任选一个或多个字符拼接成一个字符串
		
	练习:
		chmod u+x hello.c   ---> 给hello.c所属用户添加可执行的权限
		chmod g-w hello.c   ---> 给hello.c所属组移除可写的权限
		chmod o=rw hello.c  ---> 给hello.c所属其他用户修改为可读可写的权限
		chmod a=rwx hello.c ---> 给hello.c所属用户,组,其他用户修改为
									可读可写可执行的权限。
	
    方式2:
    格式:chmod  文件的权限  要修改的文件名
    				|
    				|
    	文件权限对应的数字组合成一个新的数字
    	(4+2+1) + (4+2+1) + (4+2+1) = 0777
    	文件所属的用户有次权限就用对应的数字表示,没有则用0表示
    	
    练习:
    	chmod 0666 hello.c  ---> 将hello.c所属用户,组,其他用户修改为,
    		  ||||              可读,可写,没有可执行的权限
    		  ||||---> 表示所属其他用户对应的权限(可读(4) + 可写(2) + 不可执行(0))
    		  |||---> 表示所属组对应的权限(可读(4) + 可写(2) + 不可执行(0))
    		  ||---> 表示所属用户对应的权限(可读(4) + 可写(2) + 不可执行(0))
    		  |---> 表示8进制数
		
		chmod 0777 hello.c  ---> 将hello.c所属用户,组,其他用户修改为,
    		  ||||              可读,可写,没有可执行的权限
    		  ||||---> 表示所属其他用户对应的权限(可读(4) + 可写(2) + 可执行(1))
    		  |||---> 表示所属组对应的权限(可读(4) + 可写(2) + 可执行(1))
    		  ||---> 表示所属用户对应的权限(可读(4) + 可写(2)+ 可执行(1))
    		  |---> 表示8进制数

2.修改文件所属组的命令 --> chgrp

chgrp  root hello.c  ---> 修改hello.c文件所属的组

3.修改文件所属用户和组的命令- -> chown

chown root:root  world.c  ---> 修改world.c文件所属的用户和组
chown root: world.c --->  修改world.c文件所属的用户和组
chown :root world.c --->  修改world.c文件所属的组
chown root world.c  --->  修改world.c文件所属的用户

四、创建链接文件命令

当使用ls -l查看文件的属性时,会有一个链接文件个数的信息:
drwxrwxr-x 2 linux linux     4096 Nov 16 00:53 day01
           |
           |----> 如果是一个目录,硬链接数表示目录下的子目录(文件夹)的个数

-rw-rw-r-- 1 linux linux 19066880 Nov 16 01:00 day01.tar
		   |
		   |----> 如果是一个普通的文件,硬链接数表示普通文件对应的硬链接文件的个数

1.创建软连接 --> ln -s

用法:
	ln -s 绝对路径/被链接的文件或者文件夹的名字  绝对路径/软链接文件或文件夹的名字

总结:
	1. 软链接文件的类型为l
	2. 软链接文件被创建之后,不会增加硬链接文件的个数
	3. 可以对文件或者文件夹创建软链接文件
	4. 在创建软链接文件时推荐使用绝对路径,尽量不要使用相对路径。
		原因:
		如果使用的是绝对路径,当将软链接文件拷贝到其他目录下,链接关系依然有效;
		如果使用的是相对路径,当将软链接文件拷贝到其他目录下,软链接关系将失效。
	5. windows是不支持软链接文件的,因此不可以将软链接文件拷贝到windows的共享文件夹中
		及/mnt/hgfs/share/中
	
	6. 如果被链接的文件删除,软链接文件将失效,
		如果重新创建新的被链接的文件,则链接关系会重新生效。
练习题:
	给windows共享的文件夹(/mnt/hgfs/share),
	在ubuntu的家目录(/home/linux)下创建一个软链接文件。
	ln -s /mnt/hgfs/share /home/linux/share 
	
	此时访问ubuntu系统家目录下的share文件夹就相当于访问/mnt/hgfs/share文件夹。

软链接文件的使用场合:
	当某个文件或者目录路径特别长时,可以尝试给此文件或目录创建软链接文件

2.创建硬链接 --> ln

格式:
	ln  绝对路径/被链接的文件名    绝对路径/硬链接文件的名字
	
总结:
	1. 只能对普通文件创建硬链接文件,不可以对目录创建硬链接文件
	2. 创建硬链接文件之后,文件的硬链接数会增加
	3. 被硬链接的文件和硬链接文件最终指向的是同一块空间。
		被硬链接文件和硬链接文件的inode号相同。
	4. 如果删除被硬链接的文件,硬链接文件依然有效,硬盘中的数据不会被删除,
    	只有文件的硬链接数为0时,硬盘中的数据才会被删除,
    	及被硬链接的文件和所有对应的硬链接文件都删除之后,硬盘中的数据才会被删除。

五、关机重启命令 --> shutdown

关机命令:
	sudo shutdown   15:10   ---> 15:10分关机
	sudo shutdown   +10     ---> 10分钟之后关机
	sudo shutdown   now     ---> 立即关机
	
重启命令:
	sudo reboot     15:10   ---> 15:10分重启
	sudo reboot     +10     ---> 10分钟之后重启
	sudo reboot     now     ---> 立即重启
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值