Linux——CentOS
简介
提到Linux不得不先提一个人——Richard M. Stallman,自由软件之父,1984年创建GUN组织,开放的组织使用通用版权许可证协议保护GUN。至此有了GUN/Linux。
而Linux其实是指系统的内核,Linux之父是Torvalds。
CentOS是Linux的发行版之一,全称为Community ENTerprise Operating System。其他发行版还包括Ubuntu、SUSE、Debian、ORACLE等。
CentOS与RHEL基本相同,不过RHEL是红帽公司的企业版。
Shell是什么
1️⃣Shell的英文解释是壳,其实shell是一种命令解释器,将用户的指令翻译成系统可以识别的指令,来调用内核(kernel),内核是操作系统最核心的部分。
Shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行
shell可以保护内核也可以方便用户的使用。Shell分为图形界面Shell(Graphical User Interface shell,即GUI shell)和命令行式Shell(Command Line Interface shell,即CLI shell),平时我们使用的Windows系统就是典型的图形界面Shell。
2️⃣Shell的分类有很多,比如Bourne Shell (sh)、Korn Shell (ksh)、Bourne Again (bash)、POSIX Shell (psh)等等。这些shell的难易程度和可编辑行也不一样,而在CentOS中我们主要使用的Shell就是BASH Shell
cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
这里的sh并不是上文所指的Bourne Shell,这里的sh是bash的软连接。
ll /bin/sh
lrwxrwxrwx 1 root root 4 Apr 27 22:16 /bin/sh -> bash
3️⃣命令是什么?
命令:整条shell命令的主题
选项:会影响会微调命令的作用 通常是’-’,’–’,表示缩写和长选项
参数:命令作用的对象
Shell中的快捷键
Ctrl在终端中显示^
stty -a 查看所有快捷键
快捷键 | 功能 |
---|---|
Ctrl+C | 是发送SIGINT信号,终止一个进程。 |
Ctrl+Z | 是发送SIGSTOP信号,挂起一个进程,可以通过fg重启前台被中断的任务,bg把终端的任务放到后台执行 |
Ctrl+D | 代表输入完成或注销 |
Ctrl+A | 终端命令的最前端 |
Ctrl+E | 终端命令的最后端 |
Ctrl+K | 删除光标后所有字符 |
Ctrl+U | 删除光标前所有字符 |
Ctrl+R | 利用关键字,搜索历史命令,必须是连续的关键字 |
Alt+. | 引用上一个命令的最后一个参数,等价于!$ 按住Alt再按. |
ESC . | 引用上一个命令的最后一个参数,等价于!$ 按下ESC松开后按. |
tab | 补全命令、目录、文件名等 |
最小化安装系统tab是不可以补全命令的参数
可以安装bash-completion包来实现补全
yum install -y bash-completion
强大的帮助命令手册
在Linux系统中第一个学习的命令就应该是man,它可以帮组我们了解命令和配置文件的构成和作用。
man手册是以压缩格式来存放的,通常有章节的区分。
序号 | man手册类型 |
---|---|
1 | 用户命令 |
2 | 内核系统调用(从用户空间到内核的进入点) |
3 | 库函数 |
4 | 特殊文件或设备 |
5 | 文件格式和规范 |
6 | 游戏 |
7 | 规范、标准和其他页面 |
8 | 系统管理命令 |
9 | Linux、内核API(内核调用) |
man | 用来提供在线帮助,可以查看命令帮助、配置文件帮助、编程帮助等信息 |
---|---|
-a | 一个手册一个手册的去翻命令。如passwd一个是命令一个是文件,可以同时找 |
-f | 相当于whatis。显示命令的解释。 [root@wzp ~]# man -f ls ls (1) - list directory contents [root@wzp ~]# whatis ls ls (1) - list directory contents |
-w | 打印将要格式化或显示的文件的位置。就是命令在man的那个目录下 |
-M | 定义查找man手册页的目录。如果没有指定此参数,系统环境变量,默认/etc/man,config |
man命令支持上下翻,使用'/'加上想要搜索的东西进行搜索。q退出
搜索EXAMPLES可是查看示例 即/EXAMPLES
升级或安装新版man
yum install -y man-pages
安装中文版man(汉化过来的不是百分百准确和全汉化)
[root@node1 data]# yum list | grep man.*zh
man-pages-zh-CN.noarch 1.5.2-4.el7 @osrepo
[root@node1 data]# yum install -y man-pages-zh-CN.noarch
[root@node1 data]# vi /etc/locale.conf
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN.UTF-8:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.UTF-8:zh_CN:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
[root@node1 data]# source /etc/locale.conf
修改主机名和默认字符集为中文
<临时修改主机名,CentOS6和CentOS7通用>
hostname xxx
<Centos7修改主机名>
vim /etc/hostname
xxx
或者
hostnamectl set-hostname xxx
<CentOS6修改主机名>
vim /etc/sysconfig/network
HOSTNAME=xxx
首先要明确为什么要修改字符?
系统在设置了区域字符集,如果字符集不兼容会导致出现乱码。
所以避免出现中文乱码,可能需要我们手动修改字符集。
CentOS6修改默认字符集
vim /etc/sysconfig/i18n
LANG=“zh_CN.GB18030”
SUPPORTED=“zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en”
SYSFONT=“latarcyrheb-sun16”
CentOS7修改默认字符集
localectl set -locale zh_CN.UTF-8
或者
vim /etc/locale.conf
LANG=en_US.UTF-8
系统版本的查看方法
查看版本的命令:
uname | 打印一组系统信息 |
---|---|
-s 或 --kernel-name | 打印内核的名字 |
-n 或 --nodename | 打印主机名 |
-r 或 --kernel-release | 打印内核发行号 |
-v 或 --kernel-version | 打印内核版本信息 |
-m 或 --machine | 打印机器架构,如x86_64 |
-o 或 --operating-system | 打印操作系统类型,如GNU/Linux |
lsb_release | 用来显示LSB和特定版本的相关信息 |
---|---|
-v 或 --version | 显示命令的版本信息 |
-i 或 --id | 显示发行版ID,如Distributor ID: CentOS |
-r 或 --release | 显示当前系统具体对版本号 |
-a 或 --all | 显示上面所有的信息 |
实际上还可以通过文件来查看版本信息
cat /proc/version
Linux version 3.10.0-1062.12.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Feb 4 23:02:59 UTC 2020
<在系统启动时的启动条显示的版本信息就是来源于此文件>
cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
系统分区的优先级
优先级从高到低
/
/boot
swap
/home
/data
注意:有些时候我们甚至只需要/分区和/boot分区。如分布式存储一类的应用建议是关闭swap分区的
系统CPU的信息
#查看CPU信息
lscpu 等同于查看/etc/cpuinfo
cat /etc/cpuinfo
#统计CPU个数
nproc
#查看CPU型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
#查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
#查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
#查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
#查看内存信息
cat /proc/meminfo
系统运行级别
最小化安装后安装图形化界面
yum groupinstall -y "Server with GUI "
#修改默认的启动模式为图形
systemctl set-default graphical.target
系统运行级别 | 描述 |
---|---|
CentOS6运行级别用init表示,CentOS7用target表示 | |
CentOS6中init x表示临时切换到某运行级别中 | |
CentOS7中systemctl isolate x.target表示临时切换到某运行级别中 | |
0 或 poweroff.target | 关机模式,系统默认运行级别不能设置为0,否则不能正常启动 |
1 或 rescue.target | 单用户模式,root权限,用于系统维护,禁止远程登录,就像Windows下的安全模式 |
2 或 multi-user.target | 多用户模式,没有 NFS 网络支持,CentOS7中默认等同于3 |
3 或 multi-user.target | 完整的多用户文本模式,有 NFS,登录后进入控制台命令模式 |
4 或 multi-user.target | 系统未使用,保留 |
5 或 graphical.target | 图形化模式,登陆后进入图形 GUI 模式,X11 |
6 或 reboot.target | 重启,系统默认运行级别不能设置为0,否则不能正常启动 |
管理机制
CentOS 6 的服务管理机制是 systemv,采用 service 命令来管理所有的服务。
systemv使用/etc/inittab管理,运行级别采用runlevels。
CentOS7的服务管理机制是systemd,采用systemctl命令来管理所有的服务。
systemd使用“targets”而不是runlevels。系统运行级别的配置文件在/usr/lib/systemd/system/中,对应了不同运行级别的文件
- 在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
- 在/etc/rc.d目录下有7个名为rcN.d的目录,对应系统的7个运行级别
[root@wzp ~]# ll /etc/rc.d/
total 36
drwxr-xr-x. 2 root root 4096 Jun 24 15:33 init.d
drwxr-xr-x. 2 root root 4096 Jun 23 19:05 rc0.d
drwxr-xr-x. 2 root root 4096 Jun 23 19:05 rc1.d
drwxr-xr-x. 2 root root 4096 Jun 23 19:05 rc2.d
drwxr-xr-x. 2 root root 4096 Jun 23 19:05 rc3.d
drwxr-xr-x. 2 root root 4096 Jun 23 19:05 rc4.d
drwxr-xr-x. 2 root root 4096 Jun 23 19:05 rc5.d
drwxr-xr-x. 2 root root 4096 Jun 23 19:05 rc6.d
-rw-r–r-- 1 root root 473 Mar 18 07:46 rc.local
- rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
[root@wzp ~]# ll /etc/rc.d/rc3.d/
total 0
lrwxrwxrwx. 1 root root 20 Apr 27 21:54 K50netconsole -> …/init.d/netconsole
lrwxrwxrwx. 1 root root 17 Apr 27 22:06 K90network -> …/init.d/network
lrwxrwxrwx 1 root root 19 Jun 23 19:05 S12hostguard -> …/init.d/hostguard
lrwxrwxrwx 1 root root 28 Apr 27 22:28 S20cloudResetPwdAgent -> …/init.d/cloudResetPwdAgent
lrwxrwxrwx 1 root root 34 Apr 27 22:28 S20cloudResetPwdUpdateAgent -> …/init.d/cloudResetPwdUpdateAgent
lrwxrwxrwx 1 root root 24 Apr 27 22:28 S50multi-queue-hw -> …/init.d/multi-queue-hw
- 系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
对于以K开头的文件,系统将终止对应的服务
对于以S开头的文件,系统将启动对应的服务
-
默认允许级别centos6存放在/etc/inittab中
-
CentOS7的默认存放逻辑是通过defalut.target链接到对应的运行级别上
[root@wzp ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37 Apr 27 22:06 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
历史命令的说明
history | 历史命令 |
---|---|
n | 列出最近的n条命令,什么也不加表示列出全部 |
-c | 清空本次shell历史命令,对保存在文件中的没有影响 |
-d | 清楚指定行的命令数据 |
-a | 将历史命令缓冲区写入历史命令文件 |
-r | 读入历史命令文件写入缓冲区 |
-w | 将当前历史命令缓冲区命令写入历史命令文件 |
!+字母 | 终端中直接输入!+字母表示调出最近使用一次以此字符开头的命令 |
!! | 表示上次操作的命令 |
!数字 | 表示调出历史记录中的第几次并且执行 |
ctrl +r | 搜索历史命令,可以输入对应的关键字搜索,回车表示执行 |
~/.bash_history 记录的是前一次登录以前所执行过的命令。~指的是用户家目录
至于本次登录的命令暂时存储在内存中,注销成功后会写入文件中。
history -w 可以提前将命令缓存写入文件中
历史命令显示执行时间
<临时生效>
export HISTTIMEFORMAT='%F %T'
或者
export HISTTIMEFORMAT='%Y%m%d-%H%M%S'
或者
export HISTTIMEFORMAT='%Y%m%d %T'
<永久生效,仅针对root用户>
vim /root/.bashrc或/root/.bash_profile
添加HISTTIMEFORMAT='%F %T'
source /root/.bashrc或/root/.bash_profile
<永久生效,针对所有用户>
vim /etc/bashrc
source /root/.bashrc或/root/.bash_profile
历史命令缓存数量
历史命令默认缓存1000个
cat /etc/profile | grep HISTSIZE
HISTSIZE=1000
修改历史命令缓存数量
<临时生效>
export HISTSIZE=500
<永久生效>
vim /etc/bashrc
HISTSIZE=500
source /root/.bashrc