Linux系统介绍:内核、shell及软件包管理

Linux系统主要包括3层, 硬件(RAM、CPU、I/O设备等)、 Linux 内核和 用户进程。
Linux 内核最初由芬兰黑客 Linus Torvalds 开发,Linux内核是Linux操作系统的重要组成部分,是操作系统的核心,是系统硬件和进程之间的接口。内核提供内存管理、进程管理、设备驱动和各种系统调用。

Linux内核版本

Linux各个内核版本可以在https://www.kernel.org/ 上下载,一些社区组织或厂商将Linux内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。Linux有多个发行版本,常见的Linux系统有Centos和Ubuntu。

查看系统版本

1
2
cat /proc/version
uname -a
1
2
3
4
[root@iZ8vb54310gt89j8qct198Z ~]# cat /proc/version
Linux version 4.18.0-147.5.1.el8_1.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)) #1 SMP Wed Feb 5 02:00:39 UTC 2020
[root@iZ8vb54310gt89j8qct198Z ~]# uname -a
Linux iZ8vb54310gt89j8qct198Z 4.18.0-147.5.1.el8_1.x86_64 #1 SMP Wed Feb 5 02:00:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

4.18.0-147.5.1.el8_1.x86_64 :

  • 4:内核主版本号
  • 18:内核次版本号,偶数代表稳定版;奇数代表开发版
  • 0:内核修订版本号,添加安全补丁,bug修复,新功能或驱动程序等
  • 147.5.1:发行版本的补丁版本
  • el8_1:使用的内核是 RedHat / CentOS 系列发行版专用内核
  • x86_64:x86平台64位CPU

查看centos发行版本:

1
2
[root@iZ8vb54310gt89j8qct198Z ~]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core)

shell

常见 shell

Shell 是一种脚本编程语言,连接内核和用户。常见的 Shell 有 sh、bash、ksh、csh等。

  • Bourne Shell (/usr/bin/sh或/bin/sh)
  • Bourne Again Shell (/bin/bash):兼容 sh
  • C Shell (/usr/bin/csh)
  • K Shell (/usr/bin/ksh)
  • Shell for Root (/sbin/sh)

cat /etc/shells 命令查看系统可用shell:

1
2
3
4
5
6
[root@client ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@client ~]#

运行 shell

  1. 使脚本具有执行权限
    1
    2
    chmod +x ./test.sh 
    chmod 777 ./test.sh
  2. 执行脚本
    1
    2
    ./test.sh # 执行脚本
    /bin/sh test.sh

    查看Linux系统信息

    查看系统位数

  3. getconf LONG_BIT
  4. file /bin/ls
1
2
3
4
5
[root@iZ8vb54310gt89j8qct198Z ~]# getconf LONG_BIT
64
[root@iZ8vb54310gt89j8qct198Z ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=937708964f0f7e3673465d7749d6cf6a2601dea2, stripped, too many notes (256)
[root@iZ8vb54310gt89j8qct198Z ~]#

查看内存信息

Linux 查看内存支持的最大内存容量

1
2
$ dmidecode|grep -P 'Maximum\s+Capacity'
Maximum Capacity: 8 GB

查看槽位上内存的速率,没插就是unknown。

1
dmidecode|grep -A16 "Memory Device"|grep 'Speed'

png

查看内存条厂家

1
dmidecode -t memory | grep Manufacturer

png

查看内存信息(显示插槽个数和每个插槽里内存条的大小)

1
2
$ dmidecode -t memory | grep Size
Size: 8192 MB

查看内存使用情况:

1
2
3
4
$free -h
total used free shared buff/cache available
Mem: 1.8G 1.4G 173M 764K 251M 268M
Swap: 2.0G 1.0G 1.0G

查看CPU信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# CPU型号
$ cat /proc/cpuinfo | grep name | sort | uniq
model name : Intel Xeon Processor (Skylake, IBRS)

# 物理CPU个数
$ cat /proc/cpuinfo | grep "physical id"
physical id : 0
physical id : 1
physical id : 2
physical id : 3
physical id : 4
physical id : 5
physical id : 6
physical id : 7

# 每个物理CPU核数
$ cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores : 1

# 逻辑CPU个数
$ cat /proc/cpuinfo| grep "processor"| wc -l
8

服务管理

CentOS 7之后使用Systemd管理守护进程,使用systemctl命令。

可使用systemctl --help 查看使用方法,比如查看所有已启动的服务

1
$ systemctl list-units --type=service 

Linux软件包管理

Linux软件安装可以直接通过源码编译安装,一般源码包都打包成tar.gz压缩格式。源码包安装比较麻烦,容易出错,也可以使用包管理来软件包的管理,包管理工具是对软件工具的安装、卸载及其他管理, 常见的两类软件包管理工具是RPM 和 DPKG,RPM是Red Hat软件包管理器,DPKG的是Debian的Linux系列基本的包管理系统。

源码编译安装

源码编译安装步骤:

  1. 下载安装文件
  2. 解压
    1
    tar -xvzf xxx.tar.gz
  3. 检查编译
    进入解压文件内
    1
    ./configure
    检查通过后,将生成用于编译的MakeFile文件。
  4. 编译
    1
    make
  5. 安装
    1
    make install

安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。

1
2
make clean
make distclean

如果要卸载,则执行
1
make uninstall

RPM

RPM 全称为 Redhat Package Manager,最早由 Red Hat 公司制定实施,rpm包文件通常以.rpm结尾。

RPM包安装

下载rpm包后安装:
安装 RPM 包

1
rpm -ivh package.rpm

升级 RPM 包

1
rpm -Uvh package.rpm

卸载 RPM 包

1
rpm -ev package

rpm命令其它用法

查看是否安装了某个软件:

1
2
[root@Client ~]# rpm -qa | grep wireshark
wireshark-1.10.14-25.el7.x86_64

查询某个命令属于哪个软件:

1
2
3
4
[root@Client ~]# which scp
/usr/bin/scp
[root@Client ~]# rpm -qf /usr/bin/scp
openssh-clients-7.4p1-21.el7.x86_64

yum

rpm无法解决软件包与软件包之间的依赖问题,可以使用yum工具进行在线安装,yum(Yellowdog update Modifier)是RPM前端工具,操作对象为rpm包。由于网络问题,可以设置yum国内镜像源,也可以配置本地源。下面介绍yum安装方法:
搜索可用软件包:

1
yum search all 软件关键字

搜索已安装的软件:
1
yum list installed | grep 软件关键字

安装

1
2
yum install package-name
yum -y install package-name #接受所有互动问答

卸载
1
2
yum remove package-name
yum -y remove package-name

DPKG

DPKG全称为 Debian Package,功能与 RPM 相似,包文件通常以 .deb 扩展名结尾。Ubuntu系统使用此包管理工具。

DPKG 命令安装

安装 DEB 包

1
dpkg -i package.deb

升级 DEB 包
1
dpkg -i package.deb ( 和安装命令相同)

卸载 DEB 包
1
2
dpkg -r package.deb # 不卸载配置文件
dpkg -P package.deb # 卸载配置文件

apt

apt 全称 Advanced Packaging Tools,DPKG 前端工具, apt 的主要包管理工具为apt-get,实现功能和yum类似。

搜索可用软件包

1
apt-cache search 软件关键字

安装
1
apt-get install package-name

下载指定软件的源文件
1
apt-get source package-name

更新
1
2
3
apt-get upgrade # 更新软件
apt-get update # 更新软件列表
apt-get dist-upgrade # 更新所有软件

卸载
1
2

apt-get remove package-name

查看历史命令history

在Linux命令窗口可以查看执行过的历史命令,可以通过上/下方向键(或者Ctrl+ p / Ctrl+ n)显示相对于当前命令的上一条或下一条历史记录。或者通过Ctrl+ r 来搜索历史命令。

还有一种更为直观的方法是使用history命令,可以显示多个记录,默认情况下,历史命令存放在 ~/.bash_history 文件里面,也可以在/etc/bashrc中设置历史命令存放路径,添加:export HISTFILE=存放路径

history命令格式如下:

1
history [-c] [-d offset] [n]

  • -c:清空历史命令
  • -d offset:删除历史命令中第offset个命令
  • n:显示最近的n条历史命令

显示最近的5个命令:

1
2
3
4
5
6
7
[root@server ~]# history 5
996 cat /etc/bashrc
997 vim /etc/bashrc
998 history --help
999 echo $HISTSIZE
1000 history 5
[root@server ~]#

Linux 文件句柄

由于UNIX/Linux系统中的资源都是以文件的形式存在的,可以限制用户进程可使用的系统资源数量,比如一个进程可以打开的文件数,用户可以创建多大的文件,以及进程可以使用多少内存。如果Linux在进行大量并发操作的时候,可能会报 “Too many open files” 错误,这是因为并发操作的文件数超过了限制,可以使用ulimit命令查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7144
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7144
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

open files 的最大限制为1024,可以使用ulimit命令进行修改:

1
ulimit –n 10000

这个命令不能保证永久生效,系统重启后会恢复原来的默认值。为了让ulimit在重启过程中持续存在,需要修改配置文件/etc/security/limits.conf
1
2
3
4
5
6
7
8
9
10
#<domain>      <type>  <item>         <value>
#

#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4

type可以设置为soft和hard:

  • soft:软件限制,用于警告
  • hard:硬件限制,设置实际的默认值

item选项包括:

  • core :core文件大小 (KB)
  • data :最大的数据大小 (KB)
  • fsize :最大文件大小 (KB)
  • memlock :最大锁定内存空间 (KB)
  • nofile :打开文件的最大数量
  • rss :最大Resident Set大小 (KB)
  • stack :堆栈大小 (KB)
  • cpu :最大CPU time (MIN)
  • nproc :最大进程数
  • as :最大地址空间 (KB)
  • maxlogins :此用户的最大登录数
  • maxsyslogins :系统的最大登录数
  • priority :运行用户进程的优先级
  • locks :用户最大文件锁定数
  • sigpending :最大被挂起/阻塞 (pending) 的信号数
  • msgqueue :POSIX消息队列使用的最大内存 (bytes)
  • nice :最大允许的 nice 优先级: [-20, 19]
  • rtprio :最大realtime优先级

打开文件的最大数量设置方法如下:

编辑配置文件 /etc/security/limits.conf 加入如下配置:

1
2
* soft nofile 10000
* hard nofile 10000

或者:

1
* - nofile 2000

保存退出。

--THE END--

本文标题:Linux系统介绍:内核、shell及软件包管理

文章作者:hiyo

文章链接:https://hiyongz.github.io/posts/linux-kernel-and-shell-introduce/

许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。

关注微信公众号,及时接收最新技术文章!