1、shell
1.1 shell简介
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
常见的shell有两种,一种是图形界面,即GUI,一种是命令行终端,即CLI
1.常用的GUI:Graphic User Interface
- Windows
- X‐Window
- Gnome
- KDE
- Xfce
2.常用的CLI:Command Line Interface
- bash
- sh
- csh
- zsh
- ksh
- tcsh
Redhat Linux使用的是:bash shell
1.2 本地控制台访问命令行
命令行是可被用来输入指令到计算机系统中的基于文本的界面。 Linux的命令行是通过一个叫做shell程序提供。Redhat系统默认的shell为Bourne‐Again Shell(bash)。 Bash是在类UNIX系统中,是Bourne shell(sh)使用的最成功的其中一个shell的改进版本。
当shell被交互使用时,它将显示一个字符串时,它从用户等待一个命令。这就是所谓的shell提示符。当一个普通用户启动一个shell,默认提示以$字符结束。
管理员用户:
[root@jlin ~]#
普通用户:
[root@jlin ~]$
2、Linux基础命令
命令格式
命令 [选项] [参数]
选项:(可以有0个或多个)
短选项:‐
多个选项可以组合: ‐a ‐b = ‐ab
长选项:‐‐
长选项通常不能组合
参数:命令的作用对象(可以有0个或多个)
命令类型
Linux命令分为两种类型:
- 内部命令:shell内置
- 外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件
type #显示指定命令属于哪种类型
[root@jlin ~]# type cd
cd 是 shell 内建
基础命令
目录管理命令
ls命令 列出目录内容
‐l # 长格式
以长格式显示的第一段含义:
第一个字符:文件类型
‐ #普通文件(f)
d #目录文件
b #块设备文件(block)
c #字符设备文件(character)
l #符号链接文件(symbolic link file)
p #命令管道(pipe)
s #套接字文件(socket)
后面九位字符:文件权限
9位,每3位一组,每一组:rwx(读,写,执行)
以长格式显示的第二段含义:
文件硬链接的次数
以长格式显示的第三段含义:
文件的属主(owner)
以长格式显示的第四段含义:
文件的属组(group)
以长格式显示的第五段含义:
文件大小(size),单位是字节
以长格式显示的第六,七,八段含义:
时间戳(timestamp),最近一次被修改的时间
访问 #access
修改 #modify,文件内容发生改变
改变 #change,metadata(元数据)
‐h #做单位转换
‐a #显示以.开头的隐藏文件
. #表示当前目录
.. #表示父目录
‐d #显示目录自身属性
‐i #显示文件的inode(index node)
‐r #逆序显示
‐R #递归(recursive)显示
// 示例
[root@jlin ~]# ls -l
总用量 8
-rw-------. 1 root root 1766 5月 27 02:15 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 5月 27 02:18 Desktop
drwxr-xr-x. 2 root root 6 5月 27 02:18 Documents
drwxr-xr-x. 2 root root 6 5月 27 02:18 Downloads
-rw-r--r--. 1 root root 1797 5月 27 02:17 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 5月 27 02:18 Music
drwxr-xr-x. 2 root root 6 5月 27 02:18 Pictures
drwxr-xr-x. 2 root root 6 5月 27 02:18 Public
drwxr-xr-x. 2 root root 6 5月 27 02:18 Templates
drwxr-xr-x. 2 root root 6 5月 27 02:18 Videos
[root@jlin ~]# ls -h
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
[root@jlin ~]# ls -a
. .bash_profile .dbus .ICEauthority Public
.. .bashrc Desktop initial-setup-ks.cfg .tcshrc
anaconda-ks.cfg .cache Documents .local Templates
.bash_history .config Downloads Music Videos
.bash_logout .cshrc .esd_auth Pictures .viminfo
[root@jlin ~]# ls .
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
[root@jlin ~]# ls ..
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@jlin ~]# ls -d
.
[root@jlin ~]# ls -i
100663375 anaconda-ks.cfg 100663397 initial-setup-ks.cfg 1830150 Templates
68012286 Desktop 100674629 Music 33586201 Videos
68012287 Documents 1830151 Pictures
100674628 Downloads 33586200 Public
[root@jlin ~]# ls -r
Videos Public Music Downloads Desktop
Templates Pictures initial-setup-ks.cfg Documents anaconda-ks.cfg
[root@jlin ~]# ls -R
.:
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
./Desktop:
./Documents:
./Downloads:
./Music:
./Pictures:
./Public:
./Templates:
./Videos:
cd命令 切换目录
cd #切换到用户家目录
cd /mnt #切换到/mnt目录
cd .. #切换到当前目录的上一级目录
// 示例
[root@jlin ~]# cd /mnt
[root@jlin mnt]# cd ..
[root@jlin /]# cd
[root@jlin ~]#
pwd命令 查看当前所在目录路径
// 示例
[root@jlin ~]# pwd
/root
tree命令 查看目录树
‐d #只显示目录
‐L #level,指定显示的层级数目
‐P #pattern,只显示由指定pattern匹配到的路径
// 示例
[root@jlin ~]# tree -d
.
├── Desktop
├── Documents
├── Downloads
├── Music
├── Pictures
├── Public
├── Templates
└── Videos
[root@jlin ~]# tree -l
.
├── anaconda-ks.cfg
├── Desktop
├── Documents
├── Downloads
├── initial-setup-ks.cfg
├── Music
├── Pictures
├── Public
├── Templates
└── Videos
[root@jlin ~]# tree -p
.
├── [-rw-------] anaconda-ks.cfg
├── [drwxr-xr-x] Desktop
├── [drwxr-xr-x] Documents
├── [drwxr-xr-x] Downloads
├── [-rw-r--r--] initial-setup-ks.cfg
├── [drwxr-xr-x] Music
├── [drwxr-xr-x] Pictures
├── [drwxr-xr-x] Public
├── [drwxr-xr-x] Templates
└── [drwxr-xr-x] Videos
echo命令 回声
// 显示普通字符串
[root@jlin ~]# echo "test"
test
// 显示转义字符
[root@jlin ~]# echo "\"test\""
"test"
// 显示命令执行结果
[root@jlin ~]# echo `pwd`
/root
// 显示结果定向至文件
[root@jlin ~]# echo "test" >> test
[root@jlin ~]# cat test
test
// 显示密码并修改用户密码
[root@jlin ~]# echo "123qwe" | passwd --stdin qingyu
更改用户 qingyu 的密码 。
passwd:所有的身份验证令牌已经成功更新。
文件管理命令
mkdir命令 创建目录
‐p #创建目录时若父目录不存在则自动创建
‐v #显示目录创建过程
// 示例
[root@jlin ~]# mkdir jlin
[root@jlin ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Music Public Videos
Desktop Downloads jlin Pictures Templates
[root@jlin ~]# mkdir -p JLL/LLJ
[root@jlin ~]# ls JLL/
LLJ
[root@jlin ~]# mkdir -pv LLL/JJJ
mkdir: 已创建目录 "LLL"
mkdir: 已创建目录 "LLL/JJJ"
rmdir命令 删除目录,只能删除空目录
// 示例
[root@jlin ~]# rmdir jlin/
[root@jlin ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg LLL Pictures Templates
Desktop Downloads JLL Music Public Videos
touch命令 创建一个空文件
touch jlin #创建jlin文件
touch {1..17} #创建1-17文件
touch test{1-17} #创建test1-17文件
// 示例
[root@jlin ~]# touch jlin
[root@jlin ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Music Public Videos
Desktop Downloads jlin Pictures Templates
[root@jlin ~]# touch {1..17}
[root@jlin ~]# ls
1 12 15 2 5 8 Desktop initial-setup-ks.cfg Pictures Videos
10 13 16 3 6 9 Documents jlin Public
11 14 17 4 7 anaconda-ks.cfg Downloads Music Templates
[root@jlin ~]# touch test{1..17}
[root@jlin ~]# ls
1 14 3 8 Downloads Public test12 test17 test6
10 15 4 9 initial-setup-ks.cfg Templates test13 test2 test7
11 16 5 anaconda-ks.cfg jlin test1 test14 test3 test8
12 17 6 Desktop Music test10 test15 test4 test9
13 2 7 Documents Pictures test11 test16 test5 Videos
stat命令 显示文件或文件系统的状态
stat jlin #查看文件jlin的状态
// 示例
[root@jlin ~]# stat jlin
文件:"jlin"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:100830766 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-07-08 02:24:15.185879499 -0400
最近更改:2021-07-08 02:24:15.185879499 -0400
最近改动:2021-07-08 02:24:15.185879499 -0400
创建时间:-
[root@jlin ~]#
rm命令 删除文件
‐r #递归删除,删除目录时必须使用此选项
‐f #强制删除,不询问
rm -rf test* #强制删除以test开头的所有文件
rm -rf {1..17} #强制删除1-17文件
// 示例
[root@jlin ~]# rm -f jlin
[root@jlin ~]# ls
1 14 3 8 Downloads Templates test13 test2 test7
10 15 4 9 initial-setup-ks.cfg test1 test14 test3 test8
11 16 5 anaconda-ks.cfg Music test10 test15 test4 test9
12 17 6 Desktop Pictures test11 test16 test5 Videos
13 2 7 Documents Public test12 test17 test6
[root@jlin ~]# rm -rf test*
[root@jlin ~]# ls
1 12 15 2 5 8 Desktop initial-setup-ks.cfg Public
10 13 16 3 6 9 Documents Music Templates
11 14 17 4 7 anaconda-ks.cfg Downloads Pictures Videos
[root@jlin ~]# rm -rf {1..17}
[root@jlin ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
cp命令 复制文件
‐a //归档复制,常用于备份
‐r //递归拷贝,拷贝目录时必须使用此选项
‐p //拷贝时保留原权限
mv命令 移动文件
mv JLin /mnt #将JLin文件移动到/mnt下
mv /mnt/Jlin /root/JJJ #将/mnt/JLin移动到/root下并重命名为JJJ
// 示例
[root@jlin ~]# mv JLin /mnt/
[root@jlin ~]# ls /mnt/
JLin
[root@jlin ~]# mv /mnt/JLin /root/JJJ
[root@jlin ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Music Public Videos
Desktop Downloads JJJ Pictures Templates
install命令 复制文件并且设置属性
‐m MODE
‐o OWNER
‐g GROUP
文本内容查看
cat命令 拼接文件内容并输出至标准输出
# cat EOF
[root@jlin ~]# cat > test <<EOF
> test1
> JLin
> QingYu
> EOF
[root@jlin ~]# cat test
test1
JLin
QingYu
-n #显示行号
// 示例
[root@jlin ~]# cat initial-setup-ks.cfg
#version=DEVEL
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
[root@jlin ~]# cat -n initial-setup-ks.cfg
1 #version=DEVEL
2 # X Window System configuration information
3 xconfig --startxonboot
4 # License agreement
5 eula --agreed
6 # System authorization information
7 auth --enableshadow --passalgo=sha512
8 # Use CDROM installation media
9 cdrom
10 # Use graphical install
more命令 全屏查看文件内容,只能从前往后,不能从后往前;文件内容显示完后自动退出
// 示例
[root@jlin ~]# more initial-setup-ks.cfg
#version=DEVEL
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
--More--(19%)
less命令 全屏查看文本文件内容,可以从前往后也可以从后往前
/ #查找字符
n #查找下一个
N #查找上一个
b #上一页
空格 #下一页
// 示例
[root@jlin ~]# less initial-setup-ks.cfg
network --bootproto=dhcp --device=ens34 --onboot=off --ipv6=auto --activate
network --hostname=localhost.localdomain
initial-setup-ks.cfg
head命令 从头部开始打印文件内容,默认打印10行
-n #指定打印的行数,可以是负数
// 示例
[root@jlin ~]# head initial-setup-ks.cfg
#version=DEVEL
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
[root@jlin ~]# head -n3 initial-setup-ks.cfg
#version=DEVEL
# X Window System configuration information
xconfig --startxonboot
tail命令 从尾部开始打印文件内容,默认打印10行
-n #指定打印的行数,可以是负数
head -15 | tail -1 #取出前十五行后看最后一行,查看第十五行的内容
// 示例
[root@jlin ~]# tail initial-setup-ks.cfg
%end
%addon com_redhat_kdump --enable --reserve-mb=auto
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
[root@jlin ~]# head -15 | tail -1 initial-setup-ks.cfg
%end
文本内容排序
sort #默认升序排序,不是按数值大小排序的
‐n #根据数值大小进行排序
‐r #逆序排序
‐t #字段分隔符
‐k #以哪个字段为关键字进行排序
‐u #去重,排序后相同的行只显示一次
‐f #排序时忽略字符大小写
uniq //报告重复的行(连续且完全相同方为重复)
‐c //显示文件中行重复的次数
‐d //只显示重复的行
‐u //只显示未重复的行
文本内容统计
wc(word count)
‐c #显示字节数
‐l #显示行数
‐w #显示单词数
// 大小统计
du #查看文件或目录占用的磁盘空间大小
‐h #以人类友好的方式显示大小
‐s #显示总的占用空间大小
df #报告文件系统磁盘空间使用情况
‐h #以人类友好的方式显示大小
‐i #显示inode信息
文本内容过滤
cut #截取文本内容
cut OPTION... [FILE]...
‐d #指定字段分隔符,默认是空格
‐f #指定要显示的字段
‐f 1,3 显示第1个字段和第3个字段
‐f 1‐3 显示第1个字段到第3个字段
awk #基于列的文本报告工具
‐F'' #选择分隔符;分隔符用单引号引起来
'/root/' #匹配关键字root的行
'{print $#}' #选择打印第#列
'NR==#{print $#}' #选择打印第几行第几列
sed #基于行的过滤和转换文本的流编辑器
‐i #修改文件内容
sed ‐i 's/原字符串/新字符串/' file
#字符串替换原字符串,只替换每行第一个匹配到的字符
sed ‐i 's/原字符串/新字符串/g' file
#字符串替换原字符串,替换正行所有匹配到的字符串
grep egrep fgrep #文本内容查找
grep #根据模式搜索文本内容,并将符合模式的内容行显示出来。
#使用基本正则表达式定义的模式来过滤文本的命令。
Pattern(模式) #文本字符和正则表达式的元字符组合而成的匹配条件
‐i #忽略大小写
‐‐color #匹配到的内容高亮显示
‐v #显示没有被模式匹配到的行
‐o #只显示被模式匹配到的字符串
‐E #使用扩展正则表达式。grep ‐E相当于使用egrep
‐q #静默模式,不输出任何信息
‐A1 #被模式匹配到的内容以及其后面一行的内容都显示出来,
#如果把1改成2就表示被模式匹配到的内容以及其后面2行的内容均显示出来
‐B1 #被模式匹配到的内容以及其前面一行的内容都显示出来,
‐C1 #被模式匹配到的内容以及其前后的行各显示1行
fgrep #不支持正则表达式,执行速度快
文件查找命令
find
// 实时查找,精确性强,遍历指定目录中所有文件完成查找
// 查找速度慢,支持众多查找标准
// 语法:find [OPTION...] 查找路径 查找标准 查找到以后的处理动作
查找路径 //默认为当前目录
查找标准 //默认为指定路径下的所有文件
‐name 'filename' #对文件名作精确匹配.支持glob通配符机制
‐iname 'filename' #文件名匹配时不区分大小写
‐regex pattern #基于正则表达式进行文件名匹配.以pattern
#匹配整个文件路径字符串,而不仅仅是文件名称
‐user username #根本属主来查找
‐group groupname #根据属组来查找
‐uid #根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
‐gid #根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
‐nouser #查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
‐nogroup #查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
‐type #根据文件类型来查找(f,d,c,b,l,p,s)
‐size #根据文件大小进行查找。如1k、1M,+10k、+10M,‐1k、‐1M, +表示大于,‐表示小于
[+|‐]
#K、#M、#G
#Unit表示(从#‐1到#之间的范围大小)
‐#Unit表示(从0到#‐1的范围大小)
+#Unit表示(大于#的所有)
‐mtime #修改时间
‐ctime #改变时间
‐atime //访问时间
+5 //5天前
‐5 //5天以内
‐mmin #多少分钟修改过
‐cmin #多少分钟改变过
‐amin #多少分钟访问过
+5 //5分钟前
‐5 //5分钟以内
‐perm mode #根据权限精确查找
‐perm ‐mode #文件权限能完全包含此mode时才符合条件
‐perm /mode #9位权限中有任何一位权限匹配都视为符合查找条件
// 组合条件:
‐a
‐o
‐not
!
例:
!A ‐a !B = !(A ‐o B)
!A ‐o !B = !(A ‐a B)
// 处理动作:默认为显示到屏幕上
‐print #显示
‐ls #类似ls ‐l的形式显示每一个文件的详细信息
‐delete #删除查找到的文件
‐fls /path/to/somefile #查找到的所有文件的长格式信息保存至指定文件中
‐ok COMMAND {} \; #对查找到的每个文件执行COMMAND,每次操作都需要用户确认
‐exec COMMAND {} \; #对查找到的每个文件执行COMMAND,操作不需要确认
// 注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数,此时命令执行可能会失败。而xargs可规避此问题。
xargs #通过管道将查找到的内容给xargs处理,xargs后面直接跟命令即可
### 如何获取命令帮助
~~~shell
//内部命令
help COMMAND
//外部命令
COMMAND ‐‐help
//在线文档
info COMMAND
//命令手册 manual
man COMMAND
//文档
/usr/share/doc
whatis COMMAND //用于查看COMMAND出现在man的哪一章节中。
//查询man帮助中此命令的作用
//man是分章节的,以下是每一章节的内容介绍:
1 用户命令(/bin,/usr/bin,/usr/local/bin);
2 系统调用;
3 库调用;
4 特殊文件(设备文件);
5 文件格式(配置文件 的语法);
6 游戏;
7 杂项(Miscellaneous);
8 管理命令(/sbin,/usr/sbin,/usr/local/sbin)
//man手册注意事项:
[] //可选
<> //必选
... //可以出现多次
| //多选一
{} //分组
NAME //命令名称及功能简要说明
SYNOPSIS //用法说明,包括可用的选项
DESCRIPTION //命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS //说明每一个选项的意义
FILES //此命令相关的配置文件
BUGS //报告bug
EXAMPLES //使用示例
SEE ALSO //另外参照
//man翻屏
SPACE //向后翻一屏
b //向前翻一屏
enter //向后翻一行
k //向前翻一行
//查找
/KEYWORD //向后
?KEYWORD //向前
n //下一个
N //前一个
q //退出
压缩、解压缩命令
压缩格式
gz,bz2,xz,zip,Z
compress #用此命令压缩的文件其文件名为 FILENAME.Z,解压用uncompress
gzip #压缩后的文件以 .gz结尾;只能压缩文件不能压缩目录
gzip /path/to/somefile #压缩完成后会删除原文件
‐d #解压缩,解压完成后会删除原文件
‐c #将结果输出至标准输出,保留源文件
‐# ##用1‐9代替,‐1压缩等级最低;‐9 压缩比最高。默认压缩比是‐6
‐l #查看压缩文件内的内容;从左至右依次显示为
#压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名称
gunzip #解压
gunzip /path/to/some_compress_file.gz #解压完成后会删除原文件
zcat /path/to/somefile.gz #不解压的情况下查看文本文件的内容
bzip2 #压缩后的文件以.bz2结尾
#bzip2是一款比gzip有着更大压缩比的压缩工具,使用格式近似
bzip2 /path/to/somefile #压缩完成后会删除原文件
‐d #解压缩,解压完成后会删除原文件
‐# ##用1‐9代替,指定压缩比,默认为6
‐k #keep,压缩时保留原文件
bunzip2 #解压
bunzip2 /path/to/some_compress_file.bz2 #解压完成后会删除原文
bzcat /path/to/somefile.bz2 #不解压的情况下查看文本文件的内容
xz #压缩后的文件以.xz结尾
#比bzip2有着更大压缩比的压缩工具,使用格式近似
xz /path/to/somefile #压缩完成后会删除原文件
‐d #解压缩,解压完成后会删除原文件
‐# ##用1‐9代替,指定压缩比,默认为6
‐k #keep,压缩时保留原文件
unxz #解压
unxz /path/to/some_compress_file.xz #解压完成后会删除原文件
xzcat /path/to/somefile.xz #不解压的情况下查看文本文件的内容
zip #既归档又压缩的工具。zip可以压缩目录
#gz、bz2、xz都只能压缩文件,zip压缩后不会删除原文件
zip filename.zip file1 file2 ...
zip filename.zip DIR/*
unzip
unzip filename.zip
归档archive
#归档,归档本身并不意味着压缩
tar #归档工具,只归档不压缩
‐c #创建归档文件
‐f #操作的归档文件
‐x #还原归档
‐v #显示归档过程
‐p #归档时保留权限信息。只有管理员才有权限用此选项
‐C #将展开的归档文件保存至指定目录下
‐‐delete #从归档文件中删除文件
‐‐xattrs #在归档时保留文件的扩展属性信息
‐tf /path/to/file.tar #不展开归档,直接查看归档了哪些文件
‐zcf #归档并调用gzip压缩
‐zxf #调用gzip解压缩并展开归档
‐jcf #归档并调用bzip2压缩
‐jxf #调用bzip2解压缩并展开归档
‐Jcf #归档并调用xz压缩
‐Jxf #调用xz解压缩并展开归档
重定向与管道
#系统设定:
默认输入设备 #标准输入,STDIN,0 (键盘)
默认输出设备 #标准输出,STDOUT,1 (显示器)
标准错误输出 #STDERR,2 (显示器)
// I/O重定向:
> #覆盖输出
>> #追加输出
2> #重定向错误输出
2>> #追加重定向错误输出
&> #覆盖重定向标准输出或错误输出至同一个文件
&>> #追加重定向标准输出或错误输出至同一个文件
< #覆盖输入
<< #追加输入
管道 #前一个命令的输出,作为后一个命令的输入。最后一个命令会在当前shell进程的子shell进程中执行
命令1 | 命令2 | 命令3 | ...
tee #从标准输入读取数据,输出一份到屏幕上,一份保存到文件
// 示例
[root@localhost ~]# echo "hello world" | tee /tmp/hello.out
hello world
[root@localhost ~]# cat /tmp/hello.out
hello world
3、bash特性
3.1 bash支持以下特性
- 支持命令历史、命令补全
- 支持管道、重定向
- 支持命令别名
- 支持命令行编辑
- 支持命令行展开
- 支持文件名通配
- 支持变量
- 支持变成
3.2 bash支持的引号
`` //反引号,键盘左上角Esc下面的键,用于命令替换
"" //双引号,弱引用,可以实现变量替换
'' //单引号,强引用,不完成变量替换
3.3 bash常用操作
//光标跳转
Ctrl+a //跳到命令行首
Ctrl+e //跳到命令行尾
Ctrl+u //剪切光标至命令首的内容
Ctrl+k //剪切光标至命令尾的内容
Ctrl+<-- //光标定位到离自己最近的一个单词前面
Ctrl+p //重复上一次命令
Ctrl+w //剪切前面的字符至上一个空格处
Ctrl+y //粘贴或者恢复上次的删除
Ctrl+l //清屏
Ctrl+s //暂时冻结当前shell的输入
Ctrl+q //解冻
//命令历史
history //查看命令历史
-c //清空命令历史
-d OFFSET [n] //删除指定位置的命令历史
-w //保存命令历史至历史文件~/.bash_history中
//命令历史的使用技巧
!n //执行命令历史中的第n条命令
!-n //执行命令历史中的倒数第n条命令
!! //执行上一条命令
!string //执行命令历史中最近一个以指定字符串开头的命令
!$ //应用前一个命令的最后一个参数
esc . //按下esc松开后按.,应用前一个命令的最后一个参数
//控制命令历史的历史方式
//环境变量 HISTCONTROL
ignoredups //忽略重复的命令(连续且相同方为“重复”)
ignorespace //忽略所有以空格开头的命令,如“ls -l”
ignoreboth //ignoredups和ignorespsce均生效
修改环境变量HISTCONTROL值的方式
export HISTCONTROL=ignoreboth
//命令补全
搜索PATH环境变量所指定的每个路径下以我们给出的字符串开头的可执行文件
如果多于一个,两次tab,可以给出列表,否则将直接补全
//路径补全
搜索我们给出的起始路径下的每个文件名,并试图补全
//命令别名
alias Aliasname='COMMAND [options] [arguments]'
配置文件所在:/etc/bashrc
在shell中定义的别名仅在当前shell生命周期中有效,别名的有效范围为当前的shell前程
//命令转换(命令转义) //把命令中某个子命令替换为其执行结果的过程
$(COMMAND) //推荐方式
或
'COMMAND'
//命令行常见符号
~ //展开为用户的家目录
~USERNAME //展开为指定用户的家目录
{} //课承载一个以逗号分隔的列表,并将其展开为多个路径
/tmp/{a,b} = /tmp/a, /tmp/b
/tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi
//文件名通配 globbing
* //匹配任意长度的任意字符
? //匹配任意单个字符
[] //匹配指定范围内的任意单个字符
[abc],[a‐m],[0‐9]
[[:space:]] //表示空白字符
[[:punct:]] //表示标点符号
[[:lower:]] //表示小写字母
[[:upper:]] //表示大写字母
[[:alpha:]] //表示大小写字母
[[:digit:]] //表示数字
[[:alnum:]] //表示数字和大小写字母
使用man 7 glob命令可以获得以上字符集合的帮助信息!!!
[^] //匹配指定范围之外的任意单个字符
//环境变量
PATH //命令搜索路径
HISTSIZE //命令历史缓冲区大小
SHELL //当前shell
//bash内置变量
RANDOM //保存着0‐32768之间的随机数