个人用户变量登记文件
- ~/.bashrc #一般会把个人设定(定义别名,各种路径等等)存放在这里面,因为每次在执行shell script的时候都会被执行一次
- ~/.bash_profile #也可以存放个人设定,但是之后再登录用户的时候执行一次
- 最好先备份一份
- 改好之后执行下后面的命令,使其生效 source ~./bashrc or source ~/.bash_profile(你改的哪个文件,就source哪个文件)
stty -a显示所有快捷键内容,同时设置快捷键也可以通过此命令(建议选择默认,改了也没有多大的意义)
- [root@Rendering6 ~]# stty --help #更多用法 help一下
常用字符
-
0或者多个字符 ? 单个字符 # 注释 \ 跳脱符号(用于命令太长的时候) | 管道 ; 连续命令(不会管你前面那个执行成功还是失败)
-
~家目录 $ 变量取代值 (ac=ab ;echo $ac ) & 调入后台工作(nohup command &) !非(判断为否的意思)
-
/ 路劲分隔符 ' ' 里面字符不具有特殊含义 " "特殊字符保留它的特殊含义 `指令` 优先执行的指令
-
()子shell也是优先执行 [字符]匹配其中一个字符 {命令}命令快的组合
-
> >> < < <<(这些字符都与标准输入,标准输出,错误输出有关)
输出重定向: > >> 都是起到输出重定向的功能,但是>会覆盖文件文里面的内容,>> 是在文件最后面进行追加
示例: >
$ echo “ac” > test.1
$ echo “bc” > test.1
$ cat test.1
bc
注:根据上述结果,最后面显示的是bc,也就是起到覆盖前面内容的效果,我一般是在进行文件初始化的时候,清空文件 >test.txt 如果使用echo > test.txt 这种方式清空文件就会多出一个$符号。
$ echo > test.1
$ cat -A test.1
$
示例:>>
$ echo “bc” >> test.2
$ echo “cc” >> test.2
$ cat test.2
bc
cc
注:>>使用场景还是蛮多,如果你需要文件的输出结果就得使用>>,便于进行文件分析等等
输入重定向(应该是这么叫把,我自己也不确定):< 是从文件中获取标准输入 << 是从交互式程序获取标准输入 <<< 把从后面获取标准输入当做前面命令的参数(看起来有些拗口,还是直接上实例:)
示例:<<
$ echo “23456” >>passwd.txt
$ passwd --stdin test < passwd.txt
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。
$ mysql -uroot -p < /data/mybak/ac.sql
$ passwd --stdin test < “123456”
bash: 123456: 没有那个文件或目录
注:"<" 只能从文件中获取标准输入
示例:<<
#第一种用法,直接显示在屏幕
$ cat << EOF
> 1
> 2
> 3
> EOF
1
2
3
#第二种用法,将输入写进某一个文件(也是在脚本中的最多的用法)
$ cat << EOF >> test.3
> 1
> 2
> 3
> EOF
$ cat test.3
1
2
3
注:默认情况下>前面是没有,为了显示效果额外加的
示例:<<< 语法: command <<< “WORD”
$ passwd --stdin test <<< “123456”
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。
$ mysql -u root -p <<< “select user,host from mysql.user;”
Enter password:
user host
root 127.0.0.1
root localhost
$ mysql -u root -p -e “select user,host from mysql.user;”
Enter password:
±-----±----------+
| user | host |
±-----±----------+
| root | 127.0.0.1 |
| root | localhost |
±-----±----------+
$ nginx -t <<< “/usr/local/nginx/conf/nginx.conf”
nginx: the configuration file /opt/app/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/app/nginx/conf/nginx.conf test is successful
注:感觉用处也不是很大的,知道这么个作用把
将命令放到后台工作
- 第一种通过:nohup command & 将命令放到后台执行
[root@Rendering6 ~]# nohup cat anaconda-ks.cfg &
[3] 1282 #[ job number ] PID 工作号码 注:在Linux中,只要把数据放到后台执行都会给个job number pid是程序一旦产生,bash就会自动分配给你 - 第二种:command &
[root@Rendering6 ~]# cat anaconda-ks.cfg &>/dev/null & #直接在命令后面加&也可以丢进后台执行,但是需要把结果输出丢到一个文件里面,不然就会打印到屏幕上。
[3] 1288
输出与输入
root@test:/opt/scripts/my.scripts 18:07:41
#输出 > 清空文件并且加入内容 >>追加内容
# echo $PATH >>path.txt
root@test:/opt/scripts/my.scripts 18:08:13
# cat path.txt
/opt/app/jdk/bin:/opt/app/jdk/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/src/cmake-3.6.0-Linux-x86_64/bin:/root/bin
#输入 < << 跟 > > 作用相反,特性还是一样
root@test:/opt/scripts/my.scripts 18:10:39
# cat $ac < path.txt
/opt/app/jdk/bin:/opt/app/jdk/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/src/cmake-3.6.0-Linux-x86_64/bin:/root/bin
查询后台命令
-
jobs
参数:
-l 除了列出当前的后台运行程序,还能列出pid
-s 列出当前后台暂停运行的程序
-r 列出正在运行的操作[root@Rendering6 ~]# jobs #默认是列出后台所有的程序
[root@Rendering6 ~]# jobs -s
[root@Rendering6 ~]# jobs -l
将后台命令拿到当前窗口运行 -
fg [%] jobnumber #其中 % 可有可无
[root@Rendering6 ~]# fg 3
将后台暂停的命令放到后台运行 -
bg [%] jobnumber
[root@Rendering6 ~]# bg 2
; && ||
- ;是不管前面的命令执行成功还是失败,后面的命令都会执行
- &&(and) 前面的命令执行成果才会执行后面的
- || (or) 跟&&恰好相反
- 组合使用:command && command2 || command3 #当第一个命令成功就执行后面的&&语句,反之执行||的语句
cut与grep cut是截取数据(我一般是用awk去截取)
#cut常见参数
-
-d 指定分隔符
-
-f根据 -d指定的分隔符截取数据(一般是-d -f联合使用)
-
-c以字符为单位截取字符
[root@Rendering6 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Rendering6 ~]# echo $PATH | cut -d ‘:’ -f 1,2
/usr/local/sbin:/usr/local/bin[root@Rendering6 ~]# export
declare -x HISTCONTROL=“ignoredups”
[root@Rendering6 ~]# export | cut -c 1,2,3,4,5,6,7 #有个时候wak截取不出来的数据可以用-c这个参数来截取一下
cut还是有点玩不懂[root@Rendering6 ~]# export | grep '过滤的内容
[root@Rendering6 ~]# export | grep declare | grep -v grep # -v 取反平时搜索用的最平凡是这2个选项,当然还有更多的选项,后面细讲awk,sed,grep三剑客的时候会着重介绍
**sort wc uniq tr **
sort (默认按照首字母进行排序)
常见指令
- -n 根据数字大小进行排序(用的多些)
- -t 指定分隔 默认是TAB键
- -k 后面接数字,按第几列排序(用的也多)
- -r 反序列排序(默认是升序,通过r变成降序)(用的多些)
[root@Rendering6 ~]# sort -t “:” -nk3 -r /etc/shadow
systemd-network:!!:17976::::::
sshd:!!:17976::::::
postfix:!!:17976::::::
polkitd:!!:17976::::::
dbus:!!:17976::::::
uniq 去重 一般是直接在命令后面uniq即可,就可以达到去重的效果
- -i 忽略大小写
- -c 计数
[root@Rendering6 ~]# last | cut -d’ ’ -f 1 | uniq -i
[root@Rendering6 ~]# last | cut -d’ ’ -f 1 | uniq -c #这个-c也是计算,但是是算你的同一个数字,在同列出现的几次
1 root
1 reboot
6 root
1 reboot
wc 计数
- -l 列出行
- -w 列出多少个字(英文单字)
- -m 列出多少个字符
[root@Rendering6 ~]# cat /etc/passwd | wc
19 27 846
注:输出的3个数字中分别代表: 行 字数 字符数 对应参数是:-l -w -m
tr 内容替换,最常用功能是:将一组字符集转换成为另外一种
- 用法:tr [选项]… SET1 [SET2] #从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
tee #将左边|的结果进行保存,跟 | 一起使用
[root@Rendering home]# cat /etc/selinux/config | grep -v “^$” | tee q.txt |grep -v “^#”
SELINUX=enforcing
SELINUXTYPE=targeted
[root@Rendering home]# cat q.txt
#This file controls the state of SELinux on the system.
#SELINUX= can take one of these three values:
[root@Rendering home]# cat /etc/selinux/config | grep -v “^$”|tee q.txt|grep -v “^#”|tee -a q.txt # -a 累加
tr #可以进行文字替换(有需求的可以了解一下),常用的替换是 sed ‘s/ab/AB/g’
join paste expand有兴趣的可以去了解下,我在使用中没见过
split 文件切割 用法:split [选项]… [需要分割的源文件] [被分割后的文件名] #记得后面一定得加分割后的文件名,不然默认给你弄一堆乱七八的名字
- -b +文件分割大小 可加单位(KB,M,G)
- -l 以行数来进行分割
[root@Rendering6 tmp]# ll -h ac.txt
-rw-r–r-- 1 root root 1000M 9月 20 23:16 ac.txt
[root@Rendering6 tmp]# split -b 300M ac.txt ac.txt # -b 以大小来分割
[root@Rendering6 tmp]# split -l 20 ac.txt ab #以行数来分割 其他参数请参考split --help
pr将文件切割为很多分并且打印(r命令将大文件分割成多个页面进行打印,并在每个页面上加上标题。)
更多用法请参考:pr --help
xargs(参数替换)xarge可以读取左边stdin(正确输出),并以空格符或断行符作为分辨,将stdin的值分隔为参数。
-
-o 将特殊字符(, . \ 空格等等)还原为一般字符
-
-e 后面接EOF语句
-
-p 在执行每个参数都要询问一次
-
-n 后面接次数,是使用几个参数的意思
-
xargs 后面没有接任何指令(-o -e -n都是指令),预设以echo的结果进行输出。
[root@Rendering6 ~]# cat /etc/passwd | cut -d’:’ -f1,2 | head -3 | xargs
root:x bin:x daemon:x
[root@Rendering6 ~]# qa=$(cat /etc/passwd | cut -d’:’ -f1,2 | head -3 )
[root@Rendering6 ~]# echo $qa
root:x bin:x daemon:x
#xargs根据上面显示的默认是以echo的结果进行输出的[root@Rendering6 ~]# cat /etc/passwd | cut -d’:’ -f1,2 | head -3 | xargs -n 2
root:x bin:x
daemon:x
#根据此实例可以看出,xargs是以空格作为分隔符,进行结果打印输出,我现在打印的是2个参数
其他参数可以参考:xargs --help
| 管道 是将左边程序或命令的输出作为参数传送给右边作为标准输入
- | 管道
[root@Rendering6 src]# ps aux | grep grep
root 2048 0.0 0.2 112724 988 pts/0 R+ 15:37 0:00 grep --color=auto grep
printf 格式化输出(得看百度的才清楚些)
diff 进行版本差异对比(基于ASCLL编码)
- diff 旧文件 新文件
- 更多用法:diff --help
vimddif 进行文件内容对比(我一般喜欢用这个)
其它的:
- {n,m} 连续n到m个字符 ‘go{2,3}g’ 指go到g之间连续有2到3个字符 例如:gooog goooog等等
- ’ ‘1’ 以w开头 ‘[^W]’ 反向选择的意思 ’
w ↩︎