目录
1、Linux基础
1.1、用户类型
- root 用户(管理员用户、对系统拥有接近完整的控制)
- 普通用户(权限有限)
1.2、终端 terminal
1.2.1、终端类型
- 控制台终端(/dev/console)
- 串行终端(/dev/ttyS#)
- 虚拟终端(/dev/tty)
- 图形终端
- 伪终端(/dev/pts 即SSH远程连接的终端)
1.2.2、查看当前的终端设备
tty命令可以查看当前所在的终端:
1.3、交互式接口
1.3.1、交互式接口类型
交互式接口:启动终端后,在终端设备附加一个交互式应用程序
- GUI(图形化接口)
- CLI(shell程序,命令交互接口)
1.3.2、什么是shell
shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用输入的命令并送入到内核去执行。
shell也被称为Linux的命令解释器,它本身也是一个程序,将用户输入的命令行拆解为“命令名”与“参数”,接着,根据命令名找到对应要执行的程序,对被执行的程序进行初始化,然后将刚才解析出来的参数传给该程序并执行。
shell是一种高级程序设计语言,提供了变量、函数、条件判断,循环开发语言功能。
1.3.3、各种shell类型
- sh
- bash Centos和Ubuntu默认使用
- csh C语言风格
- tcsh
- ksh AIX默认使用
- zsh MacOS默认使用
1.3.4、bash shell
bash shell是GUN计划中重要的工具软件之一,也是目前Linux标准的shell,与sh兼容。
显示当前的使用的shell类型:
显示当前系统支持的所有shell:
1.4、设置主机名
临时生效:
hostname NAME
持久生效:
hostnamectl set-hostname NAME
注意:
- 有些主机名不支持使用下划线,但支持使用横线,可使用字母、横线或数字组合;
- 有些软件对主机名有特殊要求。
1.5、命令提示符prompt
登录Linux后,默认的系统命令提示符毫无个性,无法明显辨别生产环境和测试环境,而导致错误操作,可以通过修改PS1变量实现个性化的提示符,避免出现这种低级错误。
显示提示符格式:
提示符格式说明:
- \e 控制符\033
- \u 当前用户
- \h 主机名简称
- \H 主机名
- \w 当前工作目录
- \W 当前工作目录的基名
- \t 24小时时间格式
- \T 12小时时间格式
- ! 命令历史数
- # 开机后命令历史数
范例:在Centos系统中实现提示符持久格式保持
1.6、执行命令
1.6.1、执行命令的过程
输入命令后回车,提交给shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来。
1.6.2、shell中可执行的两类命令
- 内部命令:由shell自带的,而且通过某命令形式提供,用户登录后自动加载并常驻内存中。
- 外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除。
区别指定的命令是内部命令还是外部命令:builtin表示内部,-a选项输出命令所有类型
1.6.2.1、内部命令相关
help 可以查看内部命令的帮助:
enable 用于管理内部命令:
范例:
1.6.2.2、执行外部命令
查看外部命令的路径:
hash缓存表:系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行,不存在就从PATH路径中找,利用hash缓存表机制可以大大提高命令的调用速率。
hash命令常见用法:
1.6.3、命令起别名
显示当前shell进程所有可用的命令别名:
定义别名NAME相当于执行命令VALUE:
alias NAME='VALUE'
范例:扫描新加的磁盘
alias scandisk='echo - - - > /sys/class/scsi_host/host0/scan;\
echo - - - > /sys/class/scsi_host/host1/scan;\
echo - - - > /sys/class/scsi_host/host2/scan'
撤销别名:unalias,-a选项撤销所有别名
alias NAME
注意:
在命令行中定义的别名,仅对当前shell进程生效,如果想要持久生效,要定义在配置文件中。
- 仅对当前用户生效:~/.bashrc
- 对所有用户有效:/etc/bashrc
编辑给出的新配置不会立即生效,使用如下方法使bash进程重新读取配置文件:
- source 配置文件
- . 配置文件
如果别名与原命令同名,如果要执行原命令,可使用:
- \ALIASNAME
- "ALIASNAME"
- 'ALIASNAME'
- /path/cmd
1.6.4、命令格式
命令一般后接选项和参数
- 选项:用于启动或关闭命令的某些功能
- 参数:命令的作用对象,比如:文件名,用户名等
注意:
- 多个选项以及多个参数和命令之间使用空白字符分隔
- 取消和结束命令的执行:ctrl + c ,ctrl + d
- 多个命令可以使用“;”符号隔开
- 一个命令可以用 \ 分成多行
1.7、常见命令
1.7.1、查看硬件信息
1.7.1.1、查看cpu信息
- lscpu 命令可以查看cpu信息
- cat /proc/cpuinfo 也可以查看到cpu信息
1.7.1.2、查看内存大小
- free 命令可以查看内存大小,选项-h可以人性化显示内存大小
- cat /proc/meminfo 也可以查看内存大小
1.7.1.3、查看硬盘和分区情况
- lsblk 命令(新加的磁盘使用前面所讲的scandisk别名扫描后,可用该命令查看)
- cat /proc/partitions
1.7.2、查看系统版本信息
查看系统架构
查看内核版本
查看操作系统的发行版本
- cat /etc/redhat-release
- cat /etc/os-release
- lsb_release -a
1.7.3、日期和时间
Linux的两种时钟:
- 系统时钟:由Linux内核通过CPU的工作频率进行的
- 硬件时钟:主板
相关命令:
data 显示和设置系统时间
范例:
clock 显示硬件时钟
常用选项:
- -s 以硬件时钟为准,校正系统时钟
- -w 以系统时钟为准,校正硬件时钟
1.7.4、关机和重启
关机:
- poweroff
- shutdowd -h
- halt
重启:
- reboot
- shutdown -r
1.7.5、查看用户登录信息的命令
- whoami 显示当前登录的有效用户
- who 系统当前所有的登录会话
- w 系统当前所有的登录会话及其所做的动作
1.7.6、文本编辑
- vi 或 vim 强大文本编辑工具,后面的章节会详讲
- nano 适合初学者(不常用)
- gedit 图形工具(不常用)
1.7.7、会话管理
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session)。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
终端复用器软件就是会话与窗口的"解绑"工具,将它们彻底分离。
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口"接入"已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有Screen,Tmux
1.7.7.1、screen
利用screen可以实现会话管理,如:新建会话,共享会话等
范例:安装screen
centos7安装screen
yum -y install screen
centos8安装screen
dnf -y install epel-release
dnf -y install screen
screen命令常见用法:
- 创建新的screen会话
screen -S [SESSION]
- 加入screen会话
screen -x [SESSION]
- 退出并关闭screen会话
exit
- 剥离当前screen会话
ctrl + a,d
- 显示所有已经打开的screen会话
screen -ls
- 恢复某screen会话
screen -r [SESSION]
1.7.7.2、tmux
Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下:
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口"接入"已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分
具体使用方法可以自行在互联网查找
1.7.8、输出信息echo
1.7.8.1、echo基本用法
echo 命令可以将后面跟的字符进行输出。
功能:显示字符,echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
常用选项:
- -E (默认)不支持\解释功能
- -e 启用\字符的解释功能
- -n 不自动换行
显示变量:双引号(强引用,变量值会提换),单引号(弱引用,变量值不会替换)
启用命令选项-e,若字符串中出现以下字符,则特别加以处理:
- \a 发出警告声
- \b 退格键
- \c 最后不加上换行符号
- \e escape,相当于\033
- \n 换行且光标移至行首
- \r 回车,即光标移至行首,但不换行
- \t 插入tab
- \\ 插入\字符
- \0nnn 插入nnn(八进制)所代表的ASCII字符
- \xHH 插入HH(十六进制)所代表的ASCII字符
1.7.8.2、echo的高级用法
在终端中,ANSI定义了用于屏幕显示的Escape屏幕控制码
具有颜色的字符,其格式如下:
"\033[字符背景颜色;字体颜色m字符串\033[0m"
字符背景颜色范围:40-47
字体颜色范围:30-37
加颜色只是以下控制码中的一种,下面是常见的一些ANSI控制码:
- \033[0m 关闭所有属性
- \033[1m 设置高亮度
- \033[4m 下划线
- \033[5m 闪烁
- \033[7m 反显
- \033[8m 消隐
- \033[nA 光标上移n行
- \033[nB 光标下移n行
- \033[nC 光标右移n列
- \033[nD 光标左移n列
- \033[x;yH 设置光标位置x行y列
- \033[2J 清屏
- \033[K 清除从光标到行尾的内容
- \033[s 保存光标位置
- \033[u 恢复光标位置
- \033[?25l 隐藏光标
- \033[?25h 显示光标
- \033[2J\033[0;0H 清屏且将光标置顶
范例:
1.8、字符集和编码
许多场合下,字符集与编码这两个概念常被混为一谈,但两者是有差别的。字符集与字符集编码是两个不同层面的概念。
charset是character set的简写,即字符集,即二进制和字符的对应关系,不关注最终的存储形式。
encoding是charset encoding的简写,即字符集编码,简称编码,实现如何将字符转化为实际的二进制进行存储或相反,编码决定了空间的使用的大小。
1.8.1、ASCII码
ASCII码:计算机内部,所有信息最终都是一个二进制值。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定即为ASCII码。
范例:查看ascii表
yum -y install man-pages
man ascii
1.8.2、Unicode
由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,即ASCII编码,但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
为了表示世界上所有语言中的所有字符。每一个符号都给予一个独一无二的编码数字,Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。Unicode 仅仅只是一个字符集,规定了每个字符对应的二进制代码,至于这个二进制代码如何存储则没有规定。
Unicode编码方案:
- UTF-8:变长,1到4个字节
- UTF-16:变长,2或4个字节
- UTF-32:固定长度,4个字节
UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,可变长存储。使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。编码规则如下:
- 对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码。因此,对于英文中的 0- 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码的文档可用 UTF-8 编码打开。
- 对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码来填充。
范例:修改LANG变量实现中文语言提示
1.9、命令行扩展和被括起来的集合
1.9.1、命令行扩展:``和$()
把一个命令的输出打印给另一个命令作为参数,放在``中的一定是有输出信息的命令
范例:``等价于$(),区别在于$()可以嵌套,反之``不可以
1.9.2、花括号扩展{}
{} 可以实现打印重复字符串的简化形式
范例:
范例:关闭和启用{}扩展功能
1.10、命令行历史
当执行命令后,系统默认会在内存记录执行过的命令;
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.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
调用命令行历史:
- !n 执行history命令输出对应序号n的命令
- !-n 执行history命令输出对应的倒数序号n的命令
- !$ 调用前一个命令的最后一个参数
- !* 调用前一个命令的所有参数
1.11、bash快捷键
- ctrl + l 清屏,相当于clear
- ctrl + s 阻止屏幕输出,锁定屏幕
- ctrl + q 允许屏幕输出,解锁屏幕
- ctrl + c 终止命令和程序
- ctrl + a 光标移至命令行首
- ctrl + e 光标移至命令行尾
- ctrl + u 删除光标所在处前的所有内容
- ctrl + k 删除光标所在处后的所有内容
- alt + r 删除整行
2、获得帮助
2.1、whatis
whatis 使用数据库来显示命令的简短描述
此工具在系统刚安装后,不可立即使用,需要制作数据库后才可使用
执行下面命令生成数据库:
mandb
范例:
2.2、查看命令帮助
2.2.1、内部命令的帮助
使用help命令查看
2.2.2、外部命令的帮助
- COMMAND --help 或 COMMAND -h
- 使用 man 手册(manual): man COMMAND
- 信息页:info COMMAND
- 程序自身的帮助文档:README、INSTALL、ChangeLog
- 程序官方文档
- 相关网站,如:技术论坛
- 搜索引擎
2.3、man命令
man 提供命令帮助的文件,手册页存放在/usr/share/man
几乎每个命令都有man的“页面”
中文man需安装包
- man-pages
- man-pages-zh-CN
man页面分组:
不同类型的帮助称为不同的“章节”,统称为Linux手册,man 1 man
- 1:用户命令
- 2:系统调用
- 3:C库调用
- 4:设备文件及特殊文件
- 5:配置文件格式
- 6:游戏
- 7:杂项
- 8:管理类的命令
- 9:Linux 内核API
2.4、命令自身提供的官方使用指南
路径:/usr/share/doc
多数安装了的软件包的子目录,包括了这些软件的相关原理说明
常见文档:README INSTALL CHANGES