Linux的使用和常用命令,主要是在 CentOS 8 上试验
快捷键
1 | #历史命令翻找 |
部分基础命令
linux是大小写敏感,千万要注意
linux特殊文件名可以使用\
进行转义,
如果是有 -
的文件如-a test
,操作可以使用 rm -- '-a test'
1 | init 0 关机 |
常用工具
lrzsz tree screen tmux strace
1 | bc # 计算器, ctrl+d 退出 |
1 | ping www.baidu.com 测试网络是否连接, ctrl+c 停止 |
1 | ctrl alt F1 图形 |
1 | yum -y install name # 下载name |
1 | hostname 完整主机名 |
1 | free -h 查看内存 ,-h的作用是把内存以合适的单位显示,而不全是字节 |
1 | runlevel # 查看运行级别 |
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
1 | history 查看输入过命令 |
1 | whoami # 查看自己身份 |
1 | ps 显示系统当前的进程 |
多个命令可以用 “;” 符号分开,如:ls;who
一个命令可以用 \ 分成多行,如:
1 | [root@yanglinqi ~]# ls \ |
远程连接
推荐软件,Xmanager Power Suite,这是一套软件,包含xShell等
字符界面
1 | hostname -I 查看ip地址 |
使用图像化工具
1 | # 第一步,运行Xmanager Power Suite 的 Xmanager.exe |
查看硬件信息
1 | # 查看cpu信息 |
日期和时间
Linux的两种时钟
- 系统时钟:由Linux内核通过CPU的工作频率进行的
- 硬件时钟:主板
相关命令
date 显示和设置系统时间
1
2
3
4
5
6date # 显示系统时间
date -s '1 year' # 修改时间至1年后
date +%s # 1643271071 # 以秒显示时间,以1970.1.1 00:00:00开始经过的秒数,1970年为Unix元年
date +%F # 2022-01-27
date +%T # 16:14:59
date -d @1643271071 # 显示从起始时间计算1643271071秒后的时间 # 2022年 01月 27日 星期四 16:11:11 CSTclock , hwclock 显示硬件时间
1
2
3
4
5
6-s , --hctosys # 以硬件时钟为准,校正系统时钟
-w , --systohc # 以系统时钟为准,校正硬件时钟
# clock 和 hwclock 是同一个命令
[root@yanglinqi ~]# ll /usr/sbin/clock
lrwxrwxrwx. 1 root root 7 7月 21 2021 /usr/sbin/clock -> hwclock
时区:
1 | CST # 东八区,北京时间 |
显示日历:
1 | cal # 显示当月 |
关机和重启
关机:
halt
poweroff
重启:
reboot
-f
:强制,不调用shutdown
-p
:切断电源
关机或重启:shutdown
1 | shutdown [OPTION]... [TIME] [MESSAGE] |
设置主机名
1 | #临时生效 |
提示符
显示提示符格式:
1
2echo $PS1
# [\u@\h \W]\$修改提示符格式范例:
1
2
3
4
5
6
7
8
9PS1='\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]'
PS1='\[\e[1;41;33m\][\u@\h \W]\\$\[\e[0m\]'
PS1='\[\e[41;33m\][\u@\h \W]\\$\[\e[0m\]'
PS1='\[\e[33m\][\u@\h \W]\\$\[\e[0m\]'
PS1='\[\e[35m\][\u@\h \W]\\$\[\e[0m\]'
# 31-37字体颜色,41-47背景颜色
# \$ 是 $ \\$ 是 #
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"提示符格式说明:
- \e 控制符\033
- \u 当前用户
- \h 主机名简称
- \H 主机名
- \w 当前工作目录
- \W 当前工作目录基名
- \t 24小时时间格式
- \T 12小时时间格式
- ! 命令历史数
- # 开机后命令历史数
在CentOS系统实现持久化保存命令提示符
1
2
3echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
. /etc/profile.d/env.sh # 执行sh脚本
命令分类
- 内部命令:由shell自带,而且通过某种命令形式提供
man builtin
- 外部命令:在文件系统路径下有对应的可执行程序文件
命令执行过程
- 在内部命令中找
- 外部命令
- hash表中查找
- hash表中没有命令信息,继续
- hash有命令信息,但命令的磁盘路径人为改变,报错
- $PATH 中的路径中查找
- hash表中查找
1 | ll /bin/bash -h # 集成在bash文件中的命令为内部命令 |
hash命令常见用法
hash
显示hash缓存hash -l
显示hash缓存,可作为输入使用hash -p path name
将命令全路径path起别名为namehash -t name
打印缓存中name的路径hash -d name
清楚name缓存hash -r
清除缓存
命令别名
alias
alias name='value'
定义别名unalias name
取消别名unalias -a
取消所有别名
永久有效,要定义在配置文件中
- 对当前用户永久有效: ~/.bashrc
- 对所有用户永久有效:/etc/bashrc
如果别名同原命令同名,要执行原命令,使用
\aliasname
"aliasname"
'aliasname'
command aliasname
/path/command # 只适用于外部命令
1 | # 例如,要执行下面三条命令,很长,设为别名scandisk,三条命令的作用:查看新添加的硬盘 |
命令格式
1 | COMMAND [OPTIONS...] [ARGUMENTS...] |
选项:用于启用或关闭命令的某个或某些功能
- 短选项:UNIX风格选项, -c 例如: -l, -h
- 长选项:GNU风格选项,—word 例如: —all, —human
- BSD风格选项:一个字母,例如:a,使用相对较少
参数:命令的作用对象,比如:文件名,用户名等
范例:
1 | [root@CentOS8 ~]#id -u yang |
文本编辑器
- nano 实现文本的编辑,上手容易,适合初学者
- gedit 图形化界面编辑器
- vi 命令较多
会话管理
命令行的典型使用方式是,打开个终端窗口( terminal window,以下简称”窗口”),在里面输入命令。用户与计算机的这种临时的交互,称为一次”会话”( session)
会话的个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完
一个典型的例子就是,SSH登录远程计算机,打开个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次SSH会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以”解绑”:窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话”绑定”其他窗口
终端复用器软件就是会话与窗口的”解绑”工具,将它们彻底分离。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用
(2)它可以让新窗口”接入”已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分
类似的终端复用器还有 Screen,Tmux
screen
1 | # 安装 screen |
screen命令常见用法:
创建新screen会话
screen -S [SESSION]
加入screen会话
screen -x [SESSION]
退出并关闭screen会话
exit
剥离当前screen会话
Ctrl+a,d
显示所有已经打开的screen会话
screen -ls
恢复某screen会话
screen -r [SESSION]
Tmux
是一个终端复用器 (terminal multiplexer),类似 screen,但是更易用,也更强大
Tmux就是会话与窗口的”解绑”工具,将它们彻底分离,功能如下
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口接入”已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分
安装
1 | yum install tmux |
启动与退出
1 | tmux |
Tmux窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是ctrl+b,即先按下ctrl+b,快捷键才会生效。帮助命令的快捷键是ctrl+b ?
然后,按下q键,就可以退出帮助
新建会话
第一个启动的Tmux窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是0号会话、1号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定名称的会话。
1 | tmux new -s <session-name> |
tmux Is 或 Ctrl+b,s可以查看当前所有的Tmux会话
1 | tmux ls |
分离会话
在Tmux窗口中,按下Ctrl+b d或者输入 tmux detach命令,就会将当前会话与窗口分离
1 | tmux detach |
接入会话
tmux attach 命令用于重新接入某个已存在的会话。
1 | tmux attach -t <session-name> |
范例:
1 | tmux attach -t 0 |
杀死会话
tmux kill-session 命令用于杀死某个会话
1 | x kill-session -t <session-name> |
切换会话
tmux switch 命令用于切换会话
1 | tmux switch -t <session-name> |
可以将窗口分成多个窗格(pane),每个窗格运行不同的命令
上下分窗格
1 | tmux split-window |
左右分窗格
1 | tmux split-window -h |
窗格快捷键
1 | ctr1+b % 划分左右两个商格 |
列出所有Tmux命令及其参数
1 | tmux list-commands |
输出信息 echo
echo基本用法
echo命令可以将后面跟的字符进行输出
功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号
语法:
1 | echo [-neE][字符串] |
选项:
- -E(默认)不支持 \ 解释功能
- -n 不自动换行
- -e 启用 \ 字符的解释功能
显示变量
1 | echo "$VAR_NAME” # 用变量值换,弱引用 |
启用命令选项 -e,若字符串中出现以下字符,则特別加以处理,而不会将它当成一般文字输出
- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\033
- \n 换行且光标移至行首
- \r 回车,即光标移至行首,但不换行
- \t 插入tab
- \\ \ 插入 \ 字符
- \0nnn 插入nnn (八进制)所代表的ASCII字符
- \xHH 插入HH(十六进制)所代表的ASCII字符(man 7 ascii)
echo高级用法
在终端中,ANSI 定义了用于屏幕显示的 Escape.屏幕控制码
具有颜色的字符,其格式如下:
1 | "033[字符背景色;字体色m字符串\033[0m" |
\033[30m … \033[37m 设置前景色
\033[40m … \033[47m 设置背景色
1 | # 字符背景色苑围:40-47 |
加颜色只是以下控制码中的一种,下面是常见的一些 ANSI 控制码
1 | \033[0m 关闭所有属性 |
范例:显示文件的十六进制编码
1 | [root@yanglinqi ~]# cat > myfile |
字符集和编码
许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差別的。字符集与字符集编码是两个不同层面的概念。
charset是 character set的简写,即字符集,即二进制和字符的对应关系,不关注最终的存储形式
encoding是 charset encoding的简写,即字符集编码,简称编码,实现如何将字符转化为实际的二进制进行存储或相反,编码决定了空间的使用的大小
UTF-8是目前互联网上使用最广泛的一种 Unicode编码方式,可变长存储。使用1-4个字节表示一个字符,根据字符的不同变换长度,编码规则如下:
对于单个字节的字符,第一位设为0,后面的7位对应这个字符的 Unicode码。因此,对于英文中的0-127号字符,与ASCI码完全相同。这意味着ASC码的文档可用UTF-8编码打开
对于需要使用N个字节来表示的字符(N>1),第一个字节的前N位都设为1,第N+1位设为0,剩余的N-1个字节的前两位都设为10,剩下的二进制位则使用这个字符的 Unicode码来填充
Unicode – The World Standard for Text and Emoji
http://www.chi2ko.com/tool/CJK.htm
https://javawind.net/tools/native2ascii.jsp?action=transform
http://tool.oschina.net/encode
http://web.chacuo.net/charsetescape
Unicode和UTF-8
Unicode符号范围(十六进制) | UTF-8編码方式二进制) |
---|---|
0000 0000-0000 007F | 0xxxxxxx |
0000 0080-0000 07FF | 110xxxxx 10xxxxxx |
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx10xxxxxx |
范例: Unicode转换为UTF-8
汉”的 Unicode码 0x6C49 (110 110001 001001),需要三个字节存储,格式カ:1110xxxx 10xxxxxx 10xxxxxx,从后向前依次填充对应格式中的x,多出的x用0补,得出UTF-8编码为11100110 10110001 10001001
“马”的 Unicode码 0x9A6C (1001 101001 101100),需要三个字节存储,格式为:1110xxxx 10xxxxxx 10xxxxxx,从后向前依次填充对应格式中的x,多出的x用0补,得出UTF-8编码为11101001 10101001 10101100
范例:修改LANG变量来实现中文语言提示
1 | echo $LANG # 查看语言 |
命令行及括号扩展
` ` 和 $()
把一个命令的输出打印给另一个命令的参数,放在``中的一定是有输出信息的命令
1 | $(COMMAND) 或 `COMMAND` |
范例:比较 “ “,’ ‘,``三者区别
1 | [root@yanglinqi ~]# echo "echo $HOSTNAME" |
1 | date +%F # 显示今天日期 2022-01-28 |
括号扩展:{}
{}可以实现打印重复字符串的简化形式
1 | {元素1,元素2,元素3} |
范例:
1 | echo file{1,3,5} # 结果为:file1 file2 file3 |
范例:
1 | [root@yanglinqi ~]# echo {000..20..2} |
范例:关闭和启用{}的扩展功能
1 | [root@yanglinqi ~]# echo $- |
tab键补全
tab键可以实现命令及路径等补全,提高输入效率避免出错
命令补全
- 内部命令
- 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
- 命令的子命令补全,需要安装
bash-completion
注意:用户给定的字符串只有一条唯一对应的命令,直接补全,否则,再次tab会给出列表
范例:
1 | [root@yanglinqi ~]# nmcli connection 2TAB |
路径补全
把用户给出的字符串当做路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名
如果唯一:则直接补全
否则:再次Tab给出列表
双击Tab键
1 | command 2TAB 所有子命令或文件补全 |
命令行历史 history
当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_ history
登录shell时,会读取命令历史文件中记录下的命令加载到内存中
登录进shel后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史文件中
利用命今历史。可以用它来重复执行命令,提高输入效率
命令: history
1 | history [-c] [-d offset] [n] |
常用选项:
1 | -c 清空命令历史 |
命令历史相关环境变量
1 | HISTSIZE 命令历史记录的条数 |
持久保存变量
以上变量可以 export 变量名="值"
形式存放在 /etc/profile
或 ~./bash_profile
调用命令行历史
1 | # 重复前一个命令方法 |
bash的快捷键
1 | Ctrl+l 清屏,相当于c1ear命令 |
注意:Alt组合快捷键经常和其它软件冲突
例:xShell 会话的属性 =》终端 =》键盘 =》将和Alt有关的选项全部勾上
获取帮助
多层次的帮助
- whatis
- command —help
- man and info
- /usr/share/doc/
- Red Hat documentation、Ubuntu documentation
- 软件项目网站
- 其他网站
- 搜索
whatis
whatis 使用数据库来显示命令的简短描述
此工具在系统刚安装后,不可立即使用,需要制作数据库后才可使用
执行下面命令生成数据库
1 | # CentOS 7 版本以后 |
范例:
1 | [root@CentOS8 ~]# whatis cal |
查看命令的帮助
内部命令帮助
help COMMAND
man bash
外部命令帮助
COMMAND --help
或COMMAND -h
- 使用man手册( manual):
man COMMAND
- 信息页:
info COMMAND
- 程序自身的帮助文档: README、 INSTALL、 ChangeLog
- 程序官方文档
- 相关网站,如:技术论坛
- 搜索引擎
外部命令的 —help 或 -h 选项
显示用法总结和参数列表,大多数命令使用,但并非所有的
格式说明:
1 | [] 表示可选项 |
用 whatis
确定章节,再用 man
查看想要知道的某部分的详细介绍
范例:
1 | [root@CentOS8 ~]# whatis passwd |
man命令
man提供命令帮助的文件,手册页存放在 /usr/share/man
几乎每个命令都有man的页面
中文man需安装包
- man-pages
- man-pages-zh-CN
man页面分组
不同类型的帮助称为不同的章节,统称为Linux手册,man 1 man
- 1 可执行程序或 shell 命令
2 系统调用(内核提供的函数)
3 库调用(程序库中的函数)
4 特殊文件(通常位于 /dev)
5 文件格式和规范,如 /etc/passwd
6 游戏
7 杂项(包括宏包和规范,如 man(7),groff(7))
8 系统管理命令(通常只针对 root 用户)
9 Linux内核API
man命令的配置文件:
1 | # CentOS 6 之前 man 的配置文件 |
格式:
1 | MANPATH /PATH/TO/SOMEWHERE #指明man文件搜索位置 |
也可以指定位置下搜索 COMMAND命令的手册页并显示
1 | man -M /PATH/TO/SOMEWHERE COMMAND |
查看man手册页
1 | man [OPTION...] [SECTION] PAGE... |
man帮助段落说明
1 | NAME 名称及简要说明 |
man 命令的操作方法:使用 less 命令实现
1 | space,^v,^f,^F 向文件尾翻屏 |
常用选项
列出所有帮助
1
man -a keyword
搜索man手册
1
2# 列出所有匹配的页面,使用 whatis 数据库
man -k keyword # 相当于 whatis打印 man 帮助文件路径
1
man -w [章节] keyword
info
man常用于命令参考,GNU工具info适合通用文档参考
没有参数,列出所有的页面
info 页面的结构就像一个网站
每一页分为“节点”
链接节点之前*
info命令格式
1 | info [命令] |
导航info页
- 方向键,Pgup,PgDn 导航
- Tab键 移动到下一个链接
- d 显示主题目录
- Home 显示主题首部
- Enter 进入选定链接
- n/p/u/l 进入下/前/上一层/最后一个 链接
- 5 文字 文本搜索
- q 退出 info
命令自身提供的官方使用指南
/usr/share/doc
目录
多数安装了的软件包的子目录,包括了这些软件的相关原理说明
常见文档:README INSTALL CHANGES
不适合其它地方的文档的位置
配置文件范例
HTML/PDF/PS 格式的文档
授权书详情
系统及第三方应用官方文档
通过在线文档获取帮助
https://www.kernel.org/doc/html/latest/
https://kubernetes.io/docs/home/