3.1 命令格式 cmd opt arg
COMMAND [OPTIONS...] [ARGUMENTS...]
3.1.1 options:选项
用于启用或关闭命令的某个或某些功能
- 短选项:UNIX 风格选项,-c 例如:-l, -h
- 长选项:GNU风格选项,--word 例如:--all, --human
- BSD风格选项: 一个字母,例如:a
许多短选项都是长选项的缩写,比如 -a= --all
多选项可组合使用,以下三者等价:
ls -l --all
ls -al
ls -la
3.1.2 arguments:参数
命令的作用对象,比如:文件名、目录、用户名等
注意事项:
- 多个选项以及多参数和命令之间使用空白字符分隔
-
结束命令执行:Ctrl+C,Ctrl+D、 C是强制退出,D是正常退出
因为某些命令开始之后会一直不停进行 - 多个命令可以用 " ; " 符号分开
- 一个命令可以用 \ 分成多行
3.2 命令提示符 prompt
**[root@localhost ~]# ** 用户名@主机名 ~ 表示此用户的home目录
- **#表示管理员 **
- $表示普通用户
命令提示符有固定的格式,而且可以自定义
显示提示符当前格式:echo $PS1 严格区分大小写!!!
默认值:[\u@\h \W]$
\e 控制符 也可写为\033(3137=七种字体颜色,4147=七种背景颜色)
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数
设置字符颜色格式为:
\[\e[F;B;Sm\] #其中e与033等效 #FBS不论顺序,不必须出现
#对各个元素颜色进行设置
\[\e [1;36m\] [
\[\e [0m\] \t
\[\e [1;32m\] \u
\[\e [31m\] @\h
\[\e [1;37m\] \W
\[\e [1;35m\] ]
\[\e [0m\] #标准结尾 若结尾在最后,则对提示符也生效
\\$ #\$表示提示符,第一个\用来对第二个进行转义
centOS为了持久保存提示符格式,需要保存文件在 /etc/profile.d/目录,文件名.sh
- 命令 nano /etc/profile.d/env.sh 执行
- 进入nano界面,将编写好的格式粘贴进去,直接ctrl+X退出会提示是否保存
- 按Y保存,然后按enter退出
- cat /etc/profile.d/env.sh检查是否已经写好此文件
- exit退出,重新登录看是否有效
Ubuntu修改提示符对应每个账户是独立的
Ubuntu切换成root的操作如下:
- 命令sudo -i
- 输入当前用户的密码(而不是root的密码)
3.3 简单常用命令
3.3.1 时间设置
Linux分两种时间:
- 系统时钟(date):由Linux内核通过CPU的工作频率进行的
- 硬件时钟(clock):主板有自己单独的电池供电,保证记录时间
相关命令:
- 自定义修改系统时间:date MMDDhhmmYYYY . ss
- -s, --hctosys 以硬件时钟为准进行校正(命令为clock -s)
-w, --systohc 以系统时钟为准进行校正(命令为clock -w) - 若不知道标准时间,ping一台联网的机器,
同步远程服务器的时间:ntpdate IP 即可同步系统时间,再使用clock -w即可同步硬件
3.3.2 查看硬件与软件
- CPU—— lscpu 查看Model name即为型号
- 内存—— free -h 查看mem total
命令 init 3 暂时关闭图形界面,大大节省内存 - 网卡—— ip a
安装OS设置网卡为桥接模式,才能被其他人连接,NAT无法被连接!!!
看到多个网卡,lo与virbr0均为虚拟网卡,ens为物理网卡 - 硬盘—— lsblk
- OS版本—— cat etc/os-release查看pretty name(Centos7以上和Ubuntu可用)
redhat系列通用命令:cat /etc/redhat-release
3.3.3 关机与重启
关机:
- halt
- poweroff
重启:reboot
- -f:强制重启(不调用shutdown)
- -p:切断电源
关机或重启:shutdown
shutdown [OPTION]... [TIME] [MESSAGE]
选项:-r=reboot -h=halt -c=cancel
TIME:无指定默认相当于+1min now: 立刻,相当于+0
+#:相对时间,表示多少min之后
hh:mm 表示绝对时间,在指定时间点生效
3.3.4 文本编辑 nano
nano
nano + 文件直接进入编辑,如:
nano .bashrc
只能修改文本文件txt,不能用于二进制
3.3.5 会话管理 session
命令行的典型使用方式是,打开一个终端窗口,在里面输入命令
用户与计算机的这种临时的交互,称为一次"会话"(session)
打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完
为了防止执行中的程序意外中断,会话与窗口可以"解绑":需要使用终端复用器软件
终端复用器 screen
此软件需要自行安装:
[root@centos7 ~]#yum -y install screen
screen命令常见用法:
- 显示所有已经打开的screen会话 screen -ls
- 创建新的screen会话 screen –S [SESSION]
- 加入某个screen会话 screen –x [SESSION](用于远程协助)
- 恢复某screen会话 screen -r [SESSION]
- 剥离当前screen会话 Ctrl+a,d(用于远程协助)
- 退出并关闭screen会话 exit
远程协助步骤:(B需要向A求助)
- B提供目标服务器的IP和账户与密码,A使用shell连接登录
- B新建screen会话——screen –S help(前提screen已经安装好)
- A加入此会话——screen –x help
- 此时两者画面同步,可看到公用窗口,A即可进行协助
- 结束后,A首先应该退出此次会话,使用 Ctrl+a,d进行剥离(先按Ctrl+a再按d)
(若直接关机或者注销,将会同时影响B)
终端复用器 tmux(也需要自行安装)
[root@centos8 ~]#dnf -y install tmux
tmux 窗口有大量的快捷键,所有快捷键都要通过前缀键唤起(默认的前缀键是 Ctrl+b)
先按下Ctrl+b ,快捷键才会生效
新建会话 第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推
为了方便直观,一般会对新建的会话重命名:
tmux new -s <session-name>
一些常用命令:(还要按会话session、窗口windows、窗格panes分类)
一个会话可以有多个窗口,一个窗口可以有多个窗格
- 新建会话 tmux
- 查看当前所有的 Tmux 会话 tmux ls(快捷键Ctrl+b,s)
- 重新接入某个已存在的会话 tmux attach -t <session-name>
- 切换到指定名称的会话 tmux switch -t <session-name>
- 杀死某个会话 tmux kill-session -t <session-name>
- 新建窗口 tmux new-window(快捷键Ctrl+b,c)
- 新建一个指定名称的窗口 tmux new-window -n <window-name>
- 上下分窗格 tmux split-window(ctrl+b,")
- 左右分窗格 tmux split-window -h(ctrl+b,%)
- 窗格之间切换 ctrl+b,再加方向键
- 关闭当前窗格 Ctrl+b ,x
- 当前窗格全屏显示 Ctrl+b, z(再使用一次会变回原来大小)
- 将当前窗格拆分为独立窗口 Ctrl+b, !
- 将当前会话与窗口分离 tmux detach(快捷键Ctrl+b,d)
- 切换到指定名称的窗口 tmux select-window -t <window-name>
- 切换到指定编号的窗口 tmux select-window -t <window-number>
列出所有快捷键及其对应的 Tmux 命令:
tmux list-keys
列出所有 Tmux 命令及其参数:
tmux list-commands
3.3.6 输出信息 echo
echo 命令可以将后面跟的字符进行输出,也能输出变量的值(echo $变量)
输出字符串的命令:
echo [-neE] [字符串]
选项:
-E (默认)不支持 \ 解释功能
-n 不自动换行
-
-e 启用 \ 字符的解释功能
启用命令选项-e,若字符串中出现以下字符,则特别加以处理,
而不会将它当成一般文字输出\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\e escape,相当于\033
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\ 插入\字符
\0nnn 插入nnn(八进制)所代表的ASCII字符
\xHH 插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
3.4 命令类型 type
shell中可执行的两类命令(本质区别在于,内部命令集成在shell中)
- 内部命令:由shell自带的,而且通过某命令形式提供(enable或者help)
- 外部命令:在文件系统路径下有对应的可执行程序文件($PATH或者hash)
区别某个命令属于哪种:type COMMAND
某些命令可能同时属于两者,如echo:
type -a echo
echo is a shell builtin
echo is /usr/bin/echo
因为shell不止一种,上述属于shell的意思是属于bash,其他shell未必有
命令 help 可以列出所有内部命令以及其帮助!!
enable 管理内部命令
- enable cmd 启用内部命令
- enable –n cmd 禁用内部命令(禁用是临时的,重启即失效)
- enable –n 查看所有禁用的内部命令
命令 ls /bin/ 列出此目录下所有文件(即为所有的外部命令)
查看某个外部命令文件路径:
- which cmd
- whereis cmd
执行外部命令过程:系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径缓存到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,若找不到,则无法执行。
[14:11:27root@ubuntu1804~]#echo $PATH #查看PATH路径有哪些
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
常用的外部命令缓存在内存中的Hash缓存表
若路径被移动,则hash缓存信息错误,寻找不到,命令将无法执行
此时应该删除或者清空hash
- hash 显示hash缓存
- hash -d name 清除name缓存
- hash -r 清除缓存
- hash -p path name 将命令全路径path起别名为name
别名alias:对命令进行自定义,达到简化效果
- 显示当前shell进程所有可用的命令别名:alias
- 定义别名NAME,其相当于执行命令VALUE:alias NAME='VALUE'
- 撤消别名:unalias cmd
unalias -a 取消所有别名
注意:在命令行中定义的别名,仅对当前shell进程有效(重启失效)
如果想永久有效,要定义在配置文件中:
方法一:nano .bashrc进入,将alias内容贴入对应位置,保存退出
方法二:直接命令:echo "alias free='free -h'" >> .bashrc
编辑配置之后,新配置不会立即生效,
应让bash进程重新读取配置文件:命令 . .bashrc或者source .bashrc
- 仅对当前用户:~/.bashrc
- 对所有用户有效:/etc/bashrc
若别名与存在的命令冲突,优先级为——别名 > 内部 > 外部hash > 外部$PATH
若存在冲突,又想跳过别名直接执行原命令:反斜、单引、双引、command、全路径
- \ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand
3.5 常用简单快捷键
tab键可以实现命令及路径等补全,提高输入效率,避免出错
3.5.1 Tab命令补全
可用于外部命令和文件名、目录名
bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
注意:用户给定的字符串只有惟一对应的命令则直接补全,否则,再次Tab会给出列表
也可以利用此功能,双击tab查看所有可能的命令
路径补全:把用户给出的字符串当做路径开头,唯一则直接补全,否则再次Tab给出列表
双击功能:
command 2Tab 所有子命令或文件补全
string 2Tab 执行以string开头的命令
/ 2Tab 显示所有根目录下一级目录,包括隐藏目录
./ 2Tab 当前目录下子目录,包括隐藏目录
星号 2Tab 当前目录下子目录,不包括隐藏目录
~ 2Tab 所有用户列表
$ 2Tab 所有变量
@ 2Tab /etc/hosts记录 (centos7不支持)
= 2Tab 相当于ls –A (centos7不支持)
3.5.2 bash的快捷键
Ctrl + L 清屏 = clear
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出
Ctrl + a 光标移到命令行首 = home
Ctrl + e 光标移到命令行尾 = end
Alt + r 删除当前整行
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
......
3.6 字符集和编码
charset是character set的简写,即字符集
encoding是charset encoding的简写,即字符集编码,简称编码
编码:
ASCII码
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,即ASCII码
ASCII 码一共规定了128个字符的编码,占用了一个字节的后面7位,最前面的一位统一规定为0-
Unicode
为了表示世界上所有语言中的所有字符,每一个符号都给予一个独一无二的编码数字
Unicode 仅仅只是一个字符集,规定了每个字符对应的二进制代码,如何存储则没有规定UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,可变长存储
查看当前编码:echo $LANG
3.7 获得帮助 help
获取帮助的能力决定了技术的能力!
获取帮助的渠道:
- whatis
- command --help
- man and info
- /usr/share/doc/
- Red Hat documentation
- 其它网站和搜索
3.7.1 whatis
whatis 使用数据库来显示命令的简短描述
刚安装系统后不可立即使用whatis,需要手动制作数据库才能生效
#CentOS 7 版本以后
mandb
#CentOS 6 版本之前
makewhatis
举例:
[root@centos8 ~]#whatis ls
ls (1) - list directory contents
ls (1p) - list directory contents(1p类型表示开发相关)
3.7.2 查看命令的帮助
内部man,外部 --help
内部命令:
- help CMD
- man bash(查看所有内部命令)
外部命令和软件:
- COMMAND --help 或 COMMAND -h
- 使用手册 man COMMAND
- 信息页 info COMMAND
- 程序自身的帮助文档 README INSTALL ChangeLog
- 程序官方文档 官方站点:Documentation
- 发行版的官方文档
3.7.3 help命令
--help或-h 选项:显示常用的绝大多数用法总结和参数列表
范例:
[root@CentOS8 ~]#date --help
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
格式说明:
[ ] 表示可选项
CAPS或 <> 表示变化的数据???????
... 表示一个列表,即可以跟多个选项
x |y| z 的意思是“ x 或 y 或 z ”
-abc的意思是-a -b –c
{ } 表示分组
1、显示当前时间,格式:2016-06-18 10:20:30
[root@CentOS8 ~]#date 061810202016.30
Sat Jun 18 10:20:30 CST 2016
2、显示前天是星期几
date --help可知:
+%A locale's full weekday name (e.g., Sunday)
+%u day of week (1..7); 1 is Monday
[root@CentOS8 ~]# date -d '-2 day' +%A
Sunday
3、创建一个新文件,命名为昨天的日期
#使用$()和``两种方式都可 #需要注意单引号与反引号区别!!!单引号忽略一切
[root@CENTOS7 data]#touch `date -d '-2 day' +%F`.log
[root@CENTOS7 data]#ls
2020-07-19.log
[root@CENTOS7 data]#touch $(date -d '-1 day' +%F).log
[root@CENTOS7 data]#ls
2020-07-19.log 2020-07-20.log
3.7.4 man命令
man 提供命令帮助的文件,手册页存放在/usr/share/man
man页面分组为不同的“章节”,统称为Linux手册:
命令man # man可选择进入某章
man 5 man #表示直接进入第五章内容
1:用户命令
2:系统调用
3:C库调用
4:设备文件及特殊文件
5:配置文件格式
6:游戏
7:杂项
8:管理类的命令
9:Linux 内核API
在man的详情页面,使用 / 字符可搜索关键字
/KEYWORD 以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索
不区分字符大小写
n: 下一个 N:上一个
man 帮助段落说明:
NAME 名称及简要说明
SYNOPSIS 用法格式说明
[ ] 可选内容
<> 必选内容
a|b 二选一
{ } 分组
... 同一内容可出现多次
DESCRIPTION 详细说明
OPTIONS 选项说明
EXAMPLES 示例
FILES 相关文件
AUTHOR 作者
COPYRIGHT 版本信息
REPORTING BUGS bug信息
SEE ALSO 其它帮助参考
对于某个关键词:
列出与之相关的所有帮助 man -a keyword
搜索与之相关的所有命令 man -k keyword
man命令的配置文件:配置文件定义了帮助文件所在的目录
centos6之前:/etc/man.config
centos7之后:/etc/man_db.conf
范例:
[root@CentOS8 ~]#whatis date
date (1) - print or set the system date and time
date (1p) - write the date and time
#此时即可知道date是第一章的内容(p后缀表示开发相关,ssl后缀表示子命令)
#若有多个章节,可以指明第几章直接进入
man [章节] keyword
登录前提示语:issue,编辑文件 /etc/issue
登录后提示语:motd,编辑文件 /etc/motd或者 /etc/motd.d/file
1、在本机字符终端登录时,除显示原有信息外,再显示当前登录终端号,主机名和当前时间
[root@CENTOS7 ~]#cat /etc/issue
\S
Kernel \r on an \m
#此处显示不是用命令实现,通过man命令查看具体指引,最终找到mingetty相关介绍
ISSUE ESCAPES
mingetty recognizes the following escapes sequences which might be
embedded in the /etc/issue file:
\d insert current day (localtime), #当前日期
\l insert line on which mingetty is running, #登录终端号
\m inserts machine architecture (uname -m), #CPU架构
\n inserts machine’s network node hostname #主机名
\o inserts domain name, #域名
\r inserts operating system release (uname -r) #内核版本
\t insert current time (localtime), #当前时间
\s inserts operating system name #操作系统
#因此进入issue文件修改加入\l,\n,\t即可
2、设置今天22:30自动关机,并提示用户
[root@CENTOS7 ~]#at 10:30 pm Jul 21
at> poweroff
at> <EOT>
job 1 at Tue Jul 21 22:30:00 2020
[root@CENTOS7 ~]#at -l
1 Tue Jul 21 22:30:00 2020 a root
3.7.5 info命令
info适合通用文档参考 没有参数
info CMD
导航info页:
方向键、PgUp、PgDn 导航
Tab键 移动到下一个链接
d 显示主题目录
Home 显示主题首部
Enter进入 选定链接
n/p/u/l 进入下/前/上一层/最后一个链接
s 文字 文本搜索
q 退出 info
3.7.6 Linux系统自带文档
Applications -> documentation->help(centos7)
System->help(centos6)
3.7.7 命令自身提供的官方使用指南
/usr/share/doc目录
多数安装了的软件包的子目录,包括了这些软件的相关原理说明
用 ll 显示列表,用cat查看内容
ll /usr/share/doc/CMD
sz 命令将文件发送到Windows
3.7.8 系统及第三方应用官方文档
- 软件官网:
- 红帽知识库和官方在线文档:
https://help.ubuntu.com/lts/serverguide/index.html