1.1)终端类型
who显示当前系统上已登录的用户信息。
[ 会列出登录系统的用户以及他们的登录终端、登录时间和来源等信息]
who
PTS/1是一个伪终端设备名称,用于表示用户登录的虚拟终端。
在远程登录工具(如 伪终端设备。
TTY1表示物理终端设备名称,通常用于表示计算机上的本地控制台终端。
这是指连接到计算机本身的物理屏幕和键盘,允许用户直接在计算机上进行操作,而不是通过远程登录。
1. 查看当前所在终端
[ 可识别 当前终端类型 ]
tty
pts/1 # 虚拟终端
tty
tty1 # 物理终端
w 命令 与 who 命令的区别
w命令适合查看有关用户活动和系统资源的详细信息。
who 命令则更适合查看简要的登录信息。
w
1.2)Bash Shell
Bash 是CentOS Ubuntu 默认使用。
Shell 提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
1. 显示 当前使用的
echo $SHELL
2. 显示当前系统使用的 所有 SHELL
cat /etc/shells
3. 修改主机名
[ 所谓的 临时修改其实就是将修改数据写入在内存因此重启后就失效了... ]
[ 所谓的永久修改其实就是将修改数据写入在硬盘 即使重启也不会失效... ]
`临时` 生效 [ 重启即失效 ]
hostname NAME
`持久` 生效
[ 仅支持 CentOS7 和 Ubuntu18.04 以上版本]
"立即生效" [ 会自行将主机名信息写入至 /etc/hostname ]
hostnamectl set-hostname blog.wuhanjiayou.cn
"验证" 自行修改后的配置文件
cat /etc/hostname
[ 当然也可以直接修改 /etc/hostname ]
"但这个非立即生效, 需重启系统生效" `因此, 建议 CentOS7 以上版本使用hostnamectl`
vim /etc/hostname
注意:
[ 主机名不要瞎配置 可能会导致某些服务起不来 ]
主机名不支持使用下划线,但支持横线,可使用字母,横线或数字组合。
有些软件对主机名有特殊要求
1.3)命令提示符 Prompt
登录默认的系统命令提示符毫无没有个性,无法明显辨别生产和测试环境,而导致误操作。
可以通过修改PS1变量实现个性的提示符格式,避免这种低级错误。
[ CentOS 默认提示符 ]
[root@blog ~]#
1. 输出命令提示符 格式
echo $PS1
2. 修改提示符格式 范例
[ CentOS 7 Bash ]
配置
PS1="\[\e[1;41;33m\][\u@\h \W]\\$\[\e[0m\]"
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\\[\e[0m\]\\$ "
[ CentOS 7 Tcsh ]
set _green="%{\033[38;5;120m%}"
set _cyan="%{\033[38;5;123m%}"
set _white="%{\033[0m%}"
set prompt="${_green}%n@%m${_white}:${_cyan}%~${_white}%# "
3. 提示符格式说明
\e 控制符\033
\u 当前用户
\h 主机名简称
\H 主机名
\w 当前工作目录
\W 当前工作目录基名
\t 24小时时间格式
\T 12小时时间格式
! 命令历史数
#开机后命令历史数
4. 永久生效配置
[ /etc `全局`配置 ]
vim /etc/profile.d/Prompt.sh
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\\[\e[0m\]\\$ "
su - wangj
可以发现我们的 WangJ 普通用户 Prompt 命令提示符也被修改...
[ ~/.bashrc `用户`配置 ]
vim ~/.bashrc
PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\\[\e[0m\]\\$ "
source ~/.bashrc
1.4)执行命令
输入命令后回车,提请 Shell 程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来。
1. 查看 Bash `文件大小`
[17:32:14 root@www ~]# ll -h /bin/bash
-rwxr-xr-x. 1 root root 942K Apr 1 2020 /bin/bash
2. Shell 中可执行的 `两类命令`
内部命令:由而且通过某命令形式提供,用户登录后自动加载并常驻内存中。
外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除。
3. 查看系统中 所有内部命令
enable
区别指定的命令是内部命令或外部命令
[ Shell Builtin内部命令
type hostname
1. 内部命令 与 外部命令 的区别
[ 1. 内部命令 都集成在 /bin/bash中
[ 2. 而外部命令 是一个独立的文件 ]
2. 外部命令是如何执行的
[ 为何输入 pwd他即会执行/usr/bin/pwd ]
3. echo $PATH
$PATH是一个环境变量,用于指定系统在哪些目录中搜索可执行文件。
这些目录中存放着一些常用的命令,使得用户可以在终端中直接输入命令名称而不需要提供完整的路径。
[17:43:46 root@www ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[ 重点!! ]
因此我们想让某个bin 文件输入其xxx即可自动执行
即需要将该 写入到的搜索范围当中
[ 举例 生产环境 ]
echo $PATH
which verdi
1.5)Hash缓存表
系统终端 初始当外部命令执行时,默认会从,找到后会将这条命令的路径记录到hash 表 中。
当再次使用该命令时,Shell 解释器会首先查看 hash 表,存在将执行,如不存在,将会去利用。
hash
hash 命令常见用法
hash 显示 hash 缓存
hash -l 显示 hash 缓存,可作为输入使用
hash -p path name 将命令全路径path起别名为name
hash -t name 打印缓存中 name 的路径
hash -d name 清除 name 缓存
hash -r清除缓存
总结:`命令的执行过程`
Alias别名
内部 命令Shell Builtin
Hash 缓存表
外部命令$PATH 路径
command not found
1.6)命令 别名
对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行
[ 显示当前 Shell 进程所有可用的命令别名 ]
alias
示例
[ 设置别名
# 注意:
# 先验证 sethost `是否已经是系统命令`
sethost
# 设置别名
alias sethost='hostnamectl set-hostname'
# 使用别名配置主机名
sethost blog.wuhanjiayou.cn
1.6.1)示例 2 [ 省略 ]
[ 扫描新加的磁盘 ]
echo '- - -' > /sys/class/scsi_host/host0/scan
echo '- - -' > /sys/class/scsi_host/host1/scan
echo '- - -' > /sys/class/scsi_host/host2/scan
[ 1. 虚拟机 新增硬盘 ]
[ 2. 使用 lsblk无法查看到新增硬盘 ]
[ 3. 执行 扫描硬盘命令
echo '- - -' > /sys/class/scsi_host/host0/scan
echo '- - -' > /sys/class/scsi_host/host1/scan
echo '- - -' > /sys/class/scsi_host/host2/scan
# 再次查看
lsblk
1.6.2)持久保存别名
1. `用户`配置:~/.bashrc
2. `全局`配置:/etc/bashrc
# 生效配置文件
source ~/.bashrc
1.6.3)使用 Type命令
[ 我们可以通过 type命令 轻松得知命令类别 "1.内部命令 2.外部命令 3.别名" ]
[ Linux 命令执行优先级 ]
alias别名
内部 命令 /bin/bash
Hash 缓存表
外部 命令 $PATH 路径
命令没找到 Command not Found
type sethost
which sethost
1.7)命令格式
命令
COMMAND
选项
短格式UNIX 风格例如 -h
长格式GNU 风格例如 --help
BSD 格式一个字母例如 a
参数
命令的作用对象比如:文件名
# 命令 -选项 参数
COMMAND [OPTIONS...] [ARGUMENTS...]
# 例如
ll -a
ll -h .bashrc
小扩展:
多个选项以及多参数和命令之间使用空白字符 分隔
取消和结束命令执行:Ctrl + C,Ctrl + D
多个命令可以用 ";" 符号分开
一个命令可以用\ 分成多行这个脚本中编写的多
1.8)常用命令
1.8.1)查看
lscpu
1.8.2)查看内存大小
free
free -h
1.8.3)查看硬盘和分区情况
lsblk
lsblk -f
1.8.4)查看系统版本信息
# 系统架构
arch
# 内核版本
uname -r
# 操作系统发行版本
cat /etc/redhat-release
/etc/os-release 用于存储关于操作系统发行版的信息。
它通常包含一些与操作系统版本、名称、ID、版本号等有关的元数据。
cat /etc/os-release
1.8.5)日期与时间
[ Linux 的两种时钟 ]
系统时钟:由
硬件时钟:主板
# 系统时间
date
# 硬件时间
clock
示范
clock -s 以硬件时钟为准 "校正系统时钟"
clock -w 以系统时钟为准 "校正硬件时钟"
实战
# 将系统时间设置为 19:30
date -s 19:30
# 将当前的系统时间写入硬件时钟
clock -w
# 验证硬件时钟
clock
时区
timedatectl list-timezones | grep -i shangh
timedatectl set-timezone Asia/Shanghai
timedatectl status
用于系统时区设置 的符号链接。
它的目标路径是../usr/share/zoneinfo/Asia/Hong_Kong,意味着系统的时区被设置为亚洲/香港。
ll /etc/localtime
1.8.6)关机与重启
# 关机
init 0
poweroff
# 重启
reboot
1.8.7)用户登录信息查看命令
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
1.8.8)motd 登录界面
rz motd
mv motd /etc
参考链接:
https://www.bootschool.net/ascii-art
https://www.bootschool.net/chinese-to-ascii
vim /etc/motd
1.8.9)会话管理[ 省略 ]
命令行的典型使用方式是,打开一个终端(Terminal,以下简称"终端")在里面输入命令。
用户与计算机的这种临时交互,称为一次 "会话"(Session)
会话的一个重要特点是:终端与其中启动的进程是连在一起的。
打开终端,会话开始;关闭终端,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个 远程终端执行命令。
这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。
因为上一次了,里面的进程也随之消失了。
为了解决这个问题,会话与终端可以窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话
终端复用器软件就是会话与终端的 "解绑" 工具,将它们彻底分离。
(1)它允许在单个终端中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新终端 "接入"已经存在的会话。
(3)它允许每个会话有多个连接终端,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有Screen,Tmux
Screen
yum install screen -y
# 运行
screnn
# 执行命令
ping baidu.com
2. Tmux
yum install -y tmux
# 运行
tmux
1.8.10)Echo
在终端中,ANSI 定义了用于屏幕显示的其格式如下:
#
"\033[字符背景颜色;字体颜色m字符串\033[0m"
#
echo -e "\E[1;31mwangjun\E[0m"
echo -e "\E[1;32mwangjun\E[0m"
echo -e "\E[1;33mwangjun\E[0m"
echo -e "\E[1;34mwangjun\E[0m"
echo -e "\E[1;35mwangjun\E[0m"
echo -e "\E[1;36mwangjun\E[0m"
echo -e "\E[1;37mwangjun\E[0m"
俄罗斯方块
2.1)命令补全
[ Tab 键 可以实现命令及路径等补全,提高输入效率,避免出错
命令的子命令补全,需要安装 bash-completion
[ tab 键补全,如果系统是最小安装需要安装相应包 ]
yum install -y bash-completion
exit
// 验证
yum provides
2.2)命令行历史
当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history
登录会读取命令历史文件中记录下的命令加载到内存中
[ 命令历史相关环境变量 ]
HISTSIZE: 命令历史记录的条数
HISTFIL: 指定历史文件,默认为 ~/.bash_history
HISTFILESIZE: 命令历史文件记录历史的条数
HISTTIMEFORMAT="%F %T `whoami` " 显示时间和用户
HISTIGNORE="str1:str2*:…" 忽略 str1 命令,str2开头的历史
HISTCONTROL: 控制命令历史的记录方式
ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
[ 持久保存变量 ]
vim ~/.bash_profile
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T `whoami` "
source ~/.bash_profile
2.3)获取帮助
获取帮助的能力决定了技术的能力!!
多层次的帮助
whatis
command --help
man and info
/usr/share/doc/
Red Hat documentation 、Ubuntu documentation
软件项目网站
其它网站
搜索
[ whatis 使用数据库来 显示命令的简短描述 ]
此工具在系统刚安装后,不可立即使用,需要制作数据库后才可使用
执行下面命令生成数据库:
# 生成数据库
mandb # CentOS 7
makewhatis # CentOS 6
# 示范
whatis rm
[ 内部命令查看帮助
type echo
help echo
[ 外部命令查看帮助 ]
type hostnamectl
hostnamectl --help
2.3.1)查看 date 命令帮助 案例
date --h
date +%T
# 输出两天前的时间信息
date -d '-2 day'
# 输出一天前的时间信息 [ 并格式化 %F ]
date -d '-1 day' +%F
# 创建 ·昨天日期· 的日志文件
touch `date -d '-1 day' +%F`.log
man date
whereis date
[ man 章节信息 ]
whatis passwd
# 演示
# 使用 man 命令查看 passwd man 手册章节 5 信息
man 5 passwd
2.3.2)官方文档
http://www.github.com
https://www.kernel.org/doc/html/latest/
http://httpd.apache.org
http://www.nginx.org
https://mariadb.com/kb/en
https://dev.mysql.com/doc/
http://tomcat.apache.org
https://jenkins.io/zh/doc/
https://kubernetes.io/docs/home/
https://docs.openstack.org/train/
http://www.python.org
http://php.net