四.shell基础
1.shell概念
提高用户访问操作系统的接口。
三次含义:
shell命令:可执行程序
命令解释器:默认的命令解释器是bash(/bin/bash)
shell编程
2.shell语法
格式:命令名 选项 参数
命令名:小写,单词或者缩写
选项:对命令的特别定义
短选项 -字母 (常用) -a
长选项 --单词 --all
多个选项:
分开写:-a -l
合并写:-al
参数:提供命令运行时所需信息,参数一般是文件名或者目录名
缺省参数:当前工作目录
命令名、选项、参数必须加空格。
3.查看帮助信息
1)man命令: man 命令名
2)pinfo命令: pinfo 命令名
3)help命令: help 内建命令
4)--help选项:外部命令 --help
4.目录操作命令
1)创建目录mkdir
(make directory)
语法:mkdir [选项] <目录名>
选项:
-p 创建目录时,若上级目录不存在一并创建
-m 权限 创建目录时,为目录设置权限(不使用-m时,有默认权限)
例如:
在当前目录下创建一个名为dashuju20-1的目录:
mkdir dashuju20-1
在当前目录下的dashuju20-1目录(不存在)下为每个同学创建一个子目录,子目录名为20308001-20308048:
mkdir -p dashuju20-1/203080{01..48}
在当前目录下的dashuju20-1目录(不存在)下为每个同学创建一个子目录,子目录名为20308001-20308048,再在每个同学的子目录下创建3个课程目录,分别为Linux、Network、English:
mkdir -p dashuju20-1/203080{01..48}/{Linux,Network,English}
在当前目录下创建一个以姓名命令的目录,其权限设置为rwxrw-r--:
mkdir -m u=rwx,g=rw,o=r zhangsan
mkdir -m 764 zhangsan
在当前目录下创建一个名为dashuju20-1的隐藏目录:
mkdir .dashuju20-1
2)切换目录cd
(change directory)
语法:cd <目录路径>
路径:
相对路径:参考当前工作
绝对路径:参考根目录
缺省路径时,默认切换到当前用户的家目录。
路径符号:
. 当前工作目录
.. 上级目录
~ 当前用户的家目录 cd ~等级于cd
~user user用户的家目录 cd ~user
- 上次工作
../.. 上上级目录
/ 根目录
家目录路径:
管理员:/root
普通用户:/home/与用户名同名的目录
3)复制目录cp
(copy directory )
4)移动目录mv
(move directory)
5)显示当前工作目录绝对路径pwd
(present working directory)
用法:pwd
6)删除目录rmdir/rm -r
(remove directory)
语法:rmdir 空目录
语法:rm -r 空或者非空目录
5.ls 列出目录的内容
语法:ls [选项] <目录名或者文件名>
参数:
目录名:列出该目录下的文件
文件名:列出该文件
参数缺省时,列出当前目录下的文件。
选项:
-l 列出文件的详细信息 (重点)
-a 列出所有文件,包含隐藏文件
-A 列出所有文件,包含隐藏文件,但不包含“.”和“..”
-i 显示文件的inode编码
-R 递归显示子目录
-d 像文件一样显示目录,不展开目录下的内容
ls -l 结果:
drwxr-xr-x. 3 root root 56 3月 31 11:00 dst
文件类型 文件的权限 其他的控制措施 链接数 文件拥有者 属组 文件大小 文件修改时间 文件名
文件类型:
- 文本文件
d 目录文件
l 软链接文件
c 字符设备文件
b 块设备文件
p 管道文件
s 套接字文件
其他的控制措施:
空格 没有使用其他控制措施
. 使用了SELinux上下文控制措施
+ 使用了ACL控制措施
链接数:
目录:子目录的个数
文件:硬链接的个数(硬链接就是为文件提供了不同的访问接口)
通配符:
ls file? ? 任意的一个字符
ls file* * 任意(没有、一个、多个)的字符
ls file_[ace] [] 匹配[]中的某一个字符
ls file_[!ace] [!] 不能包含[]中的任意一个字符
ls file_[1-5] [1-5] 匹配[]中该范围内的某个字符
ls file_{a,c,e} {} 匹配{}中的某一个字符
ls file_{1..5} {1..5} 匹配{}中该范围内的某个字符
ls file_{first,second,third} {first,second,third} 匹配{}中的某一个字符串
注:如果匹配的文件都不存在时,[ ]会失去模式的功能,变成一个单纯的字符串,且[ ]只能查找文件
{ }可查找文件、创建文件、生成序列字符转义:字符可以作为文件名的一部分
file*
'file*'
"file*"
当文件名不确定时,只能用""进行转义。
当文件名确定时,三种方法都可以。
例如:列出以file开头,中间是任意字符,结尾以“*”命名的文件
ls file*\*
文件颜色:
蓝色 目录文件
黑色 文本文件
绿色 可执行文件
红色 压缩文件
浅蓝色 软链接文件
蓝底白字: 硬链接文件
黑底黄字: 设备文件
黑底红字 被损坏的文件
6.文件的操作命令
(1)创建文件 touch
语法:touch [选项] <文件名...>
选项:
-a 修改访问时间
-m 修改修改时间
-d 年月日 使用指定的时间作为时间戳
-t 月日时分 使用指定的时间作为时间戳
-r <参考文件> 创建文件是参考指定文件的时间
例如:
touch file1
(2)复制文件/目录 cp
①cp [选项]... 源文件 目标文件 #复制并重命名
②cp [选项]... 源文件... 目录 #仅复制
③cp [选项]... -t 目录 源文件... #仅复制
选项:
-f 强制覆盖已经存在的文件
-i 覆盖之前会询问
-n 不会覆盖已存在文件
-u 只有源文件比目标文件新时,才覆盖;如果目标文件不存在,就直接复制
-r 递归复制目录(▲复制目录时必须用该选项)
-p 复制文件时保留属性
eg: src 、dst 为目录
cp src/file dst #把src目录下的file1复制到dst目录下
(普通用户操作就相当于强制覆盖,管理员操作时会询问)
cp src/file file11 #把src目录下的file1复制到dst目录下,并重命名file11 (如果第二参数是目录就复制,如果不是就复制并重命名)
cp -f src/file1 dst #目标文件不存在就复制,存在则强制覆盖
cp - i src/file1 dst #目标文件不存在就复制,存在则在覆盖之前会询问
cp - n src/file1 dst #目标文件不存在就复制,存在就不覆盖
cp - u src/file1 dst #目标文件不存在就复制,存在时只有源文件,比目标文件新时才覆盖
cp - p src/file1 dst #复制文件时,保留属性
cp - r src dst #把src目录复制到dst目录
cp file1/file2 dst 或者 cp -t dst file1 file2
(3)移动文件/目录 mv
★移动与复制的区别:复制后,源文件存在。移动后,源文件不存在。
①mv [选项]... 源文件 目标文件 #移动并重命名
②mv [选项]... 源文件... 目录 #仅移动
③mv [选项]... -t 目录 源文件... #仅移动
选项:没有-r和-p(移动目录不需要-r。没有-p选项,移动时默认保留属性)
-f 强制移动已经存在的文件
-i 移动之前会询问
-n 不会移动已存在文件
-u 只有源文件比目标文件新时,才移动;如果目标文件不存在,就直接移动
eg:src 、dst 为目录
移动目录: mv src dst (注意:移动目录不需要使用-r)
(4)删除文件/目录 rm
语法:rm [选项] <文件/目录...>
-f 强制执行(文件存在时直接删除不提示,文件不存在时直接删除不提示)
-i 删除时会询问
-r 递归删除目录(删除目录时必须用-r)
eg:
rm file1 #文件存在,强制删除。文件不存在,删除时会报错
rm -f flie1 #文件存在,强制删除.文件不存在直接忽略不提示
rm -i flie1 #文件存在,删除会询问.文件不存在,删除时会报错
rm -r #目录存在,强制删除。目录不存在,删除时会报错
★只要删除目录必须使用-r。
(5)查看文件类型 file
①ls -l 结果第一个字符
②文件颜色
③file
语法:file [文件] <参数或目录名>
eg: file file1 src
file * (找所有文件)
(6)显示文件内容 cat/head/tail/more/less
1)cat
显示整个文件的内容
语法:cat [选项] <文件名...>
选项:
-n 对每一行进行编号(编号从1开始)
-b 只对非空白行编号(编号从1开始)
-s 合并两行以上的连续空白行为一行
eg: cat -n file1 #显示file1内容时对每一行就行编号
cat -b file1 #显示file1内容时只对非空白行进行编号
cat -s file1 #显示file1内容时,合并连续空白行为一行
cat file1 file2 #同时显示file1 和file2 文件的内容
2)head
显示文件前几行或前几个字符
语法:head [选项] <文本文件名.....>
选项:
-n 行数 num #显示前num行内容
-c 字符数num #显示前num字符数
-v #显示文件名
eg:
①显示passwd文件前5行内容:
head -n 5 passwd
head -5 passwd(只能按行)
②显示passwd文件前4个字符:
head -c 4 passwd
③显示passwd和file1文件时,同时显示文件名:
head -v passwd file1 #默认显示每个文件前10行的内容
④显示passwd文件前10行内容:
head -n10 passwd
head passwd
3)tail
显示文件后几行或后几个字符
语法: tail [选项] <文件名.....>
选项:(没跟选项默认显示后10行)
-n 行数 num #显示后num行内容
-c 字符数num #显示后num字符数
-v #显示文件名
eg:
tail -c 5 passwd #显示passwd后五个字符(★包含非显示字符。eg:结束符)
tail passwd #显示passwd后10行内容
4)more
翻页查看文件内容
more 被查看文件名
5)less
翻页查看文件内容(功能更强)
语法: less [选项] <文件名>
选项:
-m 显示百分比
-N 显示行号
eg:
less -mN passwd
(7) 创建链接文件 ln link
链接文件分类:
软连接(符号链接):相当于快捷方式 浅蓝色
硬链接:为同一文件提供不同访问接口 蓝底白字
语法:ln [选项] <源文件> <链接文件>
选项:(不使用-s 默认为硬链接)
-s 创建软连接/符号链接 symbolic
-f 如果目标文件(链接文件)存在,强制覆盖
-i 如果目标文件(链接文件)存在,覆盖之前会询问
eg:
给passwd文件创建一个软连接,名为passwd_s:
ln -s passwd passwd_s
给passwd文件创建一个软连接,名为passwd_l:
ln passwd passwd_l
★软连接的注意事项:
- 通过软连接文件可以对源文件进行读写执行操作。
- 软连接文件和源文件时不同的文件。
- 删除软连接文件,不影响源文件。
- 对源文件进行删除、重命名、移动会导致软连接找不到所指向的文件,链接就变成”断裂“的链接。
可以对任何文件创建软软连接文件。
★软硬连接的注意事项:
- 不能给目录创建硬链接。
- 同时也不能跨文件系统、分区创建硬链接。
- 只有在硬链接数变成0,即所有访问接口都被删除,文件才被删除。
(8)切换用户 su switch user
语法: su <用户名>
eg:
切换到管理员 su root 或者 su(省略用户时,默认切换到管理员)
切换到普通用户stu: su stu
从管理员切换到普通用户不需要输入密码,切换到那个用户就输入哪个用户的密码。
(9)显示系统中登录的用户 who和 whoami
who:显示系统中所有登录用户,一般和 -H 使用
语法: who [选项] <参数>
whoami:只显示当前用户
(10)查询命令的存放路径which
命令属于可执行文件
语法:which 被查看命令
eg:
whic who
(11)关机和重启命令 shutdown
★(只有管理员才能执行)
语法:shutdown [选项] 时间 提示信息
选项:(省略选项时默认时关机,省略时间默认1分钟)
-P 关机
-h 关机
-r 重启
-k 只发送提示信息 ,不执行关机或者重启操作:
-c 撤销关机或者重启操作
eg:
<!--关机操作-->
请在5分钟后关机,并提示“Shutdown after 5 minutes”
shutdown -h 5 “Shutdown after 5 minutes ” 或者 shutdown -h +5 “Shutdown after 5 minutes ”
或者 shutdown +5 “Shutdown after 5 minutes ” 或者 shutdown 5 “Shutdown after 5 minutes ”
请立即关机,并提示“shutdown now”
shutdown -h now “shutdown now” 或者 shutdown -h 0 “shutdown now” 或者 shutdown -h +0 “shutdown now”
请在10:00关机,并提示“shutdown at 10:00am”
shutdown -h 10:00 “shutdown at 10:00am”
<!--重启操作-->
请在00:00重启,并提示“Reboot at 00:00am”
shutdown -r 00:00 “Reboot at 00:00am”
<!--取消关机和重启操作-->
shutdown -c
<!--发送提示信息-->
shutdown -k 20 “Don't shutdown or reboot ”
(12)查看历史命令 history
执行过的命令,是保存到缓存的,当退出终端时,默认保存到 ~/.bash_history 文件
快捷键:
上下键:查看执行过的命令
!n 重新执行地n条历史命令
!! 重新执行上一条历史命令
!string 重新执行以”string“字符串开头的命令
history命令:
语法:history [选项] <参数>
选项:
-a #将缓存的中历史命令保存到 ~/.bash_history
-c #清空缓存的命令
-d 数字n #删除缓存中第n条命令
eg:
history -a
history -c
history -d 999 #删除缓存中第999条命令
history 5 #显示最后五条历史命令
history #显示history中所有的历史命令
(13)其他命令
clear 清屏
uname 显示系统信息
date 显示日期
cal 显示日历 (默认的当月日历)
版权属于:数据盒博客
本文链接:https://shujuhe.cn/archives/35/
转载时须注明出处及本声明