1.命令基本格式
1.1命令提示符基本格式
[root@centos8 ~]#
-
root:表示当前用户
-
@:分隔符没有实际意义
-
centos8:主机名
-
~:当前所在目录
-
#:命令提示符。#表示超级用户,$表示普通用户
[root@centos8 ~]# su user
[user@centos8 root]$
1.2命令基本格式
COMMAND [OPTIONS...] [ARGUMENTS...]
-
[]:表示其中的内容是可选的
-
OPTIONS:命令的附加功能
长选项:GUN风格,如--human
短选项:UNIX 风格选项,如-l
BSD风格选项:一个字母,例如:a,使用相对较少
-
ARGUMENTS:命令的作用对象,如文件、用户等
[root@centos8 home]# ll -h
[root@centos8 home]# ll --human
[root@centos8 home]# ps aux
注意:多个命令可以用 ";" 符号分开,一个命令可以用\分成多行
1.3命令的执行
1.3.1 执行命令过程
输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分 配资源 将其运行起来
1.3.2 shell中可执行的两类命令
-
内部命令:由shell自带的,而且通过某命令形式提供
-
外部命令:在文件系统路径下有对应的可执行程序文件
-
命令查找顺序依次为别名→内部命令→外部命令
使用type可以判断命令类型
[root@centos8 ~]# type -a bash
bash is /usr/bin/bash
[root@centos8 ~]# type echo
echo is a shell builtin
1.3.3 Hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的 路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不 存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率
- hash -l 显示hash缓存及name
- hash -p path name 将命令全路径path起别名为name
- hash -d name 清除name缓存
- hash -r 清除所有hash缓存
- hash -t name 查看name缓存的路径
[root@centos8 ~]# hash -l
builtin hash -p /usr/bin/lscpu lscpu
builtin hash -p /usr/bin/lsblk lsblk
[root@centos8 ~]# hash -d lscpu
[root@centos8 ~]# hash -l
builtin hash -p /usr/bin/lsblk lsblk
2.常见的命令
2.1查看系统硬件信息
2.1.1 查看cpu的信息
lscpu
cat /proc/cpuinfo
[root@centos8 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1 #每个core 有几个线程
Core(s) per socket: 4 #每个槽位有4个core
Socket(s): 2 #服务器面板上有2个cpu 槽位
NUMA node(s): 2 #nodes的数量
[root@centos8 ~]# cat /proc/cpuinfo
2.1.2 查看内存大小
free
cat /proc/meminfo
[root@centos8 ~]# free
total used free shared buff/cache available
Mem: 1870836 202132 842644 1996 826060 1503060
Swap: 0 0 0
[root@centos8 ~]# cat /proc/meminfo
MemTotal: 1870836 kB
MemFree: 842872 kB
MemAvailable: 1503288 kB
Buffers: 2104 kB
Cached: 758672 kB
SwapCached: 0 kB
...
2.1.3 查看硬盘和分区情况
lsblk
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 50G 0 disk
└─vda1 253:1 0 50G 0 part /
2.2查看系统信息
2.2.1 查看系统版本信息
uname:查看系统内核版本
[root@centos8 ~]# uname -r
4.18.0-193.14.2.el8_2.x86_64
cat /etc/redhat-release(查看系统发行版本)
[root@centos8 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
[root@centos8 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
#ubuntu查看发行版本
[root@ubuntu1804 ~]#cat /etc/os-release
[root@ubuntu1804 ~]#cat /etc/issue
[root@ubuntu1804 ~]#lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
2.2.2设置主机名称
hostname name(此方法临时生效)
[root@centos8 ~]#hostname bj-yz-k8s-node1-100-10.lx
主机名设置应当遵循一定的规范,如上格式为城市+区域+业务格式,生产中应根据公司实际业务进行设置
2.3管理内部命令
enable 管理内部命令
- enable cmd 启用内部命令
- enable –n cmd 禁用内部命令
- enable –n 查看所有禁用的内部命令
2.4日期和时间
2.4.1 cal
cal [options] [[[day] month] year]
[root@centos8 ~]# cal 7 2019
July 2019
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
2.4.2 date
显示和设置系统日期和时间
date
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]][.ss]]
-
-d, --date=STRING display time described by STRING, not 'now'
-
%F full date; same as %Y-%m-%d
-
%T time; same as %H:%M:%S
-
%u day of week (1..7); 1 is Monday
[root@centos8 ~]# date
Sat Nov 28 16:48:36 CST 2020
#设置当前日期为2020-11-29
[root@centos8 ~]# date 112922552020
Sun Nov 29 22:55:00 CST 2020
[root@centos8 ~]# date +%Y/%m/%d
2020/11/28
[root@centos8 ~]# touch `date +%F_%H-%M-%S`.log
[root@centos8 ~]# ls
2020-11-30_06-33-23.log anaconda-ks.cfg a.txt
#显示当前时间,格式:2016-06-18 10:20:30
[root@centos8 ~]# date '+%F %T'
2020-11-30 06:25:06
#显示前天是星期几
[root@centos8 ~]# date -d '-2 day' +%u
5
2.4.3 clock\hwclock
显示硬件时间
-s --hctosys 以硬件时钟为准,校正系统时钟
-w --systohc 以系统时钟为准,校正硬件时钟
2.5计算器
bc
[root@centos8 ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+11
12
#输出十进制,输入二进制
obase=10
ibase=2
101
5
2.6关机和重启
2.6.1命令
halt:关机
poweroff:关机
shutdown:关机和重启
shutdown [OPTIONS...] [TIME] [WALL...]
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7)
now: 立刻,相当于+0
+#: 相对时间表示法,几分钟之后;例如 +3
hh:mm: 绝对时间表示,指明具体时间
reboot:重启
init 0:重启
2.6.2正确关机方法
资料同步sync
执行关机或重启命令
2.7用户登陆信息查看
w:显示系统中所有登陆的用户及正在进行的操作
[root@centos8 ~]# w
17:14:30 up 15 days, 18:00, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 110.152.182.41 13:44 1.00s 0.19s 0.00s w
whoami: 显示当前登录有效用户
[root@centos8 ~]# whoami
root
[root@centos8 ~]# who am i
root pts/0 2020-11-29 02:39 (10.0.0.1)
who: 系统当前所有的登录会话
[root@centos8 ~]# who
root pts/0 2020-11-28 13:44 (110.152.182.41)
2.8会话管理
用户使用终端窗口与计算机进行交互的过程称为会话(session)
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。关闭窗口,会话内部的进程也随之结束,即使进程没有运行完
我们使用终端复用器软件可以解决这个问题
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
2.8.1 screen
系统最小化安装没有screen软件,需要自己安装,这里使用yum安装
#centos8要使用于epel源
yum -y install screen
screen –S [SESSION]:创建一个会话
screen –x [SESSION]:加入一个会话
exit:退出并关闭会话
Ctrl+a,d:脱离当前会话
screen -ls:显示所有打开的会话
screen -r [SESSION]:回复某个会话
2.8.2 tmux(作为了解即可)
[root@centos8 ~]# yum -y install screen
[root@centos8 ~]# tmux
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b
,即先按下Ctrl+b
,快捷键才会生效。
举例来说,帮助命令的快捷键是Ctrl+b ?
。它的用法是,在 Tmux 窗口中,先按下Ctrl+b
,再按下?
,就会显示帮助信息。
然后,按下 ESC 键或q
键,就可以退出帮助。
新建会话
第一个启动的 Tmux 窗口,编号是0
,第二个窗口的编号是1
,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。
tmux new -s <session-name>
类似于在命令行中执行tmux,所以在已经开启的会话中执行命令会报下面错误
sessions should be nested with care, unset $TMUX to force
tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话
[root@centos8 ~]# tmux ls
0: 1 windows (created Sun Nov 29 02:20:25 2020) [187x43] (attached)
分离会话
在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
[root@centos8 ~]# tmux detach
接入会话
[root@centos8 ~]# tmux attach -t 0
结束会话
[root@centos8 ~]#tmux kill-session -t <session-name>
切换会话
[root@centos8 ~]#tmux switch -t <session-name>
窗格快捷键
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:显示窗格编号
窗口快捷键
Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。
Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。
Ctrl+b n:切换到下一个窗口。
Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号
Ctrl+b w:从列表中选择窗口
Ctrl+b ,:窗口重命名
2.9输出信息echo
echo:display a line of text
- -e:enable interpretation of backslash escapes(启用反斜杠转义功能)
启用-e选项会将下面字符进行特殊处理,而不会输出字符本身
-
\a 发出警告声
-
\b 退格键
-
\c 最后不加上换行符号
-
\e escape,相当于\033
-
\n 换行且光标移至行首
-
\r 回车,即光标移至行首,但不换行
-
\t 插入tab
-
\ \插入\字符
-
\0nnn 插入nnn(八进制)所代表的ASCII字符
-
\xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
[root@centos8 ~]# ls
anaconda-ks.cfg
[root@centos8 ~]# echo 123 > a.txt
[root@centos8 ~]# ls
anaconda-ks.cfg a.txt
[root@centos8 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos8 ~]# echo -e '\a'
2.10命令行扩展
`` ,' ' , " ",$(),{}用法展示
[root@centos8 ~]# echo "echo $HOSTNAME"
echo centos8
[root@centos8 ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
[root@centos8 ~]# echo `echo $HOSTNAME`
centos8
[root@centos8 ~]# echo $(echo $HOSTNAME)
centos8
[root@centos8 ~]# echo name{1,2,3}
name1 name2 name3
[root@centos8 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@centos8 ~]# echo {1..20..2}
1 3 5 7 9 11 13 15 17 19
[root@centos8 ~]#ll `echo `date +%F`.txt`
-bash: .txt: command not found
ls: cannot access 'date': No such file or directory
ls: cannot access '+%F': No such file or directory
[root@centos8 ~]#ll $(echo $(date +%F).txt)
-rw-r--r-- 1 root root 0 Mar 20 09:55 2020-03-20.txt
通过以上的命令实例我们不难得出下面结论
- " ":能识别引号内变量
- ' ':不能识别引号内的命令和变量,只会将内容当作字符串处理
- ` `:既能识别变量也能识别命令
- $():既能识别变量也能识别命令,效果基本与``相同,不过涉及到命令嵌套时需使用$()
- {}:能将{}内部的字符串全部输出,并可以依次与外部字符串组合,从而简化打印
2.11 Tab键
2.11.1 补全命令
- 补全内部及外部命令
- 补全命令的子命令,需安装
bash-completion
2.11.2 补全路径
对用户输入的路径进行补全操作
2.11.3补全规则
唯一则直接补全(单击Tab),不唯一则列出所有相匹配的命令或者路径(双击Tab)
2.12历史命令
2.12.1 执行方式
系统会将执行的命令保存在内存当中
当用户正常退出时,会将内存中的历史命令放入~/.bash_history文件中
再次登陆时系统会将~/.bash_history文件中的命令加载到内存当中,而此时新执行的命令又会保存在内存中,当用户正常退出时,系统会把新的命令保存至配置文件中
2.12.2 命令选项
history
-c:清除内存中的所有历史命令
-d offset:删除第offset条历史命令
n:显示最近n条历史
-a:将本次会话新执行的命令历史列表添加至历史文件
-s:向历史命令列表中添加一条命令,但这条命令不真正的执行
2.12.3 相关变量
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
#要求在执行history命令的时候可以看见执行时间
#这里我们配置在全局配置文件/etc/profile 当中
[root@centos8 ~]# vim /etc/profile
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
HISTTIMEFORMAT="%F %T "
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL HISTTIMEFORMAT
[root@centos8 ~]# history
1 2020-11-29 21:56:41 hostname -I
2 2020-11-29 21:56:41 hostname -i
3 2020-11-29 21:56:41 free
2.12.3 调用历史命令的快捷键
#重复前一个命令
!:0 执行前一条命令(去除参数)
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
!string 重复前一个以“string”开头的命令
1.13 bash的快捷键
!?string 重复前一个包含string的命令
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
#重复前一个命令的参数
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 开头的命令,并获取它的所有参数
2.13bash的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Ctrl + Alt + F1-F7 切换终端
Alt + r 删除当前整行
在xshell中需对ALT键进行设置,不然会因为快捷键冲突导致无法使bash快捷键生效
3获取帮助命令
3.1whatis
Usage: whatis [OPTION...] KEYWORD... 与man -f效果相同
使用数据库来显示命令的简短描述
如果系统刚安装则可能无法使用该命令,此时Centos7以上版本需执行mandb,Centos6之前版本需执行makewhatis
[root@centos8 ~]# whatis whatis
whatis (1) - display one-line manual page descriptions
3.2查看命令帮助
3.2.1 内部命令
help COMMAND
man bash
[root@centos8 ~]# type echo
echo is a shell builtin
[root@centos8 ~]# help echo
echo: echo [-neE] [arg ...]
Write arguments to the standard output.
...
[root@centos8 ~]# man echo
NAME
echo - display a line of text
SYNOPSIS
echo [SHORT-OPTION]... [STRING]...
echo LONG-OPTION
...
3.2.2 外部命令
COMMAND --help | -h
man COMMAND
[root@centos8 ~]# man date
NAME
date - print or set the system date and time
SYNOPSIS
date [OPTION]... [+FORMAT] #[]表示内容是可选
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] #|表示或者
DESCRIPTION
Display the current time in the given FORMAT, or set the system date.
Mandatory arguments to long options are mandatory for short options too.
-d, --date=STRING #简写方式和完整写法
display time described by STRING, not 'now'
3.2.2 man 命令
提供命令帮助的文件,手册页存放在/usr/share/man
[root@centos8 ~]# whatis vim
vim (1) - Vi IMproved, a programmer's text editor
vim (5) - Vi IMproved, a programmer's text editor
上例中的1、5数字代表着man命令的章节,数字与代表内容关系如下
- 1:使用者在shell环境中可以操作的指令
- 2:系统可以调用的函数库
- 3:函数和函数库
- 4:设备文件及特殊文件
- 5:配置文件
- 6:游戏
- 7:其他系统文档
- 8:管理员可用的指令
- 9:与内核相关的API
#查看某个章节的内容
[root@centos8 ~]# man 1 vim
VIM(1) General Commands Manual VIM(1)
NAME
vim - Vi IMproved, a programmer's text editor
SYNOPSIS
vim [options] [file ..]
vim [options] -
vim [options] -t tag
vim [options] -q [errorfile]
man命令的快捷键
-
#:跳转至第#行
-
1G: 回到文件首部
-
G:翻至文件尾部
-
/KEYWORD
以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写
n:下一个
N:上一个
-
?KEYWORD
以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写
n:跟搜索命令同方向,下一个
N:跟搜索命令反方向,上一个
-
b:向前翻一页
-
d:向后翻一页