大家好,又见面了,我是你们的朋友全栈君。
8.1 shell介绍
shell是一个命令解释器,提供用户和机器之间的交互;
输入用户名、密码后进入的界面即一个shell;
/etc/passwd中每行最后一段即为shell信息;
创建一个用户默认的shell为/bin/bash;
centos7默认使用的shell为bash;
其他shell:zsh、ksh等;
支持特定语法,如逻辑判断、循环(while、for);
8.2 命令历史
显示用户使用过的命令
[root@hyc-01-01 ~]# history
[root@hyc-01-01 ~]# ls /root/.bash_history
/root/.bash_history history显示的信息在该文件中保存
最多保存命令数
[root@hyc-01-01 ~]# echo $HISTSIZE 是系统内置环境变量
1000 默认最多保存1000条
有时使用history查看会发现bash.history中保存了超过1000条命令,这可能是因为部分命令仍在内存中,并没有写入文件中或变量$HISTSIZE被修改
清空命令历史
…
836 ls /root/.bash_history
837 cat /root/.bash_history
838 echo $HISTSIZE
839 history
[root@hyc-01-01 ~]# history -c
[root@hyc-01-01 ~]# history
1 history
[root@hyc-01-01 ~]# cat /root/.bash_history
…
[root@hyc-01-01 ~]# cat /root/.bash_history
此时发现.bash_history中的命令历史内容没有被删除,说明history –c仅删除内存中的历史命令;
只有当用户退出终端时,内存中的历史命令才会被写入.bash_history文件中;
自定义$HISTSIZE
[root@hyc-01-01 ~]# vim /etc/profile
…
fi
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=5000 将$HISTSIZE修改为5000
if [ “$HISTCONTROL” = “ignorespace” ] ; then
export HISTCONTROL=ignoreboth
…
[root@hyc-01-01 ~]# echo $HISTSIZE
1000
[root@hyc-01-01 ~]# source /etc/profile 要使修改的HISTSIZE生效需要执行该命令或重启终端
[root@hyc-01-01 ~]# echo $HISTSIZE
5000
指定记录历史命令时记录命令执行时间
[root@hyc-01-01 ~]# HISTTIMEFORMAT=”%Y/%m/%d %H:%M:%S”
[root@hyc-01-01 ~]# echo $HISTTIMEFORMAT
%Y/%m/%d %H:%M:%S
[root@hyc-01-01 ~]# history 此时history显示的信息包含了日期和时间
1 2018/06/28 07:26:30history
2 2018/06/28 07:29:07cat /root/.bash_history
2 2018/06/28 07:35:14vim /etc/profile
…
变量HISTTIMEFORMAT默认不存在,每进入一个终端都需要配置
使HISTTIMEFORMAT永久生效:
[root@hyc-01-01 ~]# vim /etc/profile
…
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=5000
HISTTIMEFORMAT=”%Y/%m/%d %H:%M:%S”
…
[root@hyc-01-01 ~]# source !$ 使变量立即生效(或重新打开终端)
source /etc/profile
阻止历史命令被删除
[root@hyc-01-01 ~]# chattr +a ./.bash_history
设置该参数后即使保存的命令数超过最大限制1000条也可以正常保存,因为文件被设置成不能删除内容
不正常退出
用户使用logout或exit命令属于正常退出,此时内存中的历史命令会写入.bash_history文件;
用户不正常退出时内存中的历史命令将不被写入文件,无法保存历史命令信息;
!
!!执行命令历史中的最后一条命令
[root@hyc-01-01 ~]# ls 执行了ls命令,此时命令历史中最后一条命令应为ls
111 111.tar.xz 3.txt anaconda-ks.cfg.1 test
111.tar 111.zip 4.txt hyc2 test.tar
111.tar.bz2 1.txt.xz 4.txt.bz2 ls2 test.txt
111.tar.gz 222 4.txt.zip ls2.zip 新建文本文档.txt
[root@hyc-01-01 ~]# !!
ls 使用!!执行了ls
111 111.tar.xz 3.txt anaconda-ks.cfg.1 test
111.tar 111.zip 4.txt hyc2 test.tar
111.tar.bz2 1.txt.xz 4.txt.bz2 ls2 test.txt
111.tar.gz 222 4.txt.zip ls2.zip 新建文本文档.txt
!cd 执行命令历史中最近执行的一次cd命令
[root@hyc-01-01 ~]# history
…
850 2018/06/28 19:45:45ls
851 2018/06/28 19:48:55history
852 2018/06/28 19:49:01cd
853 2018/06/28 19:49:03w
854 2018/06/28 19:49:08whoami
855 2018/06/28 19:49:17lsattr
856 2018/06/28 19:49:22history
[root@hyc-01-01 ~]# !cd
Cd
!851 执行命令历史中第861行的命令
…
852 2018/06/28 19:49:01cd
853 2018/06/28 19:49:03w
854 2018/06/28 19:49:08whoami
855 2018/06/28 19:49:17lsattr
856 2018/06/28 19:49:22history
857 2018/06/28 19:50:35cd
858 2018/06/28 19:53:05history
[root@hyc-01-01 ~]# !852
Cd
8.3 命令补全和别名
tab键
可以补全命令或文件路径;
如果一串字符或命令补全时有多种选项,则连按两下Tab键会出现可供选择的项;
[root@hyc-01-01 ~]# w
w wc whereis whoami write
wait wdctl which wipefs
wall weak-modules while wpa_cli
watch weather whiptail wpa_passphrase
watchgnupg whatis who wpa_supplicant
[root@hyc-01-01 ~]# cd 1
111/ 111.tar 111.tar.gz 111.zip
1111/ 111.tar.bz2 111.tar.xz 1.txt.xz
centos7中可以支持补全参数(centos6不支持),但需要安装包bash-completion;
[root@hyc-01-01 ~]# yum install -y bash-completion
包安装完后必须重启系统才生效
[root@hyc-01-01 ~]# systemctl re 出现可补全的参数选项
reboot reload-or-restart reset-failed
reenable reload-or-try-restart restart
reload rescue
alias别名
定义新的别名
[root@hyc-01-01 ~]# alias restartnet=’systemctl restart network.service’
[root@hyc-01-01 ~]# restartnet
[root@hyc-01-01 ~]# alias 查看系统中所有的别名
alias相关配置文件
[root@hyc-01-01 ~]# vim /root/.bashrc 该文件中存在几个alias别名
# .bashrc
# User specific aliases and functions
alias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’
…
[root@hyc-01-01 profile.d]# ls
256term.csh colorgrep.csh colorls.sh less.csh vim.sh
256term.sh colorgrep.sh lang.csh less.sh which2.csh
bash_completion.sh colorls.csh lang.sh vim.csh which2.sh
[root@hyc-01-01 profile.d]# pwd
/etc/profile.d 其余的alias在该路径下的文件中定义
取消自定义的别名
[root@hyc-01-01 profile.d]# unalias restartnet
[root@hyc-01-01 profile.d]# restartnet
-bash: restartnet: 未找到命令
8.4 通配符
* 可以放在任意位置匹配任何任意数量的字符字符
[root@hyc-01-01 ~]# ls 1*
111.tar 111.tar.bz2 111.tar.gz 111.tar.xz 111.zip 1.txt.xz
1:
1 11 111 a
111:
12.txt 12_txt.swp 2 22 222 2.txt 2.txt.t
1111:
?匹配任意一个字符
[root@hyc-01-01 ~]# ls ?.txt
3.txt 4.txt
[root@hyc-01-01 ~]# ls *.txt
3.txt 4.txt test.txt 新建文本文档.txt
[].txt 匹配方括号中的一个字符
[root@hyc-01-01 ~]# ls [1-3].txt 表示匹配1/2/3中任意一个字符
1.txt 2.txt 3.txt
[root@hyc-01-01 ~]# ls [13].txt 匹配1或3中任意一个字符
1.txt 3.txt
[root@hyc-01-01 ~]# ls [123].txt 匹配1到3中任意一个字符
1.txt 2.txt 3.txt
[root@hyc-01-01 ~]# ls [a-c].txt 匹配a/b/c中任意一个字符
a.txt c.txt
[root@hyc-01-01 ~]# ls [0-9a-c].txt 匹配0到9中任意一个数字或a到c中任意一个字母
1.txt 2.txt 3.txt 4.txt a.txt c.txt
{}.txt 匹配括号内字符的其中一项,使用逗号分隔
[root@hyc-01-01 ~]# ls {1,2,3}.txt
1.txt 2.txt 3.txt
将ls –a输出的信息重定向到1.txt
[root@hyc-01-01 ~]# ls -a 1>1.txt 默认>左边的1可以省略
[root@hyc-01-01 ~]# cat1.txt 2>2.txt 2表示报错信息
[root@hyc-01-01 ~]# cat 2.txt
-bash: cat1.txt: 未找到命令
[root@hyc-01-01 ~]# ls 2.txt ls3 &> 2.txt 将正确和错误信息全部输出到2.txt
[root@hyc-01-01 ~]# cat 2.txt
ls: 无法访问ls3: 没有那个文件或目录
2.txt
[root@hyc-01-01 ~]# ls 2.txt ls3 1> 2.txt 2>4.txt 分别将正确和错误的输出信息输出到不同文件
[root@hyc-01-01 ~]# cat 4.txt
ls: 无法访问ls3: 没有那个文件或目录
[root@hyc-01-01 ~]# cat 2.txt
2.txt
输入重定向
[root@hyc-01-01 ~]# wc -l < 2.txt 将2.txt的内容输入到命令wc –l中(使用wc –l查看2.txt行数)
1
[root@hyc-01-01 ~]# 4.txt < 2.txt 不支持从文件输入重定向到文件
-bash: 4.txt: 未找到命令
只能输入到命令
转载于:https://blog.51cto.com/12216458/2133954
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107448.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...