shell的认识
shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机去执行各种操作。
1、记录命令历史
!!:连续两个!表示执行上一条指令
#pwd
/root
#!!
pwd
/root
!n:这里n是数字,表示执行历史命令中的第n条指令。
#!1002
pwd
/root
!字符串(字符串大于等于1):!pw表示执行命令历史中最近一次以pw开头的命令。
#!pw
pwd
/root
2、命令和文件名补全
按tab键可以帮助补全一个命令、一个路径或者一个文件名。连续两次tab键,系统会把所有的命令或者文件名列出来。
3、别名
通过alias把一个常用的并且很长的指令另取名为一个简单易记的指令。
#alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
也可以自定义的别名,alias【命令别名】=【具体的命令】
#alias cloud='pwd'
#cloud
/root
4、通配符
可以使用*来匹配零个或者多个字符。
#ls -d /tmp/4_6/test*
/tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5
5、输入/输出重定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输入重定向的命令是<,输出重定向的命令是>。
#echo "123" > 123.txt
#cat 123.txt
123
#echo "123" >> 123.txt
#cat 123.txt
123
123
6、管道符
用于将前一个指令的输出作为后一个指令的输入。
#cat /etc/passwd|wc -l
7、作业控制
进入编辑模式时发现错误了,可以按Ctrl+c组合强制退出,使用Ctrl+z组合暂停任务(要在一般模式下)。如果提示停止了,可以使用fg命令恢复它。如果想把暂停的任务放在后台重新运行,使用bg命令 。通过tail -f 文件名查看有没有在后台运行。
变量
使用一个较简单的字符来替代某些具有特殊意义的设定以及数量。有了PATH这个变量,运行某个命令时,不再需要输入全局路径,直接输入命令名即可。
#echo $PATH(显示变量值)
#echo $PWD
/root
1、命令env
可以列出系统预设的全部系统变量。登录不同的用户,这些环境变量的值也不同。
HOSTNAME:表示主机名称。
SHELL:表示当前用户的shell类型。
HISTSIZE:表示历史记录数。
MAIL:表示当前用户的邮件存放目录。
PATH:该变量决定了shell将到哪些目录中寻找命令或程序。
PWD:表示当前目录。
LANG:这是与语言相关的环境变量
HOME:表示当前用户的家目录。
LOGNAME:表示当前用户的登录名。
env命令显示的变量只是环境变量,系统预设的变量其实还有很多。
2、命令set
也是可以输出环境变量。不仅可以显示系统预设的变量,也可以显示用户自定义的变量。
#myname='aming'
#set |grep myname
myname=aming
只能在当前shell中生效。
#bash//执行命令会进入一个shell环境中
#echo $myname
使用bash可以再打开一个shell,此时先前设置的myname变量已经不存在了,退出当前shell回到原来的shell,myname变量还在。
允许系统内所有用户登录后都能使用该变量,就要在/etc/profile文件的最后一行加入export myname=aming,然后运行source /etc/profile可以生效。
#echo "exprot myname=aming" >> /etc/profile
#source !$
source /etc/profile
#bash
#echo $myname
aming
#exit
仅允许当前用户使用变量,就要在用户目录下的.bashrc文件的最后一行加入export myname=aming,然后运行source .bashrc就可以生效了。
设定变量的格式为a=b,a为变量名,b为变量内容。
变量名只能是字母,数据下划线组成,不能以数字开头。
当变量内容带有特殊字符时,需要加上单引号。
系统环境变量与个人环境的配置文件
/etc/prifile:这个文件预设了几个重要的变量,PATH、USER、LOCNAME、MAIL、INPUTRC、HOSTNAME、HISIZE、umask。
/etc/bashrc:这个文件主要预设umask以及PS1。PS1就是输入命令时前面的那串字符。(\u指用户,\h指主机名,\w指当前目录,$指字符#)
.bash_profile:该文件定义了用户的个人路径与环境的文件名称。每个用户都可以使用该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。
.bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。
.bash_history:该文件用于记录命令历史。
.bash_logout:当退出shell时,会执行该文件。
Linux shell中的特殊符号
*1、代表零个或多个任意字符
#ls /tmp/4_6/test*
/tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5
2、?只代表一个任意字符
#touch /tmp/4_6/testa
#ls -d /tmp/4_6/test?
/tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5
不管是数字还是字母,只要是一个字符,都能匹配出来。
3、注释符号#
#后面的内容都会被忽略。
#abc=123 #aaaaa
#echo $abc
123
*4、脱义字符*
这个字符会将后面的特殊符号还原为普通字符
#ls -d test\*
5、管道符|
它的作用是将前面命令的输出作为后面命令的输入。
#cat testb.txt |wc -l
0
6、命令cut
cut命令用来截取某一个字段。
-d:后面跟分隔字符,分隔字符要用单引号括起来。
-c:后面接的是第几个字符。
-f:后面接的是第几个区块。
#cat /etc/passwd|cut -d ':' -f 1 |head -5
root
bin
daemon
adm
lp
#head -n2 /etc/passwd|cut -c2
0
1
#head -n2 /etc/passwd|cut -c1
r
b
7、命令sort
用作排序。sort 【-t 分隔符】【-kn1,n2】【-nru】
-t:后面跟分隔字符。
-n:表示使用纯数字排序。
-r:表示反向排序。
-u:表示去重复。
-kn1,n2:表示由n1区排序到n2区之间。
#head -n5 /etc/passwd |sort -t: -k3 -n
#head -n5 /etc/passwd |sort -t: -k3 -r(反向排序)
8、命令wc
wc命令用于统计文档的行数、字符或词数。。-l统计行数,-m统计字符数,-w统计词数。
#wc /etc/passwd
45 90 2361 /etc/passwd
#wc -l /etc/passwd
45 /etc/passwd
#wc -m /etc/passwd
2361 /etc/passwd
#wc -w /etc/passwd
90 /etc/passwd
9、命令uniq
命令uniq用来删除重复的行。该命令只有-c比较常用,表示统计重复的行数,并把行数写在前面。
#vi testb.txt
111
222
111
333
#uniq testb.txt
111
222
111
333
#sort testb.txt |uniq(使用uniq前先给文件排序)
111
222
333
#sort testb.txt |uniq -c
2 111
1 222
1 333
10、命令tee
tee命令后面加文件名,作用类似重定向,但它可以把文件写入后面,同时还显示在屏幕上。
#echo "aaaaaaaaaaaaa" |tee testb.txt
aaaaaaaaaaaaa
11、命令tr
tr命令用于替换字符,常用来处理文件中出现的特殊字符。
-d:表示删除某个字符,后面跟要删除的字符。
-s:表示删除重复的字符。
tr ‘[a-z]’ ‘[A-Z]’
12、命令split
命令split用于切割文档。
-b:表示依据大小来分割文档。
#mkdir split_dir
cd !$
cd split_dir
#cp /etc/passwd ./
#split -b 500 passwd
#ls
passwd xaa xab axc axd axe
13、特殊字符$
符号用作变量前面的标识符,还可以和!结合起来用
#cd ..
#ls testb.txt
testb.txt
#ls !$
ls testb.txt
testb.txt
14、特殊字符;
如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号。
#mkdir testdir ; touch test1.txt ; touch test2.txt
15特殊符号~
表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username
#cd ~
#pwd
/root
16、特殊字符&
如果想把命令放到后台执行,则需要加上符号&。
#sleep 30 &
17、重定向符号>>,>
分别表示取代和追加的意思,2>或者2>>,它表示错误重定向和错误追加重定向。
18、中括号[]
中括号内为字符组合,代表字符组合的任意一个。
19、特殊符号&&和||
#command1; command2
#command1 && command2
#command1 || command2
使用;时,不管command1是否执行,都会执行command2
使用&&时,只有command1执行成功后,command2才会执行。
使用||时,command1执行成功后则command2不执行,否则执行command2