文件操作、通配符、文件属性、创建链接文件、关机重启
一、文件操作相关命令
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 ---> 立即重启