一. 用户类型
1. root用户
一个特殊的管理账号
也被称为超级用户
root拥有完整的系统控制权限
对系统损害几乎有无限的能力
1.1 普通(非特权)用户
权限有限
造成损害的能力比较有限
1.2 查看当前终端设备 tty
tty 查看当前所在终端
[root@CentOS8 ~]$tty
/dev/pts/1
1.3 bash shell
显示当前使用的shell
echo ${SHELL}
[root@CentOS8 ~]$echo ${SHELL}
/bin/bash
显示当前系统使用的所有shell
cat /etc/shells
[root@CentOS8 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/tmux
/bin/tmux
1.4 设置主机名
临时生效
临时生效
hostname 主机名称
永久生效
Ubuntu 18.04.4和CentOS 8,CentOS7都有效
hostnamectl set-hostname 主机名
CentOS 6
主机名配置文件位置vim /etc/sysconfig/network
注意:
- 主机名称不支持使用下划线,但是支持横线,可以使用字母,横线或数字组合
- 有些软件对主机名有特殊要求
命令提示符 prompt
默认提示符
# 管理员
$ 普通用户
显示提示符格式
[root@centos8 ~]#echo $PS1 \[\e[1;35m\][\u@\h \W]\$\[\e[0m\]
修改提示符格式范例
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
PS1="\[\e[37;1m\][\[\e[31;1m\]\u\[\e[34;1m\]@\[\e[32;1m\]\h \[\e[31;1m\]\w \[\e[33;1m\]\t\[\e[37;1m\]]\[\e[32;1m\]\\$\[\e[m\]"
提示符格式说明:
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数
# 开机后命令历史数
永久修改保存提示符格式相关变量PS1
重定向到 > /etc/profile.d/env.sh
echo 'PS1="\[\e[37;1m\][\[\e[31;1m\]\u\[\e[34;1m\]@\[\e[32;1m\]\h \[\e[31;1m\]\w \[\e[33;1m\]\t\[\e[37;1m\]]\[\e[32;1m\]\\$\[\e[m\]"' > /etc/profile.d/env.sh
然后退出exit重登生效
1.5 init 切换系统运行等级
查看系统进程命令:ps -ef | head 查看init的配置文件:more /etc/inittab 查看系统当前运行的级别:runlevel
运行级别
什么是运行级? 运行级就是操作系统当前正在运行的功能级别。这个级别从0到6,具有不同的功能。可以在/etc/inittab中查看它的英文介绍。
0 关机
1 单用户模式
2 多用户, 没有, NFS(和级别3相似,会停止部分服务)
3 切换到多用户-命令模式
4 没用
5 切换到图形化界面
6 重启
1.6 执行命令
执行命令的过程
输入命令后回车后,shell程序找到输入命令所对应的可执行程序,或代码,并由其分析后提供给内核分配资源运行起来。
shell 中可执行的两种命令
- 内部命令: 自带shell,而且通过某命令形式提供
- 外部命令: 在文件系统路径下有对应的可执行文件
区别指定的命令是内部命令或外部命令
type 查看文件类型
type 命令
查看是否存在对应内部和外部命令
[root@C8 ~ 19:52:27]$type -a echo -a 搜索外部命令和他同名的内部命令
echo is a shell builtin 内部
echo is /usr/bin/echo 外部
由于内部命令优先,所以外部不会生效
内部命令相关
help 内部命令列表
enable 管理内部命令
- enable 启用内部命令
- enable -n 命令 禁用内部命令
- enable -n 查看所有禁用的内部命令
执行外部命令
搜索外部命令
显示外部命令的搜索路径
which 要搜索的命令
显示外部路径的文件路径,还能显示出外部命令帮助文档的路径
whereis
hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell 解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存可以大大提高命令的调用速度
hash 命令常见用法
- hash 显示hash缓存
- hash -l 显示hash缓存,可作为输入使用
- hash -p path name 将命令全路径path起别名为name
- hash -t name 打印缓存中name的路径
- hash -d name 清除name缓存
- hash -r 清除
1.7 定义别名
对于经常执行的较长的命令,可以将其定义成较短的别名,方便执行
显示当前shell 进程所有可用的命令别名
alias
定义别名NAME,其相当于执行命令VALUE
alias 别名名称 ="命令"
unalias 取消别名
unalias
unalias -a 取消所有别名
生效在别名后面加个.
. .bashrc 点后面跟上定义的别名文件
注意:在命令行中定义别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中
- 及对当前用户: ~/.bashrc
- 对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立生效,bash 进程重新读取配置文件
vim bashrc
重新读取配置文件
source /path/to/config_file
. /path/to/config_file
如果别名同原命令同名,如果要执行原命令.可使用
\ALIASNAME \表示屏蔽或取消了,别名功能。当成普通命令
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/commmand #只适用于外部命令
command 调用并执行指定命令
COMMAND [选项...] [参数...]
选项:用于启用或关闭命令的某个或某些功能
- 短选项:UNIX 风格选项,-c 例如:-l, -h
- 长选项:GNU风格选项,–word 例如:–all, --human
- BSD风格选项: 一个字母,例如:a,使用相对较少
参数:命令的作用对象,比如:文件名,用户名等
注意:
- 多个选项以及多个参数和命令之间使用空白字符分隔
- 取和结束命令执行: Ctrl+c ,Ctrl+d
- 多个命令可以用 “;” 符号分开
- 一个命令可以用\分成多行
1.8 常见命令
lscup 查看cpu信息
cat /proc/cpuinfo也可以查看到
free 查看内存大小
lsblk查看磁盘和分区情况
[root@C8 ~ 14:48:53]$lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sr0 11:0 1 7G 0 rom
uname 查看内核版本
[root@centos8 ~]#uname -r
4.18.0-147.el8.x86_64
[root@centos7 ~]#uname -r
3.10.0-1062.el7.x86_64
[root@centos6 ~]# uname -r
2.6.32-754.el6.x86_64
[root@ubuntu1804 ~]#uname -r
4.15.0-29-generic
查看操作系统发行版本
Cents8
红帽系列的可以用这个来看
cat /etc/redhat-release
Ubuntu 查看发行版本
cat /etc/os-release
date日期和时间
Linux 的两种时钟
- 系统时钟:由Linux 内核通过CPU的工作频率进行的
- 硬件时钟:主板
date 显示和设置系统时间
date +%s
date -d @1509536033
clock , hwclock :显示硬件时钟
-s, --hctosys 以硬件时钟为准,校正系统时钟
-w, --systohc 以系统时钟为准,校正硬件时钟
时区存放位置
/etc/localtime
修改时区
列出现有时区列表
timedatectl list-timezones
修改时区
timedatectl set-timezone Asia/Shanghai
要修改的时区
显示日历
cal -y
显示指定时间段、
cal 9 2020
9月 2020年
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)
history 命令行历史
保存你输入的命令历史。可以用它来重复执行命令
登录shell时,会读取命令历史文件中记录下的命令~/.bash_history
登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中
命令:history
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg
- -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 .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "
[root@centos8 ~]#history
1 2019-12-13 08:39:05 ls /data
2 2019-12-13 08:39:05 date
3 2019-12-13 08:39:05 vie0
4 2019-12-13 08:39:05 nano .bash_profile
5 2019-12-13 08:39:05 exit
调用命令行历史
#重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
按 !! 并回车执行
输入 !-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 !^ 利用上一个命令的第一个参数做cmd的参数
command !$ 利用上一个命令的最后一个参数做cmd的参数
command !* 利用上一个命令的全部参数做cmd的参数
command !:n 利用上一个命令的第n个参数做cmd的参数
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 开头的命令,并获取它的所有参数
1.9 关机重启
关机:
- halt
- poweroff
重启:
reboot
-f 强制,不调用shutdown
-p:切断电源
shutdown 约定时间关机或重启
shutdown [OPTION]... [TIME] [MESSAGE]
shotdown +10 十分钟后关机
shotdown 02:20 2点20分钟后关机
shutdown -c 取消
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7)
now: 立刻,相当于+0 如果时0就立刻开机
+#: 相对时间表示法,几分钟之后;例如 +3 加号后跟个时间表示多少分钟后关机
hh:mm: 绝对时间表示,指明具体时间 指定几点几分要关机
1.10 用户登陆信息查看命令
whoami
whoami :显示当前登录有效用户
who
who : 系统当前所有的登录会话
w
w :系统当前所有的登陆·会话及所做的操作
1.11 screen 会话管理
screen命令就是,当打开一个screen会话框其中启动的进程是连在一起的,打开窗口,会话开始,关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完 。一个经典的例子就是,SSH登录远程计算机,打开一个远程窗口执行命令,这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令,因为上一次SSH会话已经终止了,里面的进程也随之消失了,为了解决这个问题,会话与窗口可以"解绑" :窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口
终端复用器软件就是会话与窗口的"解绑"工具 , 将他们彻底分离。
- 它允许在单个窗口中,同时访问多个会话,这对于同时运行多个命令行程序很有用。
- 它可以让新窗口"接入"已经存在的会话
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话
- 它还支持窗口任意的垂直和水平拆分.类似于终端复用器还有Screen ,Tmux
screen
利用screen 可以实现会话管理如:新建会话,共享会话等
注意 : CentOS 7 来自于base源, CentOS8 来自于epel源
范例:安装 screen
Centos7 安装screen
CentOS 8 安装screen
dnf -y epel-release
dnf -y install screen
screen 命令常见用法:
-
创建新screen会话
screen -S 用户名 -
加入screen会话
screen -x 用户名 -
退出并关闭screen会话
exit -
剥离当前screen会话
Ctrl+a,d -
显示所有已经打开的screen会话
screen-ls -
恢复某screen会话
screen -r 用户名显示所有已经打开的screen 并连接erha
连接成功屏幕同步
tmux
1.12 文本编辑
- nano 工具可以实现文本编辑,上手容易
- gedit 工具是图形工具
1.13 命令行扩展和被括起来的集合
命令行扩展:$ ()
$(CMD) 或 'CMD'
括号扩展:{}
{} 可以实现打印重复字符串的简化形式
echo file{1,3,5} 结果为:file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
cho {a..z}
echo {000..20..2}
1.14 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 + #提示输入指定字符后,重复显示该字符#次
注意:Alt组合快捷键经常和其它软件冲突