PS1
查看当前其实符的格式
[root@Centos7 ~]# echo $PS1
[\u@\h \W]\$
由此可以发现:br/>左中括号"["、右中括号"]"、@和空格等是没有什么特殊意思按原样显示
\u:当前用户
\h:当前主机名称
\W:当前工作目录的基名
另外还有一些:
\$:表示提示符(普通用户显示为字符$,root用户显示为字符#)
\H:表示完整的主机名
\w:表示完整的工作目录,家目录以~
\t:表示24小时时间格式为:分:秒
\T:表示12小时时间格式为:分:秒
\A:表示24小时时间格式为:时:分
!:表示命令历史数
#:表示开机命令历史数
\d:表示日期,格式为星期 月 日
\v:表示BASH的版本信息
还可以给字符设置颜色,格式为[\e[F:B:Sm],其中“F”为字体颜色,标号30~37;“B”为背景色,编号为40~47,说明下,e可用033代替,功能完全一样
功能都是引导非常规显示提示符前景色和背景色分的颜色号码表示如下:
“S”为显示的样式,常见代码如下:
0:表示关闭颜色设置
1:表示粗体
4:表示加上下划线
5:表示闪烁
7:表示前景色和背景色互换
8:表示隐藏
如果要修改PS1,第一种就是直接赋值变量的,仅当前shell有效,重启无效
如果要永久有效,可在/etc/profile.d/XX.sh脚本,然后使用source或者点(.)重新引导即可
例如:
[root@Centos6 ~]#PS1="\[\e[1;36m\][\u@\h \W]\\$\[\e[0m\]” #临时生效(只对当前shell生效)
[root@Centos6 ~]#vim /etc/profile.d/less.sh
[root@Centos6 ~]#cat /etc/profile.d/less.sh
# less initialization script (sh)
[ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="${LESSOPEN-||/usr/bin/lesspipe.sh %s}"
PS1="\[\e[1;36m\][\u@\h \W]\\$\[\e[0m\]"
[root@Centos6 ~]$source /etc/profile.d/less.sh
注意:/etc/profile.d/*目录下的创建的文件是以.sh结尾,无需给予x的权限
[root@Centos6 ~]#ll /etc/profile.d/
总用量 60
-rw-r--r--. 1 root root 1150 2月 7 2017 colorls.csh
-rw-r--r--. 1 root root 1172 2月 7 2017 colorls.sh
-rw-r--r--. 1 root root 92 11月 22 2013 cvs.csh
-rw-r--r--. 1 root root 78 11月 22 2013 cvs.sh
-rw-r--r--. 1 root root 192 1月 25 2017 glib2.csh
-rw-r--r--. 1 root root 192 1月 25 2017 glib2.sh
-rw-r--r--. 1 root root 1745 3月 23 2017 lang.csh
-rw-r--r--. 1 root root 2706 3月 23 2017 lang.sh
-rw-r--r--. 1 root root 123 6月 4 2014 less.csh
-rw-r--r-- 1 root root 164 5月 13 11:21 less.sh
-rw-r--r--. 1 root root 976 9月 24 2011 qt.csh
-rw-r--r--. 1 root root 912 9月 24 2011 qt.sh
-rw-r--r--. 1 root root 105 12月 22 2016 vim.csh
-rw-r--r--. 1 root root 269 12月 22 2016 vim.sh
-rw-r--r--. 1 root root 169 5月 20 2009 which2.sh
screen命令
[root@Centos7 ~]# rpm -q screen
screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64
其实这个命令没啥用,因为我们都是开终端来ssh链接的,演示下基本用法即可
[root@Centos7 ~]# screen #再敲下这个命令后,就会进入一个全新的会话
[root@Centos7 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 12 19:05:04 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=980f8a7c-8d5f-4072-9dd0-32ad3c3835b8 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sr0 /mnt iso9660 defaults 0 0
[root@Centos7 ~]# screen
[detached from 34045.pts-0.Centos7] #当前会话按ctrl+a+d 就会把此会话分离出来 #这个就是分离出来的结果信息
[root@Centos7 ~]# screen -ls #列出已经存在的会话
There is a screen on:
34045.pts-0.Centos7 (Detached)
1 Socket in /var/run/screen/S-root.
[root@Centos7 ~]# screen -r 34045 #-r + 会话编号即可回到指定会话里
[root@Centos7 ~]# cat /etc/fstab #此结果就是已经回到了之前的会话里
#
# /etc/fstab
# Created by anaconda on Tue May 12 19:05:04 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=980f8a7c-8d5f-4072-9dd0-32ad3c3835b8 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sr0 /mnt iso9660 defaults 0 0
[root@Centos7 ~]# exit #exit退出当前会话
[root@Centos7 ~]# screen -r 34045
[screen is terminating] #显示已经退出了之前的会话
[root@Centos7 ~]#
[root@Centos7 ~]# screen -ls #-ls 已经没有会话了
No Sockets found in /var/run/screen/S-root.
模拟会话联动
centos7创建一个叫做hello的会话
[root@Centos7 ~]# screen -S hello
在centos6的机器上使用ssh连接centos7,然后加入其会话实现会话联动
[root@Centos6 ~]# ssh 10.0.17.65
The authenticity of host '10.0.17.65 (10.0.17.65)' can't be established.
RSA key fingerprint is 6d:12:cd:3e:55:61:4e:11:05:f4:d9:be:10:9d:50:ff.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.17.65' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Fri May 15 10:03:24 2020 from 10.0.16.80
[root@Centos7 ~]# screen -x hello
回车以后,在原来centos6 ssh centos7的机器上输入命令,然后查看原centos7的界面是否同步
[root@Centos7 ~]# hello
bash: hello: 未找到命令...
[root@Centos7 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
[root@Centos7 ~]#
下面是原centos7的界面
[root@Centos7 ~]# hello
bash: hello: 未找到命令...
[root@Centos7 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
[root@Centos7 ~]#
实验已完成,这就是会话同步
alias
只输入alias就能显示当前shell下配置的别名
[root@Centos7 ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
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 which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
临时别名设置
[root@Centos7 ~]# alias cdnet="cd /etc/sysconfig/network-scripts/"
[root@Centos7 ~]# cdnet
[root@Centos7 network-scripts]# cd
[root@Centos7 ~]# alias
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
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 which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@Centos7 ~]# cdnet
[root@Centos7 network-scripts]# pwd
/etc/sysconfig/network-scripts
取消别名
[root@Centos7 ~]# alias cdnet="cd /etc/sysconfig/network-scripts/"
[root@Centos7 ~]# cdnet
[root@Centos7 network-scripts]# cd
[root@Centos7 ~]# unalias cdnet
[root@Centos7 ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
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 which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde’
[root@Centos7 ~]# cdnet #取消别名后,cdnet命令失效
bash: cdnet: 未找到命令...
创建永久性别名,可在当前家目录下写进~/.bashrc,不建议到/etc/bashrc,因为此配置文件将影响到所有登陆到此机的用户
[root@Centos7 ~]# vim ~/.bashrc
[root@Centos7 ~]# cat ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
alias cdnet="cd /etc/sysconfig/network-scripts/"
通过点(.)或者source重新加载下~/.bashrc文件,使其内容生效
[root@Centos7 ~]# source ~/.bashrc
[root@Centos7 ~]# cdnet
[root@Centos7 network-scripts]# pwd
/etc/sysconfig/network-scripts
设想这样一个场景,如果设置的别名和某一个命令名字一样,那么结果是什么了?比如:echo
[root@Centos7 network-scripts]# echo "hello world” #echo直接输入hello world
hello world
[root@Centos7 network-scripts]# alias echo=pwd #将pwd命令设置一个和echo一样的别名,结果...
[root@Centos7 network-scripts]# echo #结果,输入echo就相当于执行了pwd的命令
/etc/sysconfig/network-scripts
遇此情况,那么又如何去避免此类问题了?
四个方法:
1、通过反斜杠“\”使其别名失效(常用)
2、使用单引号或双引号
3、使用命令绝对路径
4、command aliasname
[root@Centos7 network-scripts]# \echo "hello world"
hello world
[root@Centos7 network-scripts]# "echo" "hello world"
hello world
[root@Centos7 network-scripts]# 'echo' "hello world"
hello world
[root@Centos7 network-scripts]# whereis echo
echo: /usr/bin/echo /usr/share/man/man1/echo.1.gz /usr/share/man/man1p/echo.1p.gz
[root@Centos7 network-scripts]# /usr/bin/echo "hello world"
hello world
[root@Centos7 network-scripts]# command echo "hello world"
hello world
{ }的用法
[root@Centos7 ~]# echo {1..2}
1 2
[root@Centos7 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@Centos7 ~]# echo {1..10..2}
1 3 5 7 9
[root@Centos7 ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@Centos7 ~]# echo {A..Za..z}
{A..Za..z}
[root@Centos7 ~]# echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
单引号’’ 双引号“” 反向单引号``的用法
[root@Centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Centos7 ~]# echo "$PATH" #双引号是弱引用,该变还是得变得
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Centos7 ~]# echo '$PATH' #但引号是强引用,不让变就是不让变
$PATH
[root@Centos7 ~]# echo `$PATH` #反引号主要是针对命令,变量不支持
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: 没有那个文件或目录
[root@Centos7 ~]# echo "echo $PATH" #双引号主要是针对变量,所以把里面的echo看成是字符串了
echo /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Centos7 ~]# echo 'echo $PATH' #单引号里,一切皆是字符串,不论是命令还是变量
echo $PATH
[root@Centos7 ~]# echo `echo $PATH` #由此可看出,反引号里仅支持命令或命令+变量的执行
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Centos7 ~]# echo `pwd`
/root
history
使用bash shell,会将执行过的命令记录到history对应的缓存区中。当用户注销后,会将history缓存区中的历史命令追加保存至~/.bash_history文件中,当下次用户登录shell时,系统会读取历史命令文件里的记录到命令缓冲区,
利用命令历史,不仅可以了解之前做过的操作,也可以昂便重复执行
常见用法:
history:
-c:清空历史命令
-d #:删除历史中指定的第#个命令
n:显示最近的n条历史
-a:追加本次会话新执行的命令历史列表至历史文件
-r:读历史文件附加到历史列表
-w:保存历史列表到指定的历史文件
-n:读取历史文件中未读过的行到历史列表
-p:展开历史参数成多行,但不保存在历史列表中
-s:展开历史参数成一行,附加到历史列表后
示例演示如下:
首先要了解到,这个历史条目能够记录多少条?
1、先通过man手册查看history命令,看下配置文件在哪里?
(信息量太长,不打印输出了)man帮助查看到history命令存储的历史条目与/etc/profile这个配置文件有关
[root@localhost ~]# cat /etc/profile | grep HISTSIZE
HISTSIZE=1000 #HISTSIZE这个就是存储历史条目的,该配置文件显示保存了1000条
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
2、那么保存在哪里的了?
通过查看man history发现历史记录都保存在了这个文件里~/.bash_history
[root@localhost ~]# more ~/.bash_history
ifconfig
cd /etc/yum.repos.d/
ls
mkdir CentOS
ls
mv CentOS-* CentOS
ls
vim local.repo
vim /etc/fstab
mount -a
df -Th
clear
systemctl stop firewalld.service
systemctl disable firewalld.service
iptables -L -n
clear
service iptables off
systemctl stop iptables
clear
--More--(31%)
3、那么如何去清楚这些历史呢?
通过man手册查看,使用一个-c的选项就能清楚掉
[root@localhost ~]# history -c
[root@localhost ~]# history
1 history
4、测试下ignoredups、ignorespace和ignoreboth的作用
ignoredups
[root@localhost ~]# cat /etc/profile
...
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
...
由此可发现通过设置HISTCONTROL变量来实现的
[root@localhost ~]# HISTCONTROL=ignoredups
[root@localhost ~]# echo $HISTCONTROL
ignoredups
[root@localhost ~]# ll #连续3此输入ls -l
总用量 4
-rw-------. 1 root root 1275 5月 11 23:16 anaconda-ks.cfg
drwxr-xr-x 2 root root 18 5月 13 22:28 test
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1275 5月 11 23:16 anaconda-ks.cfg
drwxr-xr-x 2 root root 18 5月 13 22:28 test
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1275 5月 11 23:16 anaconda-ks.cfg
drwxr-xr-x 2 root root 18 5月 13 22:28 test
[root@localhost ~]# history
1 cat /etc/profile
2 HISTCONTROL=ignoredups
3 history
4 cat /etc/profile #这里为什么会有两次了?是因为在我赋值ignoredups之前就有一次了,赋完值后我多次输入就只显示此次了
5 history
6 echo $HISTCONTROL
7 ll #history只显示了一次
8 history
由此:可发现HISTCONTROL=ignoredups对于重复的命令只显示一次(为设定之前的不算)
ignorespace的作用
[root@localhost ~]# history -c
[root@localhost ~]# HISTCONTROL=ignorespace
[root@localhost ~]# echo $HISTCONTROL
ignorespace
[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1275 5月 11 23:16 anaconda-ks.cfg
drwxr-xr-x 2 root root 18 5月 13 22:28 test
[root@localhost ~]# cat /etc/issue
\S
Kernel \r on an \m
[root@localhost ~]# cat /etc/issue #注意,cat前面是加上了空格
\S
Kernel \r on an \m
[root@localhost ~]# history
1 HISTCONTROL=ignorespace
2 ll
3 cat /etc/issue
4 history
[root@localhost ~]# cat /etc/passwd #注意,cat前面是加上了空格
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@localhost ~]# history #下面只显示了一次cat /etc/issue,其实我是执行了两次,只显示了没空格的,另外我还执行了/etc/passwd,这个命令也没有显示
1 HISTCONTROL=ignorespace
2 ll
3 cat /etc/issue
4 history
5 history
由此,可以判断其只要是在命令的前面加上了空格,也就是空格+命令的方式执行,history是不显示的
ignoreboth的作用
[root@localhost ~]# history -c
[root@localhost ~]# HISTCONTROL=ignoreboth
[root@localhost ~]# echo $HISTCONTROL
ignoreboth
[root@localhost ~]# ls #这里输入了两个ls命令
anaconda-ks.cfg test
[root@localhost ~]# ls
anaconda-ks.cfg test
[root@localhost ~]# ls /tmp #这里还加上了显示指定目录/tmp
ks-script-9S0e_b testkyle1 vmware-root_719-4290035592
test testroot vmware-root_736-2991268455
testkyle vmware-root_717-4281712138 yum.log
[root@localhost ~]# cat /etc/issue #cat两个相同的文件
issue issue.net
[root@localhost ~]# cat /etc/issue
\S
Kernel \r on an \m
[root@localhost ~]# cat /etc/motd #cat命令前是有空格的
[root@localhost ~]# history #只显示了1个ls和1个ls /tmp以及没有加空格的cat /etc/issue
1 HISTCONTROL=ignoreboth
2 echo $HISTCONTROL
3 ls
4 ls /tmp
5 cat /etc/issue
6 history
由此得出的结论为:
ignoredups:如有相同的执行命令(命令+选项+参数),只显示一条
ignorespace:空格+命令,不会在history里显示
ignoreboth:结合ignoredups和ignorespace的功能
5、如果将此设定的参数永久保存了?当然是保存在配置文件里,/etc/profile,对于linux而言,也是对于运维人员而言,建议在/etc/profile.d/目录下新建一个.sh的文件存储,比如:
[root@localhost ~]# vim /etc/profile.d/history.sh
[root@localhost ~]# cat /etc/profile.d/history.sh
HISTCONTROL=ignoreboth
[root@localhost ~]# HISTCONTROL=ignorespace #重新设定,是为了防止之前的实验误导下面的操作结果
[root@localhost ~]# echo $HISTCONTROL
ignorespace
[root@localhost ~]# source /etc/profile.d/history.sh
[root@localhost ~]# echo $HISTCONTROL
ignoreboth
date
Linux系统上有两个时钟,分别是硬件时钟和系统时钟。硬件时钟是由计算机的主板里内部物理芯片来计时的,并由主板上的电池提供电源供电。系统时钟是系统启动时,从硬件时钟读取并设定其时间,由linux内核通过cpu工作频率进行计时的
date命令:显示和设置系统时间,可用下面两种格式
date [OPTION]... [+FORMAT]:显示日期时间
date [MMDDhhmm[[CC]YY][.ss]:设定日期时间
FORMAT格式说明:
%F:日期,显示为数字,格式为:2020-06-13
%D:显示英制格式,月日年,显示格式为:13/06/20
%T:时间,显示为数字,格式为:01:14:32
%Y:年份,只显示完整年份数字(4位数字),显示格式为:2020
%y:显示年份的后两位:显示格式为20
%m:月份,只显示数字,显示格式为:06
%d:日期,只显示数字,显示格式为:13
%H:小时,只显示数字,显示格式为:(00..23): 01
%k:小时,显示格式为(0..23)
%I:小时,格式为(01.. 12)
%h:显示月份,显示格式为:Jun
%M:分钟,只显示数字,显示格式为:18
%S:秒钟,只显示数字,显示格式为:33
%a:缩写星期
%A:完整星期
%b:缩写月份
%B:完整月份
%r:显示格式为(01:19:19 AM)
%R:同%H%M,格式为(01:19)
%s:从1970年1月1日至此刻所经历的秒数:timestamp显示格式为:1591982434。
[MMDDhhmm[[CC]YY][.ss]设置时间的格式说明:
MM:表示月份
DD:表示日期
hh:表示小时
mm:表示分钟
CC:表示当前用四位数字书写年份时的前两个数字
YY:表示当前用四位数字书写年份时的后两个数字
.ss:表示秒钟,注意点好不能省略
默认是时间格式,date
[root@Centos7 ~]#date
Sat Jun 13 01:22:47 CST 2020
显示日期:date +%F
[root@Centos7 ~]#date +%F
2020-06-13
显示昨天的日期
[root@Centos7 ~]#date -d '-1 day'
Fri Jun 12 01:24:07 CST 2020
[root@Centos7 ~]#date -d '-1 days'
Fri Jun 12 01:24:09 CST 2020
设置时间为2020年1月2日3时4分5秒
[root@Centos7 ~]#date 010203042020.50
Thu Jan 2 03:04:50 CST 2020
设置当前时间为明年的日期
[root@Centos7 ~]#date
Thu Jan 2 03:05:21 CST 2020
[root@Centos7 ~]#date -s "+1 year" +%F
2021-01-02
恢复当前时间,系统时间被更改了,但是硬件时间没有更改,可以将硬件时间作为系统时间的标准
[root@Centos7 ~]#clock -s #-s依据硬件时间设置系统时间
[root@Centos7 ~]#date
Sat Jun 13 01:27:59 CST 2020
显示当前日历
[root@Centos7 ~]#cal
June 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
hwclock/clock命令:操作硬件时钟
此命令常用的参数:
-s,--hctosys:表示以硬件时间为准,设定系统时间
-w,--systohc:表示以系统时间为准,设定硬件时间
示例在上面date命令里有说明,这里不叙述
echo
echo 会将字符串显示在标准输出即屏幕上
语法格式:echo [SHORT-OPTION] [STRING]
SHORT-OPTION:
-n:不自动附加换行符:即都在一行显示
-e:启用转义符,使能转义符
[root@Centos7 ~]#echo "hello world"
hello world
[root@Centos7 ~]#echo -n "hello world"
hello world[root@Centos7 ~]#
[root@Centos7 ~]#echo "hello \tworld"
hello \tworld
[root@Centos7 ~]#echo -e "hello \tworld"
hello world
[root@Centos7 ~]#echo -e "hello \tworld\n"
hello world
[root@Centos7 ~]#
hash
hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓冲表可大大提高命令的调用速率,清空hash缓冲,暴力方法:exit重新重连ssh
hash常见用法
hash:显示hash缓存
hash -l:显示hash缓存,可作为输入使用
hash -p PATH NAME:将命令全路径PATH起别名为name
hash -t NAME 打印缓存中的NAME的路径
hash -d NAME:清楚NAME缓存
hash -r:清楚缓存
[root@Centos7 ~]#hash
hits command
1 /usr/bin/cal
18 /usr/bin/date
1 /usr/bin/vim
4 /usr/bin/cat
2 /usr/bin/man
2 /usr/sbin/clock
1 /usr/bin/clear
[root@Centos7 ~]#hash -l
builtin hash -p /usr/bin/cal cal
builtin hash -p /usr/bin/date date
builtin hash -p /usr/bin/vim vim
builtin hash -p /usr/bin/cat cat
builtin hash -p /usr/bin/man man
builtin hash -p /usr/sbin/clock clock
builtin hash -p /usr/bin/clear clear
[root@Centos7 ~]#hash -p /usr/bin/cal H_CAL
[root@Centos7 ~]#hash
hits command
1 /usr/bin/cal
0 /usr/bin/cal
18 /usr/bin/date
1 /usr/bin/vim
4 /usr/bin/cat
2 /usr/bin/man
2 /usr/sbin/clock
1 /usr/bin/clear
[root@Centos7 ~]#H_CAL
June 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
[root@Centos7 ~]#hash -t cal
/usr/bin/cal
[root@Centos7 ~]#hash -r
[root@Centos7 ~]#hash
hash: hash table empty
ifconfig
配置网络接口,但是现在已经过时了,逐步被ip命令替代了;这个命令本身就很简单
Usage:
ifconfig [-a] [-v] [-s]
[add [/
[del [/
[[-]broadcast []] [[-]pointopoint []]
[netmask ] [dstaddr ] [tunnel ]
[outfill
[hw
[[-]trailers] [[-]arp] [[-]allmulti]
[multicast] [[-]promisc]
[mem_start
[txqueuelen
[[-]dynamic]
[up|down] ...
add :添加地址,比如:192.168.2.220
del :删除地址:比如:192.168.2.220
up:启用指定的网络设备;这个设定与配置文件的ONBOOT有关,如果配置文件里是yes就是重启后是开启的,如果是NO,重启后这个设备是就是关闭的
down:关闭指定的网络设备;这个设定与配置文件的ONBOOT有关,如果配置文件里是yes就是重启后是开启的,如果是NO,重启后这个设备是就是关闭的
netmask:子网掩码,显示格式示例:255.255.255.0
添加192.168.2.220在eth0网卡设备上
[root@Centos7 ~]#ifconfig eth0 add 192.168.2.220 #可加netmask也可以不加,但是建议还是加上
[root@Centos7 ~]#ifconfig eth0
eth0: flags=4163 mtu 1500
inet 192.168.2.119 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::393d:7c6:8030:20ea prefixlen 64 scopeid 0x20
ether 00:0c:29:17:7e:e8 txqueuelen 1000 (Ethernet)
RX packets 20677 bytes 4244627 (4.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2903 bytes 483519 (472.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
删除192.168.2.220
[root@Centos7 ~]#ifconfig eth0 del 192.168.2.220
[root@Centos7 ~]#ifconfig eth0
eth0: flags=4163 mtu 1500
inet 192.168.2.119 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::393d:7c6:8030:20ea prefixlen 64 scopeid 0x20
ether 00:0c:29:17:7e:e8 txqueuelen 1000 (Ethernet)
RX packets 20871 bytes 4283787 (4.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2939 bytes 487955 (476.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
再次添加192.168.2.220,使用netmask,然后再删除
[root@Centos7 ~]#ifconfig eth0 add 192.168.2.220 netmask 255.255.255.0
[root@Centos7 ~]#ifconfig eth0
eth0: flags=4163 mtu 1500
inet 192.168.2.119 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::393d:7c6:8030:20ea prefixlen 64 scopeid 0x20
ether 00:0c:29:17:7e:e8 txqueuelen 1000 (Ethernet)
RX packets 24398 bytes 4926296 (4.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3797 bytes 650984 (635.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@Centos7 ~]#ifconfig eth0 del 192.168.2.220 netmask 255.255.255.0
[root@Centos7 ~]#ifconfig eth0
eth0: flags=4163 mtu 1500
inet 192.168.2.119 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::393d:7c6:8030:20ea prefixlen 64 scopeid 0x20
ether 00:0c:29:17:7e:e8 txqueuelen 1000 (Ethernet)
RX packets 24470 bytes 4932824 (4.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3849 bytes 657298 (641.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
添加别名
[root@Centos7 ~]#ifconfig eth0:0 192.168.2.220/24 up
[root@Centos7 ~]#ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.2.119 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::393d:7c6:8030:20ea prefixlen 64 scopeid 0x20
ether 00:0c:29:17:7e:e8 txqueuelen 1000 (Ethernet)
RX packets 27190 bytes 5398985 (5.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4654 bytes 771091 (753.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:0: flags=4163 mtu 1500
inet 192.168.2.220 netmask 255.255.255.0 broadcast 192.168.2.255
ether 00:0c:29:17:7e:e8 txqueuelen 1000 (Ethernet)
[root@Centos7 ~]#ping -c1 -W1 192.168.2.220
PING 192.168.2.220 (192.168.2.220) 56(84) bytes of data.
64 bytes from 192.168.2.220: icmp_seq=1 ttl=64 time=0.048 ms
--- 192.168.2.220 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.048/0.048/0.048/0.000 ms
对别名eth0:0 down
[root@Centos7 ~]#ifconfig eth0:0 down
[root@Centos7 ~]#ping -c1 -W1 192.168.2.220
PING 192.168.2.220 (192.168.2.220) 56(84) bytes of data.
--- 192.168.2.220 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
down后,eth0:0就消失了
export
显示或设置环境变量
usage: export [-fn] [name[=value] ...] or export -p
-f:代表[变量名称]中为函数名称
-n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中
-p:列出所有的shell赋予程序的环境变量
通俗点说它的作用,就是把设定的变量变成环境变量,何为环境变量了?看下面例子就明白了
[root@Centos7 ~]#NAME=kyle
[root@Centos7 ~]#echo $NAME
kyle
[root@Centos7 ~]#echo $$
1932
[root@Centos7 ~]#bash
[root@Centos7 ~]#echo $$
52094
[root@Centos7 ~]#echo $NAME #定了NAME变量,为何没有显示了?注意看进程编号,在定义NAME值得时候,当前BASH的pid是1932,当我输入bash,表示启用了子进程(52094),这时NAME就为空
[root@Centos7 ~]#
[root@Centos7 ~]#pstree -p
...
├─sshd(1000)───sshd(1926)───bash(1932)───bash(52094)───pstree(52160)
[root@Centos7 ~]#exit #退出当前shell进程,也就是子shell
exit
[root@Centos7 ~]#echo $$
1932
[root@Centos7 ~]#export NAME #使用export将NAME提升为环境变量
[root@Centos7 ~]#bash
[root@Centos7 ~]#echo $$
52169
[root@Centos7 ~]#echo $NAME #当使用export定义变量NAME后,子shell也能够得到NAME的值
kyle
[root@Centos7 ~]#pstree -p
...
├─sshd(1000)───sshd(1926)───bash(1932)───bash(52169)───pstree(52227)