shell特性
1、history
[root@daixuan ~]# history 查看shell的命令历史
[root@daixuan ~]# echo $HISTSIZE 查看历史记录的变量
1000
[root@daixuan ~]# !! 查看上一条命令
echo $HISTSIZE
1000
[root@daixuan ~]# ls 1234.txt
1234.txt
[root@daixuan ~]# cat !$ !$代表上一条命令的最后一个参数
cat 1234.txt
jlkdjlkfjslkf[root@daixuan ~]# history
1171 ls 1234.txt
1172 cat 1234.txt
1173 history
[root@daixuan ~]# !1172 !+命令历史编号,执行1172条命令,
cat 1234.txt
jlkdjlkfjslkf[root@daixuan ~]#
[root@daixuan ~]# !c !c 执行命令历史中最近使用的以c开头的命令
cat 1234.txt
jlkdjlkfjslkf
双击tab键补全命令
2、别名alias
[root@daixuan ~]# alias aaa='cat 1234.txt' 只在当前shell中有效,需要加入配置文件中,其他shell才能生效
[root@daixuan ~]# alias
alias aaa='cat 1234.txt'
[root@daixuan ~]# aaa
jlkdjlkfjslkf
[root@daixuan ~]# unalias aaa 取消aaa别名
3、通配符
* 匹配任何字符
[root@daixuan ~]# ls *.txt 列出了当前目录下任何以txt结尾的文件
1234.txt 123.txt 12.txt 1.txt test.txt
?匹配一个字符
[root@daixuan ~]# ls ?.txt 一个问号?匹配一个字符
1.txt
[root@daixuan ~]# ls ???.txt 三个问号?匹配三个字符
123.txt 456.txt
4、管道符 | 作用是把一条命令的结果丢给另一条命令
[root@daixuan ~]# cat /etc/passwd | wc -l 查看/etc/passwd文件内容,查看行数
32
5、重定向
重定向 > 覆盖之前的内容
[root@daixuan ~]# cat 1.txt
test
[root@daixuan ~]# echo "12345678" > 1.txt
[root@daixuan ~]# cat 1.txt 内容已经更改
12345678
追加重定向 > 不会覆盖之前的内容
[root@daixuan ~]# echo "9 10 11 12" >> 1.txt
[root@daixuan ~]# cat 1.txt 内容已经添加,并且之前内容没有被覆盖
12345678
9 10 11 12
反向重定向 <,把文件的内容丢给一条命令
[root@daixuan ~]# wc -l < 1.txt 1.txt的内容是2行
错误重定向 2>(把错误信息重定向到指定文件中),覆盖文件内容
[root@daixuan ~]# ls 1111
ls: 无法访问1111: 没有那个文件或目录
[root@daixuan ~]# ls 1111 > 1.txt 错误信息不能重定向到1.txt文件中
ls: 无法访问1111: 没有那个文件或目录
[root@daixuan ~]# cat 1.txt
[root@daixuan ~]# ls 1111 2> 1.txt 使用2> 可以将错误信息重定向到1.txt中
[root@daixuan ~]# cat 1.txt
ls: 无法访问1111: 没有那个文件或目录
追加错误重定向,错误信息追加后不会将之前的文件内容覆盖
[root@daixuan ~]# ls 1111 2>> 1.txt
[root@daixuan ~]# cat 1.txt
ls: 无法访问1111: 没有那个文件或目录
ls: 无法访问1111: 没有那个文件或目录
6、进程的前后台调用fg、bg,暂停ctrl+z,查看jobs
[root@daixuan ~]# sleep 1234 ctrl+Z中断到后台
^Z
[3]+ Stopped sleep 1234
[root@daixuan ~]# jobs 3+优先级更高,2-优先级次,1优先级最低
[1] Stopped sleep 100
[2]- Stopped sleep 166
[3]+ Stopped sleep 1234
[root@daixuan ~]# fg fg调用优先级最高的到前台继续运行,调用的是默认的3+
sleep 1234
[root@daixuan ~]# fg 2 fg 2调用指定的id,id=2优先级升高
sleep 166
[root@daixuan ~]# jobs
[2]+ Stopped sleep 166
[3] Stopped sleep 1234
[root@daixuan ~]# fg
sleep 166
[root@daixuan ~]# fg
sleep 1234
^Z
[3]+ Stopped sleep 1234
[root@daixuan ~]# bg 使用bg将id=3的进程调到后台继续运行
[3]+ sleep 1234 &
[root@daixuan ~]# jobs
[3]+ Running sleep 1234 & Running表示在后台继续运行
shell变量
系统变量和自定义变量 变量名不大写,不用ls等系统命令,不用数字开头,不用一些关键字if、else等
1、系统环境变量
[root@daixuan ~]# env 查看系统环境变量
HOSTNAME=daixuan
TERM=xterm
SHELL=/bin/bash
[root@daixuan ~]# echo $HOSTNAME 显示变量的内容,或者引用变量,使用$
daixuan
[root@daixuan ~]# a=1
[root@daixuan ~]# set set输出所有环境变量,包括系统变量和自定义变量
BASH=/bin/bash
a=1
[root@daixuan ~]# a=1;b=2;a_2=12
[root@daixuan ~]# echo $a $b $a_2
1 2 12
[root@daixuan ~]# b='ls /tmp/' 变量内容包含空格、*,# 等字符需要单引号‘’
[root@daixuan ~]# echo $b
ls /tmp/
[root@daixuan ~]# which vim
/usr/bin/vim[root@daixuan ~]# myvim=`which vim` 使用反引号``,把命令作为变量来使用<==>/usr/bin/vim
[root@daixuan ~]# echo $myvim
/usr/bin/vim
[root@daixuan ~]# d="$myvim"3 把$myvim=/usr/bin/vim当做变量
[root@daixuan ~]# echo $d 输出变量d的内容
/usr/bin/vim3 /usr/bin/vim3
有时候使用变量需要做全局申明
[root@daixuan ~]# bash 输入bash进入到子shell,则子shell的变量已经不能使用了
[root@daixuan ~]# echo $d 输出为空
[root@daixuan ~]# export a=1
[root@daixuan ~]# bash
[root@daixuan ~]# echo $a1
[root@daixuan ~]# unset a
[root@daixuan ~]# echo $a 值为空
注:反引号用来直接引用反引号里面的命令,双引号里面如果有特殊符合比如说$,它是可以识别其含义的。而单引号里面如果有特殊符号,是不被识别的
PATH HOME SHELL定义环境变量
1、/etc/profile 表示系统内针对任何用户(root或daixuan)都生效的环境变量的配置文件
[root@daixuan ~]# vim /etc/profile /etc/profle 会定义很多环境变量,直接修改/etc/profile是不太好的,最好是创建/etc/profile.d/custom.sh
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in /etc/profile.d/
[root@daixuan ~]# vim /etc/profile.d/path.sh
#!/bin/bash
export PATH=$PATH:/tmp/:data/bin/
[root@daixuan ~]# source /etc/profile 让配置文件生效,source加载/etc/profile,会加载/etc/profile.d/下的所有.sh文件
[root@daixuan ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/tmp/:data/bin/ a/bin/
2、/etc/bashrc 全局的环境变量别名
[root@daixuan ~]# vim /etc/bashrc
# /etc/bashrc
# System wide functions and aliases
# Environment stuff goes in /etc/profile
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
3、~/.bash_profile 定义用户自己的一些环境变量的配置文件
4、~/.bashrc 用户自定义alias命令写入下面那个配置文件 ,用户登录时或者打开shell执行的文件
shell通配符
* 任何字符
?一个字符
#注释符号,解释说明 [root@daixuan ~]# #ls 1.txt 没有结果,因为命令已经注释掉
\ 脱意符号
[root@daixuan ~]# ls #1.txt 111 1234.txt 1.tar.gz 相当于[root@daixuan ~]# ls ,#后面的没有任何意义
[root@daixuan ~]# ls \#1.txt 系统认为#1.txt是一个目录
ls: 无法访问#1.txt: 没有那个文件或目录
[root@daixuan ~]# touch \#1.txt 创建#1.txt文件
[root@daixuan ~]# ls \#* 创建#1.txt文件成功
#1.txt
| 管道符,把一条命令的结果丢给另一条命令
[root@daixuan ~]# cat 1.txt | wc -l
2
$
[root@daixuan ~]# echo $PATH 表示在使用这个变量
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/tmp/:data/bin/
[root@daixuan ~]# cat !$ !$表示上一条命令的最后一个参数
cat $PATH
在vim中$符号作为一行的行尾
; 把两条命令写在一行,中间加分号
[root@daixuan ~]# ll 1234.txt;ll 123.txt
-rw-r--r-- 1 root root 24 10月 29 17:38 1234.txt
-rw-r--r-- 1 root root 13 10月 25 00:37 123.txt
&把一条命令移动到后台运行
[root@daixuan ~]# sleep 10&
[1] 22423
[root@daixuan ~]# jobs
[1]+ Running sleep 10 &
[root@daixuan ~]# jobs
[1]+ Done sleep 10
&&表示把两条命令写在一起
[root@daixuan ~]# ls && touch 1.txt
> 重定向,覆盖内容
>> 追加重定向,不覆盖内容
2> 错误重定向,错误信息追加,覆盖内容
2>> 错误追加重定向,错误信息追加,但是不覆盖
< 反重定向,把右边文档的内容重定向给左边的命令
[root@daixuan ~]# wc -l < 1.txt
2
[0-9] 表示0-9之间的任何一位数字
[root@daixuan ~]# ls [12].txt
1.txt 2.txt
[root@daixuan ~]# ls 1.txt 2.txt
1.txt 2.txt
[root@daixuan ~]# ls [1-9].txt
1.txt 2.txt
[root@daixuan ~]# ls [1-9a-zA-Z].txt
1.txt 2.txt b.txt C.txt