Linux CentOS 7 Shell基础(命令历史,管道,作业控制,变量及环境变量)
一、 shell介绍 shell是一个命令解释器,提供用户和机器的交互。 支持特定语法,比如逻辑判断,循环。 每个用户都有特定的shell centos7默认shell 为bash(Bourne Agin Shell) 还用zsh,csh,ksh等 二、 命令历史history history 命令历史 history -c 清空内存缓存命令。 ~/.bash_history 命令历史的存储文件 HISTSIZE=1000 默认命令历史记录1000条 /etc/profile-----HISTORY=10000 source/etc/profile HISTTIMEFORMAT="%Y%m%d %H:%M:%S " 显示命令历史的执行时间 chattr +a ~/.bash_history 永久保存命令历史, !! 上一条命令 !1320 序号为1320条命令历史 !mkdir 最近的以mkdir开关的命令 三、 命令补全和别名 tab键 敲一下,敲两下 参数补全,安装bash-completion alias 命令别名 aliasrestartnet="systemctlrestartnetwork.service" unalias restartnet 用户自己的别名配置文件~/.bashrc ls /etc/profild.d/*.sh 也定义了一部分别名 四、 通配符 ls*.txt匹配多个字符 ls?.txt匹配单个字符 ls[1-3].txt匹配范围 ls[0-9a-zA-Z].txt匹配非特殊字符 ls{1,3,4}.txt匹配部分 [root@0~]#ls*.txt #fxq.txt1.txt111.txt22.txt3.txt4.txt\fxq.txtip.txtsed.txt [root@0~]#ls?.txt1.txt3.txt4.txt [root@0~]# 五、 输入输出重定向 cat 1.txt > 2.txt 重定向 cat 1.txt >> 2.txt 追加重定向 ls aaa.txt 2>error.txt错误重定向 ls aaa.txt 2>>error.txt 错误追加重定向 wc -l < 1.txt 输入重定向 &> ,&>>结合了正确和错误 ls 1.txt aaa.txt 1> 1.txt 2>error.txt ls 1.txt aaa.txt >1.txt 2&>1 ls 1.txt 2.txt &> 1.log ls 1.txt 2.txt &>> 1.log 六、 管道符和作业控制 (1)管道| cat 1.txt | grep "root" [root@0~]#cat/etc/passwd|greproot root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin [root@0~]# find ./ -type f |wc -l: 查找当前目录有多少个文件 [root@0~]#find./-typef|wc-l171 [root@0~]# (2)作业控制 vim /etc/passwd 打开文件进行编辑 ctrl + Z 暂停程序 [root@0~]#vim/etc/passwd [1]+Stoppedvim/etc/passwd [root@0~]# fg 调回前台 bg 放到后台运行 jobs 查看作业 [root@0~]#jobs[1]-Stoppedvim/etc/passwd [2]+Stoppedvi/etc/fstab [root@0~]#[root@0~]#jobs[1]-Stoppedvim/etc/passwd [2]+Stoppedvi/etc/fstab [root@0~]#fg1 [root@0~]#sleep1000^Z [4]+Stoppedsleep1000[root@0~]#jobs[1]Stoppedvim/etc/passwd [2]Stoppedvi/etc/fstab [3]-Stoppedvmstat1[4]+Stoppedsleep1000[root@0~]#jobs2000-bash:jobs:2000:nosuchjob [root@0~]#sleep2000^Z [5]+Stoppedsleep2000[root@0~]#jobs[1]Stoppedvim/etc/passwd [2]Stoppedvi/etc/fstab [3]Stoppedvmstat1[4]-Stoppedsleep1000[5]+Stoppedsleep2000[root@0~]#bg5[5]+sleep2000& [root@0~]#jobs[1]Stoppedvim/etc/passwd [2]Stoppedvi/etc/fstab [3]-Stoppedvmstat1[4]+Stoppedsleep1000[5]Runningsleep2000& [root@0~]#fg1vim/etc/passwd [1]+Stoppedvim/etc/passwd [root@0~]#sleep3000&[6]3723[root@0~]#jobs[1]+Stoppedvim/etc/passwd [2]Stoppedvi/etc/fstab [3]Stoppedvmstat1[4]-Stoppedsleep1000[5]Runningsleep2000& [6]Runningsleep3000& [root@0~]# 七、 shell变量 (1)变量: env 查看系统变量 [root@0~]#envXDG_SESSION_ID=62201HOSTNAME=0TERM=xterm SHELL=/bin/bash HISTSIZE=6000SSH_CLIENT=27.189.212.188861622SSH_TTY=/dev/pts/0QT_GRAPHICSSYSTEM_CHECKED=1USER=root LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin/:/usr/local/apache2/bin/:/usr/local/php/bin/:/root/bin PWD=/root LANG=C QT_GRAPHICSSYSTEM=native SHLVL=1HOME=/root LOGNAME=root SSH_CONNECTION=27.189.212.188861610.186.46.18822LESSOPEN=||/usr/bin/lesspipe.sh%s PROMPT_COMMAND=history-a XDG_RUNTIME_DIR=/run/user/0HISTTIMEFORMAT=%F%T _=/usr/bin/env [root@0~]# set 还可以查看用户自定义变量 a=1 自定义变量 变量名规则:不能以数字开头 变量里有特殊符号的话,得用''引起来 [root@0~]#a=111 [root@0~]#echo$a111 [root@0~]#a='a$bc' [root@0~]#echo$aa$bc [root@0~]#a="a$bc" [root@0~]#echo$aa [root@0~]# 变量的累加: [root@0~]#a=1[root@0~]#b=2[root@0~]#echo$a$b12[root@0~]#a='a$bc'[root@0~]#echo$a$ba$bc2[root@0~]#c="a$bc"[root@0~]#echo$ca [root@0~]#c=a"$b"c[root@0~]#echo$ca2c [root@0~]# 全局变量:export b=222 w 查看登录终端: echo $SSH_TTY [root@0~]#w 22:05:44up36days,4:57,2users,loadaverage:0.00,0.01,0.05USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT rootpts/127.189.212.18821:3728:380.03s0.03s-bash rootpts/027.189.212.18821:220.00s0.15s0.00sw [root@0~]#echo$SSH_TTY/dev/pts/0[root@0~]#[root@0~]#w 22:06:03up36days,4:58,2users,loadaverage:0.00,0.01,0.05USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT rootpts/127.189.212.18821:373.00s0.03s0.00sw rootpts/027.189.212.18821:2211.00s0.15s0.11s-bash Youhavenewmailin/var/spool/mail/root [root@0~]#echo$SSH_TTY/dev/pts/1[root@0~]# export 全局向下子shell 中生效,bash unset a 删除自定义变量. 八、 环境变量配置文件 (1)系统层次: /etc/porfile 用户环境变量,交互,登录才执行 /etc/bashrc 用户不用登录,执行shell (2)用户层次: ~/.proflie ~/.bashrc . ~/.bash_profile . ~/.bash_logout . ~/.bash_history (3)PS1、PS2 PS1=[\u@\h \W]$ PS2----> 一个非常长的命令可以通过在末尾加“\”使其分行显示。多行命令的默认提示符是“>”。 我们可以通过修改PS2 ,将提示符修改为 >> :export PS2='>>' <root@0>#foriin`seq110` >do >echo$i >done; 1 2 3 4 5 6 7 8 9 10 <root@0># (4)扩展 bashrc和bash_profile的区别http://ask.apelearn.com/question/7719 bash_profile和bashrc区别 【.bash_profile与.bashrc的区别】.bash_profileisexecutedforloginshells,while.bashrcisexecutedforinteractivenon-loginshells. 【loginshell与non-loginshell的区别】 1、当你直接在机器login界面登陆、使用ssh登陆或者su切换用户登陆时,.bash_profile会被调用来初始化shell环境 Note:.bash_profile文件默认调用.bashrc文件.bash_profile中有如下内容if[-f~/.bashrc];then.~/.bashrc fi 2、当你不登陆系统而使用ssh直接在远端执行命令,.bashrc会被调用 3、当你已经登陆系统后,每打开一个新的Terminal时,.bashrc都会被再次调用。 测试准备工作 hclient2主机hadoop用户家目录下执行[hadoop@hclient2~]$echo"invokehclient2:~/.bashrc">>.bashrc[hadoop@hclient2~]$echo"invokehclient2:~/.bash_profile">>.bash_profile LoginShell 1、窗口登陆 RedHatEnterpriseLinuxServerrelease6.3(Santiago)Kernel2.6.32-279.el6.x86_64onanx86_64 hclient2login:hadoop Password: Lastlogin:MonFeb2523:03:45ontty1invokehclient2:~/.bashrcinvokehclient2:~/.bash_profile[hadoop@hclient2~]$ 2、SSH登陆[hadoop@hserver~]$sshhclient2 Lastlogin:MonFeb2522:42:192013fromhserverinvokehclient2:~/.bashrcinvokehclient2:~/.bash_profile[hadoop@hclient2~]$ 3、su登陆[root@hclient2~]#su-hadoopinvokehclient2:~/.bashrcinvokehclient2:~/.bash_profile Non-loginShell: Note:ssh...[user@]hostname[command] Ifcommandisspecified,itisexecutedontheremotehostinsteadofaloginshell.[hadoop@hserver~]$sshhclient2hostnameinvokehclient2:~/.bashrc hclient2 【故】若要配置环境变量之类,最保险是写在.bashrc文件中。因为不管是登陆还是不登陆,该文件总会被调用! 本文转自 枫叶云 51CTO博客,原文链接:http://blog.51cto.com/fengyunshan911/1962430