Linux命令总结
echo
功能说明
echo
命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用
语法
echo [选项]... [参数]...
选项
-n
不输出末尾的换行符
-E
禁用反斜线转义 (default)
-e
启用反斜线转义
如果使用-e
选项,若出现以下字符,则特别加以处理,而不会将它当成一般文字输出
\a
发出警告声
\b
删除前一个字符
\c
最后不加上换行符号
\n
换行且光标移动到行首
\t
插入tab
\\
插入\
字符
实例
# 简单输出字符串
echo 'Hello CentOS'
Hello CentOS
# 输出命令的执行结果
echo "$(date +"%F")"
2021-03-08
# 输出多行字符串
echo -e 'Hello Linux\nHello CentOS'
Hello Linux
Hello CentOS
# echo的另类用法一:输出带有色彩的字符串
echo -e "\e[1;31mThis is red text\e[0m"
This is red text
# \e[1;31m:将颜色设置为红色
# \e[0m:将颜色重置
# 颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
# echo的另类用法二:输出带有背景色的字符串
echo -e "\e[1;42mGreed Background\e[0m"
Greed Background
# 颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
# echo的另类用法三:输出闪动字符
echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
# 红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐
PS:
关于输出字符带颜色的,我们可以用一张原理图来理解
参考文献
echo命令
echo 在shell及脚本中显示色彩及闪烁警告效果
Bash输出效果带闪烁
screen
功能说明
Screen
是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能
会话恢复
只要Screen
本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用–即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r
就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach
,在保证里面的程序正常运行的情况下让Screen
挂起(切换到后台)。这一点和图形界面下的VNC很相似
多窗口
在Screen
环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen
实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享Screen
可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护
语法
screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
选项
-A
将所有的视窗都调整为目前终端机的大小。
-d <作业名称>
将指定的screen作业离线。
-h <行数>
指定视窗的缓冲区行数。
-m
即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>
恢复离线的screen作业。
-R
先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s
指定建立新视窗时,所要执行的shell。
-S <作业名称>
指定screen作业的名称。
-v
显示版本信息。
-x
恢复之前离线的screen作业。
-ls或--list
显示目前所有的screen作业。
-wipe
检查目前所有的screen作业,并删除已经无法使用的screen作业
常用screen参数
screen -S yourname # 新建一个叫yourname的session
screen -ls # 列出当前所有的session
screen -r yourname # 回到yourname这个session
screen -d yourname # 远程detach某个session
screen -d -r yourname # 结束当前session并回到yourname这个session
screen -x yourname # 加入yourname这个session,共享session
# 如果当前的session是被占用的话,则无法使用 -r 恢复到这个session中,但可以使用 -x 参数加入到这个session中
在每个screen session
下,所有命令都以 ctrl+a(C-a) 开始
C-a ?
-> 显示所有键绑定信息
C-a c
-> 创建一个新的运行shell的窗口并切换到该窗口
C-a n
-> Next,切换到下一个 window
C-a p
-> Previous,切换到前一个 window
C-a 0..9
-> 切换到第 0…9 个 window
Ctrl+a [Space]
-> 由视窗0循序切换到视窗9
C-a C-a
-> 在两个最近使用的 window 间切换
C-a x
-> 锁住当前的 window,需用用户密码解锁
C-a d
-> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z
-> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w
-> 显示所有窗口列表
C-a t
-> time,显示当前时间,和系统的 load
C-a k
-> kill window,强行关闭当前的 window
C-a [
-> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b
Backward,PageUp
C-f
Forward,PageDown
H(大写) High
,将光标移至左上角
L Low
,将光标移至左下角
0
移到行首
$
行末
w forward one word
,以字为单位往前移
b backward one word
,以字为单位往后移
Space 第一次按为标记区起点
,第二次按为终点
Esc
结束 copy mode
C-a ]
-> paste,把刚刚在 copy mode 选定的内容贴上
实例
# 安装screen
yum install screen
# 创建一个以hooper命名的screen窗口,并运行着ping命令
$ screen -S hooper ping www.baidu.com
[hooper@magedu-demo ~]$
PING www.a.shifen.com (182.61.200.6) 56(84) bytes of data.
PING www.a.shifen.com (182.61.200.6) 56(84) bytes of data.
64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=1 ttl=53 time=3.56 ms
64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=2 ttl=53 time=3.33 ms
64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=3 ttl=53 time=3.36 ms
64 bytes from 182.61.200.6 (182.61.200.6): icmp_seq=4 ttl=53 time=3.30 ms
# 暂时离开当前session,键盘按“Ctrl+a ---> d”
[hooper@magedu-demo ~]$ screen -S hooper ping www.baidu.com
[detached from 4812.hooper]
# 显示当前所有screen的会话
[hooper@magedu-demo ~]$ screen -ls
There is a screen on:
4794.hooper (Detached)
1 Socket in /var/run/screen/S-hooper.
# 恢复当前会话
[hooper@magedu-demo ~]$ screen -r hooper
[screen is terminating]
参考文献
date
功能说明
date
命令显示和设置系统时间
语法
date [选项] (参数)
选项
-d<字符串>
显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>
根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u
显示GMT
参数
<+时间日期格式>
:指定显示时使用的日期时间格式
常用的日期格式字符串列表
%H
小时,24小时制(00~23)
%I
小时,12小时制(01~12)
%k
小时,24小时制(0~23)
%l
小时,12小时制(1~12)
%M
分钟(00~59)
%p
显示出AM或PM
%r
显示时间,12小时制(hh:mm:ss %p)
%s
从1970年1月1日00:00:00到目前经历的秒数
%S
显示秒(00~59)
%F
显示长日期,相当于年月日格式
%T
显示时间,24小时制(hh:mm:ss)
%X
显示时间的格式(%H:%M:%S)
%Z
显示时区,日期域(CST)
%a
星期的简称(Sun~Sat)
%A
星期的全称(Sunday~Saturday)
%h,%b
月的简称(Jan~Dec)
%B
月的全称(January~December)
%c
日期和时间(Tue Nov 20 14:12:58 2012)
%d
一个月的第几天(01~31)
%x,%D
日期(mm/dd/yy)
%j
一年的第几天(001~366)
%m
月份(01~12)
%w
一个星期的第几天(0代表星期天)
%W
一年的第几个星期(00~53,星期一为第一天)
%y
年的最后两个数字(1999则是99)
实例
# 格式化输出
[hooper@magedu-demo ~]$ date +"%F"
2021-03-11
# 显示昨天的日期
[hooper@magedu-demo ~]$ date -d "1 day ago" +"%F"
2021-03-10
# 显示下个月的日期
[hooper@magedu-demo ~]$ date -d "+1 month" +"%F"
2021-04-11
# 设置时间,生产环境中,尽量不修改时间。会造成服务器时间错误,而损失惨重
# 设置当前时间,只有root权限才能设置,其他只能查看
[hooper@magedu-demo ~]$ date
2021年 03月 12日 星期五 10:11:51 CST
[hooper@magedu-demo ~]$ date -s 10:00
date: 无法设置日期: 不允许的操作
2021年 03月 12日 星期五 10:00:00 CST
# 修改系统具体时间,不会对日期做出修改
[root@magedu-demo ~]# date
Fri Mar 12 10:13:05 CST 2021
[root@magedu-demo ~]# date -s 10:00
Fri Mar 12 10:00:00 CST 2021
[root@magedu-demo ~]# date
Fri Mar 12 10:00:01 CST 2021
# 修改系统日期,具体时间则默认为00:00:00
[root@magedu-demo ~]# date
Fri Mar 12 10:16:22 CST 2021
[root@magedu-demo ~]# date -s 20200501
Fri May 1 00:00:00 CST 2020
[root@magedu-demo ~]# date
Fri May 1 00:00:01 CST 2020
# 修改系统的具体时间及指定日期
[root@magedu-demo ~]# date
Fri Mar 12 10:18:37 CST 2021
[root@magedu-demo ~]# date -s "18:00:00 2028-02-28"
Mon Feb 28 18:00:00 CST 2028
[root@magedu-demo ~]# date
Mon Feb 28 18:00:01 CST 2028
# 扩展:查看硬件时间
clock
Fri 12 Mar 2021 10:19:30 AM CST -0.385782 seconds
# 将系统时间写入到硬件时间中
# system time ---> hardware clock
clock -w
# 将硬件时间写入到系统时间中
# hardware clock ---> system time
clock -s
参考文献
ifconfig
功能说明
ifconfig
命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了
语法
ifconfig [选项] [参数]
选项
add<ip地址>
:设置网络设备IPv6的ip地址;
del<ip地址>:
删除网络设备IPv6的IP地址;
down
:关闭指定的网络设备;
<hw<网络设备类型><硬件地址>:
设置网络设备的类型与硬件地址;
io_addr<I/O地址>
:设置网络设备的I/O地址;
irq<IRQ地址>
:设置网络设备的IRQ;
media<网络媒介类型>
:设置网络设备的媒介类型;
mem_start<内存地址>
:设置网络设备在主内存所占用的起始地址;
metric<数目>
:指定在计算数据包的转送次数时,所要加上的数目;
mtu<字节>
:设置网络设备的MTU;
netmask<子网掩码>
:设置网络设备的子网掩码;
tunnel<地址>
:建立IPv4与IPv6之间的隧道通信地址;
up
:启动指定的网络设备;
-broadcast<地址>
:将要送往指定地址的数据包当成广播数据包来处理;
-pointopoint<地址>
:与指定地址的网络设备建立直接连线,此模式具有保密功能;
-promisc
:关闭或启动指定网络设备的promiscuous模式;
IP地址
:指定网络设备的IP地址;
网络设备
:指定网络设备的名称
实例
# 显示网络设备信息
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.168.66 netmask 255.255.255.0 broadcast 192.168.168.255
ether 52:54:00:ed:e8:61 txqueuelen 1000 (Ethernet)
RX packets 2125878 bytes 2609714626 (2.4 GiB)
RX errors 0 dropped 55129 overruns 0 frame 0
TX packets 188130 bytes 18963638 (18.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 166 bytes 17432 (17.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 166 bytes 17432 (17.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 启动、关闭eth0网卡
ifconfig eth0 up
ifconfig eth0 down
# 修改ip地址
ifconfig eth0 192.168.168.68 netmask 255.255.255.0
export
功能说明
export
命令用于将shell
变量输出为环境变量,或者将shell
函数输出为环境变量
一个变量创建时,它不会自动地为在它之后创建的shell
进程所知。而命令export
可以向后面的shell
传递变量的值。当一个shell
脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export
命令可以用于传递一个或多个变量的值到任何后继脚本
语法
export (选项) (参数)
选项
-f
:代表[变量名称]中为函数名称
-n
:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中
-p
:列出所有的shell赋予程序的环境变量
参数
变量:指定要输出或者删除的环境变量
实例
# 查看已经存在的环境变量
export
declare -x CLASSPATH=".:/usr/local/java/lib:/usr/local/java/jre/lib"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="999999999"
declare -x HISTTIMEFORMAT="%F %T root "
declare -x HOME="/root"
declare -x HOSTNAME="magedu-demo"
declare -x JAVA_HOME="/usr/local/java"
declare -x JRE_HOME="/usr/local/java/jre"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/local/java/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x TERM="xterm-256color"
declare -x USER="root"
declare -x XDG_SESSION_ID="232"