Linux系统知识

149 阅读15分钟

一、Linux目录结构

树状目录结构:

img

以下是对这些目录的解释:

  • /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
  • /root: 该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv: 该目录存放一些服务启动之后需要提取的数据。

  • /sys

    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

    该文件系统是内核设备树的一个直观反映。

    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin: 系统用户使用的应用程序。

  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src: 内核源代码默认的放置目录。

  • /var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

二、磁盘分区和挂载

Linux的分区是为了和整个文件系统相互匹配的,可以使用挂载的方式把一个分区和一个目录联系起来。

image-20220212154548978

1、硬盘

Linux硬盘分为IDE硬盘和SCSI硬盘(常用)。

IDE硬盘,驱动器标识符位hdx~,hd表示分区所在设备的类型,也就是IDE硬盘,a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,主分区或扩展分区,从5开始就是逻辑分区。

例:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。

对于SCSI硬盘则标识为sdx~,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样

可以通过lsblk或者lsblk -f来查看设备的挂载情况。

image-20220212155015945

2、挂载的案例

第一步:虚拟机添加硬盘

在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)!

image-20220212163818131

第二步:分区

分区命令:fdisk/dev/sdb 开始对/sdb分区:

  • m:显示命令列表
  • p:显示磁盘分区同fdisk –l
  • n:新增分区
  • d:删除分区
  • w:写入并退出
  • 说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。

image-20220212165720948

第三步:格式化磁盘

分区命令:mkfs -t ext4 /dev/sdb1其中ext4是分区类型

第四步:挂载和卸载

挂载:将一个分区与一个目录联系起来,语法格式:mount 设备名称 挂载目录

例如:mount /dev/sdb1 /newdisk

卸载:umount 设备名称 或者 挂载目录

例如:umount /dev/sdb1 或者 umount/newdisk

注意:用命令行挂载,重启后会失效

第五步:永久挂载

永久挂载:通过修改/etc/fstab实现挂载,添加完成后执行mount –a即刻生效。

image-20220212170043989

3、磁盘情况查询

查询系统整体磁盘使用情况:df -h

[root@hspEdu01 /]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda2        17G  5.6G   11G   36% /
devtmpfs        976M     0  976M    0% /dev
tmpfs           991M     0  991M    0% /dev/shm
tmpfs           991M   11M  980M    2% /run
tmpfs           991M     0  991M    0% /sys/fs/cgroup
/dev/sda1       976M  134M  776M   15% /boot
tmpfs           199M  4.0K  199M    1% /run/user/42
tmpfs           199M   32K  199M    1% /run/user/0

查询指定目录的磁盘占用情况:du -h

查询指定目录的磁盘占用情况,默认为当前目录

  • -s:指定目录占用大小汇总
  • -h:带计量单位
  • -a:含文件
  • --max-depth=1:子目录深度
  • -c:列出明细的同时,增加汇总值
[root@hspEdu01 /]# du -ha /home/aaa/
4.0K	/home/aaa/bbb/ccc
8.0K	/home/aaa/bbb
12K	/home/aaa/
[root@hspEdu01 /]# du -a /home/aaa/
4	/home/aaa/bbb/ccc
8	/home/aaa/bbb
12	/home/aaa/
[root@hspEdu01 /]# du -ahc /home/aaa/
4.0K	/home/aaa/bbb/ccc
8.0K	/home/aaa/bbb
12K	/home/aaa/
12K	总用量
[root@hspEdu01 /]# du -ahc --max-depth=1 /home/aaa/
8.0K	/home/aaa/bbb
12K	/home/aaa/
12K	总用量

一些常用指令示例:

  1. 统计/opt文件夹下文件的个数:ls -l /opt | grep "^-"| wc-l --->grep通过正则表达式过滤只要以-开头的文件,wc -l是用于统计数量的
  2. 统计/opt文件夹下目录的个数:ls -l /opt | grep "^d"| wc-l--->同上以d开头的是目录
  3. 统计/opt文件夹下文件的个数,包括子文件夹里的:ls -lR /opt | grep "^-" | wc-l
  4. 统计/opt文件夹下目录的个数,包括子文件夹里的:ls -lR /opt | grep "^d" | wc-l
  5. 以树状显示目录结构tree目录:tree /home/,注意,如果没有tree,则使用yum install tree安装

三、网络配置

1、NAT网络配置原理图

image-20220212173032329

Linux可以连接windows的vmnet,vmnet和外部相连,这样就可以连接互联网了,所以Linux也可以连接互联网。

2、查看网络IP和网关

可以在VMware上,点击左上角【编辑】查看【虚拟网络编辑器】

image-20220212174527506

这里如果把子网IP修改一下,重启后,子网ip就变了。

查看ip就用ipconfig和ifconfig即可。

3、Linux网络环境配置

以前出现过隔个几天ip地址就变了,测试项目的时候总是要改配置,非常麻烦,其实可以通过修改网络环境配置来设置ip不变。

ip有两种方式,一种是自动获取,一种是指定ip。在哪里设置呢?

image-20220212175701847

应用程序-->系统工具-->设置-->网络-->ipv4可以查看是自动获取ip

image-20220212175846138

那怎么指定ip呢,直接在配置文件中修改即可:

编辑vi /etc/sysconfig/network-scripts/ifcfg-ens33,把下面这段粘进去,修改自己的ip地址即可

BOOTPROTO=static
#IP地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2

注意要把上面的DHCP删除掉,此时还需要把vmnet8的ip修改成同一个网段。

重启网络服务:service network restart和reboot都行,记得把xshell的ip修改一下,要不登录不了。

4、设置主机名和host映射

[root@hspEdu01 ~]# hostname
hspEdu01

这就是主机名,可以修改/etc/hostname,修改主机名,然后reboot一下即可。

希望通过主机名可找到某个linux系统,这时就需要映射关系了。

  • linux可以在/etc/hosts中修改:192.168.200.1 DESKTOP-NF7R8DC,然后测试能ping通
  • windows可以在C:\Windows\System32\drivers\etc\hosts中修改:192.168.200.130 linux设置的主机名-->这样从windows去ping linux设置的主机名就能ping通了

主机名解析过程分析

上面的hosts是一个文件,其中记录了主机名和ip的映射关系。

这里就要提一下DNS了,它叫做Domain Name System,域名系统。

步骤:

  • 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存,可以理解为本地解析器缓存。
  • 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录).如在cmd窗口中输入:
    • ipconfig/displaydns:DNS域名解析缓存
    • ipconfig/flushdns:手动清理dns缓存
  • 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
  • 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析域

image-20220212202342372

四、进程与服务

1、查看进程

在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。

ps指令是用来查看当前系统有哪些在执行的进程的。

语法:ps【选项】,其中选项-a表示显示当前终端的所有进程信息,-u表示以用户的格式显示进程信息,-x表示显示后台进程运行的参数,如果想过滤可以使用grep指令。

image-20220212203831590

  1. user:表示进程执行的用户
  2. PID:进程号
  3. %cpu:占用cpu百分比
  4. %mem:占用物理内存的百分比
  5. VSZ:占用虚拟内存的情况
  6. RSS:占用物理内存的情况
  7. TTY:终端
  8. STAT:运行状态;S表示休眠,r表示允许
  9. start:开始时间
  10. time:进程占用的cpu时间
  11. command:启动进程的指令是什么

ps的其他选项:-e表示显示所有进程(可以显示父进程),-f表示以全格式显示。

ps -ef就是全部显示:

[root@oliver001 ~]# ps -ef | grep sshd
root      7478      1  0 18:20 ?        00:00:00 /usr/sbin/sshd -D
root      10111   7478  0 20:00 ?        00:00:00 sshd: root@pts/0
root      10629  10115  0 20:49 pts/0    00:00:00 grep --color=auto sshd

进程号7478的父进程是1号,说明是由1号创建的,10111是由7478创建的...依此类推。

2、终止进程

可以使用kill或killall来杀死进程。

基本语法:kill【选项】进程号(功能描述:通过进程号杀死进程);

killall 进程名称(功能描述:通过进程名称杀死进程,支持通配符)。

常用的选项:-9:强迫进程立即停止。

3、查看进程树

pstree【选项】:可以更加直观的查看进程信息。

常用选项:

-p:显示进程的pid

-u:显示进程的所属用户

4、服务管理

服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。

基本语法:service 服务名 [start | stop | restart | reload | status]

在CentOS7.0后很多服务不再使用service,而是systemctl,查看现在service指令还能查看哪些服务可以在ls -l/etc/init.d 中查看

image-20220212212820184

比如:service netconsole status

5、服务的运行级别

Linux系统有7种运行级别(runlevel):常用的是级别3和5

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS),不支持网络
  • 运行级别3:完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

通过chkconfig指令可以给服务设置各个运行级别的自启动/关闭。在CentOS7.0后很多服务使用systemctl。

基本语法:chkconfig --list [| grep xxx ]

image-20220212214954782

这个可以查看各个服务在各个级别是否开启。

基本语法:chkconfig --level 几 服务名 on/off 开启与否。 image-20220212214954782

6、新版systemctl

基本语法:systemctl [start | stop | restart | status] 服务名。

systemctl指令管理的服务在/usr/lib/systemd/system查看。

systemctl list-unit-files [ | grep 服务名]:查看服务开机启动状态,grep可以进行过滤

systemctl enable 服务名:设置服务开机启动

systemctl disable 服务名:关闭服务开机启动

systemctl is-enabled 服务名:查询某个服务是否是自启动的

案例:ls -l /usr/lib/systemd/system | grep fire

[root@oliver001 ~]# ls -l /usr/lib/systemd/system | grep fire
-rw-r--r--. 1 root root  657 10月 31 2018 firewalld.service

然后:

[root@oliver001 ~]# systemctl list-unit-files | grep firewalld
firewalld.service                             enabled 

7、防火墙的机制

image-20220212222201713

在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080等,这个又怎么做呢?

  • 打开端口:firewall-cmd--permanent--add-port=端口号/协议
  • 关闭端口:firewall-cmd--permanent--remove-port=端口号/协议
  • 重新载入,才能生效:firewall-cmd--reload
  • 查询端口是否开放:firewall-cmd--query-port=端口/协议

CentOS7.0运行级别简化为了3和5两种,所以不再用设置级别了。

8、动态监控进程

top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。

基本语法:top【选项】 image-20220212232458355

如何查看呢?

image-20220212232615168
  • 20:11:12-->表示当前时间
  • 4:47-->系统执行时间
  • 2 users-->2个用户
  • load average-->表示负载均衡

其他操作:

image-20220212233502841

执行过程中按上面这些字母即可,注意大小写。

监视特定用户:执行top后,输入“u”回车,再输入用户名,即可。

终止指定进程:执行top后输入“k”回车,再输入要结束的进程ID号。

指定系统状态更新的时间(每隔10秒自动更新),默认是3秒:top -d 10。

9、监控网络状态

基本语法:netstat【选项】。

选项说明:

-an:按一定顺序排列输出;

-p:显示哪个进程在调用;