Linux常用命令及使用格式

1.命令格式

COMMAND [OPTIONS...] [ARGUMENTS...]

选项:用于启用或关闭命令的某个或某些功能

  • 短选项:UNIX 风格选项,-c 例如:-l, -h
  • 长选项:GNU风格选项,--word 例如:--all, --human
  • BSD风格选项: 一个字母,例如:a,使用相对较少

参数:命令的作用对象,比如:文件名,用户名等

[root@centos8 ~]# id -u test
1000
[root@centos8 ~]# ls -a
[root@centos8 ~]# ls --all
anaconda-ks.cfg  .cshrc         hosts.log        .tcshrc
[root@centos8 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          957Mi       291Mi       256Mi       6.0Mi       409Mi       500Mi
Swap:         2.0Gi       2.0Mi       2.0Gi
[root@centos8 ~]# free --human
              total        used        free      shared  buff/cache   available
Mem:          957Mi       291Mi       256Mi       6.0Mi       409Mi       500Mi
Swap:         2.0Gi       2.0Mi       2.0Gi
[root@centos8 ~]# ps a
   PID TTY      STAT   TIME COMMAND
  5966 tty1     Ss+    0:00 -bash
 20988 pts/2    Ss     0:00 -bash
 21479 pts/2    R+     0:00 ps a

注意:
多个选项以及多参数和命令之间使用空白字符分隔
取消和结束命令执行:Ctrl+c,Ctrl+d
Ctrl+C强行取消,容易丢失数据
Crtl+D正常取消,没有命令的时候退出登录
多个命令可以用 ";" 符号分开
一个命令可以用\分成多行

2.日期和时间

Linux的两种时钟

  • 系统时钟:由Linux内核通过CPU的工作频率进行的
  • 硬件时钟:主板

相关命令

  • date 显示和设置系统时间

    [root@centos8 ~]# date -d @`date +%s`
    Thu Apr 22 12:37:26 CST 2021
    [root@centos8 ~]# date -d @1619066213
    Thu Apr 22 12:36:53 CST 2021
    [root@centos8 ~]# date -d @1619066213 +%F_%T
    2021-04-22_12:36:53
  • clock,hwclock: 显示硬件时钟
    -s, --hctosys 以硬件时钟为准,校正系统时钟
    -w, --systohc 以系统时钟为准,校正硬件时钟

时区
/etc/localtime

[root@centos8 ~]# date
Fri Mar 12 10:51:28 CST 2021
[root@centos8 ~]# clock
2021-03-12 18:51:29.301536+08:00
[root@centos8 ~]# clock -w
[root@centos8 ~]# date 
Fri Mar 12 10:52:06 CST 2021
[root@centos8 ~]# clock
2021-03-12 10:52:07.865424+08:00
[root@centos8 ~]# ll /etc/localtime 
lrwxrwxrwx. 1 root root 35 Jun  7  2020 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
[root@centos8 ~]# timedatectl set-timezone Asia/Shanghai   # 仅支持centos6以上版本不包含6
----------------------------------
rsqfx@ubuntu1804:~$ cat /etc/timezone 
Asia/Harbin
rsqfx@ubuntu1804:~$ sudo -i
[sudo] password for rsqfx: 
root@ubuntu1804:~# timedatectl set-timezone Asia/Shanghai 
root@ubuntu1804:~# cat /etc/timezone                      
Asia/Shanghai

显示日历:

[root@centos8 ~]# cal
     March 2021     
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 31         

[root@centos8 ~]# cal 13 9 1998   # 显示19980913
   September 1998   
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@centos8 ~]# cal -y   # 显示当年日历
                               2021                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6       1  2  3  4  5  6
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    7  8  9 10 11 12 13
10 11 12 13 14 15 16   14 15 16 17 18 19 20   14 15 16 17 18 19 20
17 18 19 20 21 22 23   21 22 23 24 25 26 27   21 22 23 24 25 26 27
24 25 26 27 28 29 30   28                     28 29 30 31         
31                                                                
        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3                      1          1  2  3  4  5
 4  5  6  7  8  9 10    2  3  4  5  6  7  8    6  7  8  9 10 11 12
11 12 13 14 15 16 17    9 10 11 12 13 14 15   13 14 15 16 17 18 19
18 19 20 21 22 23 24   16 17 18 19 20 21 22   20 21 22 23 24 25 26
25 26 27 28 29 30      23 24 25 26 27 28 29   27 28 29 30         
                       30 31                                      
        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3    1  2  3  4  5  6  7             1  2  3  4
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    5  6  7  8  9 10 11
11 12 13 14 15 16 17   15 16 17 18 19 20 21   12 13 14 15 16 17 18
18 19 20 21 22 23 24   22 23 24 25 26 27 28   19 20 21 22 23 24 25
25 26 27 28 29 30 31   29 30 31               26 27 28 29 30      

       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6             1  2  3  4
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    5  6  7  8  9 10 11
10 11 12 13 14 15 16   14 15 16 17 18 19 20   12 13 14 15 16 17 18
17 18 19 20 21 22 23   21 22 23 24 25 26 27   19 20 21 22 23 24 25
24 25 26 27 28 29 30   28 29 30               26 27 28 29 30 31   
31                                                             
[root@centos8 ~]# cal 9 1752   # 特殊的一个月 可以搜下故事
   September 1752   
Su Mo Tu We Th Fr Sa
       1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

3.会话管理

3.1 screen

利用screen 可以实现会话管理,如:新建会话,共享会话等
注意:CentOS7 来自于base源,CentOS8 来自于epel源

# cnetos7安装srceen
[root@centos7 ~]# yum install screen -y   # 安装screen
# centos8安装srceen
[root@centos8 ~]# dnf install epel-release -y
[root@centos8 ~]# dnf install screen -y

screen命令常见用法:

  • 创建新screen会话
    screen –S [SESSION]
  • 加入screen会话
    screen –x [SESSION]
  • 退出并关闭screen会话
    exit
  • 剥离当前screen会话
    Ctrl+a,d
  • 显示所有已经打开的screen会话
    screen -ls
  • 恢复某screen会话
    screen -r [SESSION]

用screen必须在同一账号下面才可以

3.2 tmux

Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下

  • 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
  • 它可以让新窗口"接入"已经存在的会话。
  • 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
  • 它还支持窗口任意的垂直和水平拆分

安装:

# yum install tmux -y

启动与退出

[root@centos8 ~]# tmux
[root@centos8 ~]# exit
logout

mux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b ,即先按下
Ctrl+b ,快捷键才会生效。帮助命令的快捷键是Ctrl+b ? 然后,按下q 键,就可以退出帮助
新建会话
第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定名称的会话。

tmux new -s <session-name>

tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话

tmux ls
tmux list-session

分离会话
在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。

tmux detach

接入会话
tmux attach 命令用于重新接入某个已存在的会话。

tmux attach -t <session-name>

范例:

tmux attach -t 0

杀死会话
tmux kill-session命令用于杀死某个会话。

tmux kill-session -t <session-name>

切换会话
tmux switch命令用于切换会话

tmux switch -t <session-name>

可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
上下分窗格

tmux split-window
ctrl+b,"

左右分窗格

tmux split-window -h
ctrl+b,%

窗格快捷键

Ctrl+b %:划分左右两个窗格
Ctrl+b ":划分上下两个窗格
Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓
Ctrl+b ;:光标切换到上一个窗格
Ctrl+b o:光标切换到下一个窗格。
Ctrl+b {:当前窗格左移
Ctrl+b }:当前窗格右移
Ctrl+b Ctrl+o:当前窗格上移
Ctrl+b Alt+o:当前窗格下移
Ctrl+b x:关闭当前窗格
Ctrl+b !:将当前窗格拆分为一个独立窗口
Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小
Ctrl+b q:显示窗格编号

窗口管理
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口
新建窗口
tmux new-window命令用来创建新窗口

tmux new-window

新建一个指定名称的窗口

tmux new-window -n <window-name>

切换窗口
tmux select-window命令用来切换窗口
切换到指定编号的窗口

tmux select-window -t <window-number>

切换到指定名称的窗口

tmux select-window -t <window-name>

窗口快捷键

Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n:切换到下一个窗口。
Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
Ctrl+b w:从列表中选择窗口
Ctrl+b ,:窗口重命名

列出所有快捷键,及其对应的 Tmux 命令

tmux list-keys

列出所有 Tmux 命令及其参数

tmux list-commands

4.输出信息echo

echo命令可以将后面跟的字符进行输出
功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号
语法:

echo [-neE][字符串]

选项:

  • -E (默认)不支持 \ 解释功能
  • -n 不自动换行
  • -e 启用 \ 字符的解释功能

显示变量

echo "$VAR_NAME"   # 用变量值替换,弱引用
echo '$VAR_NAME'   # 变量不会替换,强引用

启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出

  • \a 发出警告声
  • \b 退格键
  • \c 最后不加上换行符号
  • \e escape,相当于\033
  • \n 换行且光标移至行首
  • \r 回车,即光标移至行首,但不换行
  • \t 插入tab
  • \ 插入\字符
  • \0nnn 插入nnn(八进制)所代表的ASCII字符
  • \xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
[root@centos8 ~]# echo -e "\a"   # 发出警告声

查看字符集

[root@centos8 ~]# echo $LANG
en_US.UTF-8

用16进制查看文件

[root@centos8 ~]# cat test.txt 
abc
[root@centos8 ~]# hexdump -C test.txt 
00000000  61 62 63 0a                                       |abc.|
00000004

查看 ascii 表

[root@centos8 ~]# dnf -y install man-pages
[root@centos8 ~]# man ascii

编码转换和查询:
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2ascii.jsp?action=transform
http://tool.oschina.net/encode

修改LANG变量实现中文语言提示

[root@centos7 ~]#xxx
bash: xxx: command not found...
[root@centos7 ~]#echo $LANG
en_US.UTF-8
[root@centos7 ~]#LANG=zh_CN.UTF-8
[root@centos7 ~]#echo $LANG
zh_CN.UTF-8
[root@centos7 ~]#xxx
bash: xxx: 未找到命令...

echo输出A-Z,并用tr转换为竖列

[root@centos8 ~]# echo {A..Z} | tr " " "\n"
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

显示变量

echo "$VAR_NAME”   #用变量值替换,弱引用
echo '$VAR_NAME’   #变量不会替换,强引用

\为转义符

[root@centos8 ~]# echo \      # \表示换行
>
[root@centos8 ~]# echo \\     # 第一个\表示转义符第二个为符号\
\
[root@centos8 ~]# echo \\\    # 第一个\表示转义符第二个为符号\第三个为换行
>
[root@centos8 ~]# echo \\\\   # 第一个和第三个为转义符,第二个和第四个为符号\
\\

符号双引号""单引号''反向单引号``的区别

[root@centos8 ~]# echo "echo $HOSTNAME"
echo centos8
[root@centos8 ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]# echo `echo $HOSTNAME`
centos8

总结:
双引号:不能识别命令,可以识别变量;
单引号:命令和变量都不识别,全部当成字符串;
反向单引号:变量和命令都识别,并将反向单引号里面的命令执行完成后的结果当作命令执行。
反向单引号\\等同于$(),并且反向单引号\\和$()里面只能是命令,但\\无法嵌套而$()可以嵌套也可以两者结合使用

示例:

[root@centos8 ~]# echo "I am `whoami`"
I am root
[root@centos8 ~]# echo "I am $(whoami)"
I am root

4.命令行历史

当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history
登录shell时,会读取命令历史文件中记录下的命令加载到内存中
登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史文件中
利用命令历史。可以用它来重复执行命令,提高输入效率

命令:history

  • -c: 清空命令历史
  • -d offset: 删除历史中指定的第offset个命令
  • n: 显示最近的n条历史
  • -a: 追加本次会话新执行的命令历史列表至历史文件
  • -r: 读历史文件附加到历史列表
  • -w: 保存历史列表到指定的历史文件
  • -n: 读历史文件中未读过的行到历史列表
  • -p: 展开历史参数成多行,但不存在历史列表中
  • -s: 展开历史参数成一行,附加在历史列表后

命令历史相关环境变量

  • HISTSIZE:命令历史记录的条数
  • HISTFILE:指定历史文件,默认为~/.bash_history
  • HISTFILESIZE:命令历史文件记录历史的条数
  • HISTTIMEFORMAT="%F %T \whoami\" 显示时间和用户
  • HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史
  • HISTCONTROL:控制命令历史的记录方式
    ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”
    ignorespace 忽略所有以空白开头的命令
    ignoreboth 相当于ignoredups, ignorespace的组合
    erasedups 删除重复命令

持久保存变量

以上变量可以 export 变量名="值" 形式存放在 /etc/profile 或 ~/.bash_profile

[root@centos8 ~]# cat /etc/profile
# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export HISTTIMEFORMAT="%F %T "
[root@centos8 ~]# . /etc/profile

配置环境变量,实现执行history的时候可以看到执行命令的时间

[root@centos8 ~]# vim .bash_profile
export HISTCONTORL
export HISTTIMEFORMAT="%F %T "
[root@centos8 ~]# source .bash_profile
[root@centos8 ~]# history|tail
  992  2021-04-22 13:57:05 date -d @1619066213
  993  2021-04-22 13:57:05 date -d @1619066213 +%F_%T
  994  2021-04-22 13:57:05 dnf -y epel-release
  995  2021-04-22 13:57:05 dnf install epel-release -y
  996  2021-04-22 13:57:05 yum install tmux -y
  997  2021-04-22 13:57:05 tmux
  998  2021-04-22 13:57:05 ls
  999  2021-04-22 13:57:05 exit
 1000  2021-04-22 13:57:07 history 
 1001  2021-04-22 13:57:23 history|tail

5.调用命令行历史

#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-1 并回车执行
按 Ctrl+p 并回车执行

!:0   执行前一条命令(去除参数)
!n    执行history命令输出对应序号n的命令
!-n   执行history历史中倒数第n个命令
!string     重复前一个以“string”开头的命令
!?string    重复前一个包含string的命令
!string:p   仅打印命令历史,而不执行
!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容
!*:p 打印输出 !* (上一条命令的所有参数)的内容
^string   删除上一条命令中的第一个string
^string1^string2     将上一条命令中的第一个string1替换为string2
!:gs/string1/string2 将上一条命令中所有的string1都替换为 string2
使用up(向上)和down(向下)键来上下浏览从前输入的命令
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出

#要重新调用前一个命令中最后一个参数
!$        表示前一个命令中最后一个参数
Esc, .    点击Esc键后松开,然后点击 . 键
Alt+ .    按住Alt键的同时点击 . 键

command !^        利用上一个命令的第一个参数做command的参数
command !$        利用上一个命令的最后一个参数做command的参数
command !*        利用上一个命令的全部参数做command的参数
command !:n       利用上一个命令的第n个参数做command的参数
command !n:^      调用第n条命令的第一个参数
command !n:$      调用第n条命令的最后一个参数
command !n:m      调用第n条命令的第m个参数
command !n:*      调用第n条命令的所有参数
command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一个参数
command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n个参数
command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数

6.bash的快捷键

Ctrl + l  清屏,相当于clear命令
Ctrl + o  执行当前命令,并重新显示本命令
Ctrl + s  阻止屏幕输出,锁定
Ctrl + q  允许屏幕输出,解锁
Ctrl + c  终止命令
Ctrl + z  挂起命令
Ctrl + a  光标移到命令行首,相当于Home
Ctrl + e  光标移到命令行尾,相当于End
Ctrl + f  光标向右移动一个字符
Ctrl + b  光标向左移动一个字符
Alt + f   光标向右移动一个单词尾
Alt + b   光标向左移动一个单词首
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u  从光标处删除至命令行首
Ctrl + k  从光标处删除至命令行尾
Alt + r   删除当前整行
Ctrl + w  从光标处向左删除至单词首
Alt + d   从光标处向右删除至单词尾
Ctrl + d  删除光标处的一个字符
Ctrl + h  删除光标前的一个字符
Ctrl + y  将删除的字符粘贴至光标后
Alt + c   从光标处开始向右更改为首字母大写的单词
Alt + u   从光标处开始,将右边一个单词更改为大写
Alt + l   从光标处开始,将右边一个单词更改为小写
Ctrl + t  交换光标处和之前的字符位置
Alt + t   交换光标处和之前的单词位置
Alt + #   提示输入指定字符后,重复显示该字符#次