Linux基础

Linux概述

Unxi的发展:

  1. 1946年:世界上第一台计算机ENIAC诞生于美国
  2. 1960年:麻省理工学院研发出兼容分时操作系统
  3. 1965年:Multiscs计划
  4. 1970年:Ken Thompson研发出Unix原型
  5. 1973年:Ritchie用C语言编写了Unix内核,Unix正式诞生
  6. 1974年:Unix对外公布,开始广泛流行

Linux的发展:

  1. 1986年:Tanenbaum研发出Minix,并与次年发布
  2. 1991年:Linus Torvalds研发出Linux内核雏形
  3. 1994年:Linux1.0内核发布
  4. 1995年:各种不同Linux发行版本相继出现

Linux发行版本:

  1. Redhat, SUSE Entprise , CentOS

    侧重于网络服务,企业管理

  2. Debian, Slackware

    侧重于服务器及其稳定性

  3. Ubuntu,Fedora, OpenSUSE

    侧重于用户体验

Unix和Linux的区别:

Unix Linux
商业付费软件 免费,公开源代码
多数是与硬件配套的 可运行在多种硬件平台上
对硬件要求更为苛刻 对硬件要求没Unix高
安装复杂 安装相对简易
使用比较复杂 使用相比Unix简易
最稳定 稳定性次之

Linux的结构:

Linux结构

图:Linux的结构

Linux的结构由四部分构成:

  1. 硬件

  2. 内核(kernel):是Linux操作系统的核心,指挥调度Linux机器的运行。直接控制计算机的资源。保护用户程序不受错综复杂的硬件实现细节的影响。

  3. 外壳(Shell):是Linux的一个特殊程序,是用户和内核之间的命令解释器。在命令提示符下,用户输入相应的命令,发出后会被执行。使用者可以通过shell与计算机通信。

    shell与内核是分开的。可以使用其他的shell来代替本机的shell。

    Linux中的shell:

    1. Boune shell(sh):Linux最初使用的shell,并且在所有的Linux系统上都可以使用。在编程方面相当优秀,在处理与用户的交互方面比较差。
    2. C shell(csh):C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代。
    3. Korn shell(ksh):Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点。许多安装脚本都使用 ksh ,ksh有42条内部命令,与bash相比有一定的限制性。
  4. 应用程序

Linux的特点:

  • 多用户,多任务
    1. 多任务:CPU时间分片,分给不同的进程。
    2. 多用户:允许多个用户同时登陆使用。
  • 管道,功能强大的shell
    1. 管道:前一个程序的输出作为后一个程序的输入。
    2. 功能强大的Shell:shell是一种解释型的高级语言。
  • 安全保护机制,稳定性好
    1. 安全保护机制:防止系统及数据库未经许可而被非法访问。
    2. 稳定性好:Unix浩宇Linux,Linux好于Windows。
  • 用户界面,强大的网络支持
    1. 用户界面:常用命令行界面,同时提供图形界面。
    2. 强大的网络支持:TCP/IP协议就是Linux的缺省网络协议。
  • 移植性好
    1. 移植性好:Linux的源代码是用C语言写成的,非常方便移植到其他计算机上。

Linux用户和用户组管理

Linux用户和用户组:

用户

图:用户与用户组的关系

Linux用户会归属于用户组。归属于同一用户组的用户,对一些公共的文件具有相同的访问权限。

UID-用户ID:

  1. UserID
  2. 每个用户的唯一识别ID
  3. SuperUser:UID = 0
  4. SystemUser: UID = 1 - 499
  5. 一般用户:UID = 500 - 60000

GID-组ID:

  1. Group ID
  2. 每个组的唯一识别ID
  3. 没有SuperGroup
  4. SystemGroup : GID = 0-499
  5. 一般组:GID = 500 - 60000

用户与用户组主要文件内容:

/etc/passwd

passwd

图:/etc/passwd文件

  • 开放给全部用户可以存取的权限
  • 一个用户一行
  • 字段说明:
    1. 第一个字段root:用户名
    2. 第二个字段x:密码
    3. 第三个字段0:UID
    4. 第四个字段0:PrimaryGroup‘s GID
    5. 第五个字段root:说明
    6. 第六个字段/root: 家目录
    7. 第七个字段:/bin/bash: Login shell

/etc/shadow

shadow

图:/etc/shadow文件

  • /etc/passwd不安全
  • /etc/shadow支持SHA-256及SHA-512密码哈希
  • 密码哈希中存储三种信息
    1. 哈希算法
    2. 用于加密哈希的salt
    3. 以加密的哈希
  • /etc/shadow字段

/etc/group

group

图:/etc/group文件

  • 开放给全部用户可以存取的权限
  • 一个组一行
  • 字段说明:
    1. 第一个字段root:组名称
    2. 第二个字段x: 组密码
    3. 第三个字段0: GID
    4. 第四个字段root:加如该组的用户

用户管理的常用命令:

用户查询命令:

  1. id:查询当前登录用户的GID,UID。
  2. finger:查询当前用户属性信息。

新增用户:useradd

默认情况下,不设密码,用户无法登录。

例如:增加用户ipcc。

1
useradd -d/home/ipcc -m -u 2000 -g mms -s/bin/csh ipcc

useradd [参数] 用户名

  1. -d:设置用户的家目录
  2. -m:设置的家目录不存在时自动创建
  3. -u:设置用户的UID
  4. -g:设置初始的GID或组名
  5. -s:指定用户的shell,如/bin/csh

如果在新增用户式,直接输入useradd ipcc ,系统过自动读取/etc/default/useradd 配置文件。里面规定了默认的初始用户组,sehll等。可通过useradd -D 读取默认配置文件。

删除用户:userdel

userdel [参数] 用户名

  1. -r:连用户家目录一起删除。

设置用户密码:passwd

passwd [用户名] :设置和修改用户密码。

修改用户属性:usermod

usermod [用户名]:

  1. -d:修改用户目录
  2. -g:修改初始用户组

用户组管理的常用命令:

新增用户组:groupadd

groupadd [参数] 用户组名

  1. -g:指定组ID。

删除用户组:groupdel

修改用户组:groupmod

groupmod [参数] 用户组名

  1. -g:修改组ID
  2. -n:修改组名

Linux文件和目录管理

绝对路径与相对路径:

绝对路径:

  1. 对路径的描述,一律从”/“开始

    例如:/home/student/file.txt

  2. 绝对路径的特征是,路径的描述,第一个字符一定是”/“。

  3. “/“根目录是文件阶层系统的最长层

相对路径:

  1. 描述路径时,第一个字符不是”/“

  2. 例如:绝对路径的/home/student/file.txt

    /temp : ../home/student/file.txt

    /home : student/file.txt

  3. 描述路径的相对关系

  4. “..” 表示上一层文件夹

Linux的目录结构:

Linux的目录结构

图:Linux的目录结构

目录 内容
/bin 构建最小系统所需要的命令,引导是会使用一般命令或可执行文件
/sbin 和系统操作有关的命令,引导是会使用系统命令或可执行文件
/boot 内核与启动文件
/dev 各种设备文件
/etc 系统软件的启动和配置文件,大部分是 *.conf ,/etc/passwd、/etc/group、/etc/shadow例外
/home 用户的主目录
/root 超级用户root的家目录
/usr 非系统的程序和命令
/var 系统专用的数据和配置文件
/opt 可选的应用软件包
  • /temp:临时文件存放点
  • /media:本机硬盘以外的存储设备
  • /mnt:本机硬盘以外的存储设备

文件管理常用命令:

  • 显示当前工作目录:pwd
  • 变更工作目录:cd
  • 列出文件夹的内容清单:ls
  • 复制文件夹或文件:cp
  • 移动文件或文件夹:mv
  • 创建文件夹:mkdir
  • 删除文件夹:rmdir,必须是空文件夹才能删除
  • 删除整个文件夹:rm

linux文件系统管理

文件系统的概念:

文件系统是操作系统用于明确存储和组织计算机数据的方法。

存储在介质中的数据的三个因素:

  1. 文件名:定位存储的位置
  2. 数据:文件的具体内容
  3. 源数据(meta-date): 文件有关的信息

Linux支持的文件系统类型,可以查看/etc/filesystems

文件系统的分类:

是否有日志:

  1. 传统型文件系统

    写入文件内容的时候,先写入数据,在写入元数据。如果在写入元数据之前突然断电,可能会造成文件系统处于不一致的状态。因此,不如日志型文件系统安全。

    典型的传统型文件系统是ext2文件系统。也是Linux默认的文件系统。

  2. 日志型文件系统

    写入文件内容的时候,首先写入日志记录文件。若整个写的操作,由于某种原因导致系统掉电,中断,那么则会在下次系统启动时,会读日志记录文件的内容来恢复没有完成的写操作,一般能在几分钟之内将文件系统恢复到一致的状态。比传统的文件系统更加安全。

    典型的日志型文件系统有ext3、ReiserFS文件系统。

    ext3是对ext2的扩展,在ext2基础上加入了日志功能。

    ReiserFS使用基于平衡树的文件系统结构,搜索快。另一个特点是节约空间。对于小文件,比如小于4k的文件可以直接存储进树,小文件的读取和写入树会更加快。

如何查找数据:

  1. 索引式文件系统

    将文件属性数据和实际内容存放在不同的区块。通过属性数据,可以很快找到实际数据所存储的位置。

    如ext2文件系统,文件属性存放的地方成为inode,记录了文件的所有者,权限和修改时间等属性。实际数据存储在Block中。

  2. 非索引式文件系统

    只有block,数据需要一个block接一个block读取,效率相对来说比较低。

    典型的非索引文件系统如windows下的FAT。

    磁盘碎片整理,就是通过系统软件或者专业的磁盘碎片整理软件对电脑磁盘在长期使用过程中产生的碎片和凌乱文件重新整理,可提高电脑的整体性能和运行速度。

    磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。硬盘在使用一段时间后,由于反复写入和删除文件,磁盘中的空闲扇区会分散到整个磁盘中不连续的物理位置上,从而使文件不能存在连续的扇区里。这样,再读写文件时就需要到不同的地方去读取,增加了磁头的来回移动,降低了磁盘的访问速度。

ext2文件系统的结构:

ext2文件

图:ext2文件系统的结构

文件系统中存储的最小单元是块(block),一个块的大小是在格式化时确定的。启动块(Boot Block)的大小为1KB,由PC标准规定,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启动块。
启动块之后才是ext2文件系统的开始,ext2文件系统将整个分区划分成若干个同样大小的块组(Block Group)。

每个块组的组成:

  1. 超级块(Super Block)描述整个分区的文件系统信息,如inode/block的大小、总量、使用量、剩余量,以及文件系统的格式与相关信息。超级块在每个块组的开头都有一份拷贝。

  2. 块组描述符表(GDT,Group Descriptor Table)由很多块组描述符组成,整个分区分成多个块组就对应有多少个块组描述符。

    每个块组描述符存储一个块组的描述信息,如在这个块组中从哪里开始是inode Table,从哪里开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝。

  3. 块位图(Block Bitmap)用来描述整个块组中哪些块已用哪些块空闲。块位图本身占一个块,其中的每个bit代表本块组的一个block,这个bit为1代表该块已用,为0表示空闲可用。假设格式化时block大小为1KB,这样大小的一个块位图就可以表示1024 8个块的占用情况,因此一个块组最多可以有1024 8个块。

  4. inode位图(inode Bitmap)和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。

  5. inode表(inode Table)由一个块组中的所有inode组成。一个文件除了数据需要存储之外,一些描述信息也需要存储,如文件类型,权限,文件大小,创建、修改、访问时间等,这些信息存在inode中而不是数据块中。inode表占多少个块在格式化时就要写入块组描述符中。

配置文件系统分区:

创建分区:fdisk

语法:fdisk 设备名

  1. 通过m参数,可以查看按键操作说明
  2. 通过p参数,可以得到本地磁盘的相关信息
  3. 通过n命令,可以新建一个分区

新建分区的步骤:

  1. 选择分区的类型
  2. 选择分区开始的磁柱
  3. 决定分区大小
  4. 保存新建分区

重启服务器或使用partprobe命令通知内核。

创建文件系统:mkfs

语法:mkfs[参数] 设备名称

  1. -t:指定文件系统类型,图ext3
  2. -b:指定block大小,单位bytes,ext2/ext3只支持1024,2048,4096三种。

挂载文件系统:mount

语法:mount 设备名 挂载点

  1. -t:指定文件系统类型,如ext3
  2. -b:指定block大小,单位bytes

管理Linux文件系统:

查看分区使用情况:

QQ截图20180409222716

图:查看示例

df:查看文件系统的磁盘空间占用情况

  1. -h:以容易理解的格式打印出文件系统大小
  2. -i:显示inode信息而非块使用信息

du:查询文件或目录的磁盘使用空间:

  1. -a:显示目录下每个文件所占用的磁盘空间
  2. -s:只显示大小的总和(summarize)
  3. -h:以容易理解的格式输出文件大小

查看系统打开的文件:

lsof:显示系统打开的文件

  1. lsof filename:显示打开指定文件的所有进程
  2. lsof -c string :显示以指定字符开头的进程所有打开的文件
  3. lsof -u username:显示所属user相关进程打开的文件

修复文件系统:

fsck:检查文件系统并尝试修复错误

  1. 执行fsck时,必须将要修复的设备进行umount后,再指定fsck命令。

e2fsck:检查和修复ext2和ext3文件系统

Linux LVM配置

LVM的原理:

什么是LVM?

LVM是Logical Volume Manager的简写,即逻辑卷管理。

是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以事项一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可 能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。

LVM是建立在硬盘和分区之间的一个逻辑层,用来提高磁盘分区管理的灵活性。在传统的文件管理中,文件系统是直接构建在物理分区之上的,物理分区的大小就决定了其上文件系统的存储容量,因此对文件系统的存储容量调整就比较繁琐。LVM的设计目的就是为了实现文件系统存储容量的课扩展性,使对容量的调整更为简易,而非读写性能和数据的安全性。

LVM架构:

LVM架构

图:LVM架构图

PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。

LVM的优点:

通过使用LVM:

  1. 文件系统可以跨域多个磁盘
  2. 动态地扩展文件系统的大小
  3. 增加新磁盘到LVM的存储池中

LVM的要点:

  1. 按需分配文件系统的大小
  2. 把不同的数据放在不同的卷中

物理卷管理命令:

  • pvcreate:创建物理卷

    将普通的分区加上pv属性。

    例如:将分区/dev/sha6创建文物理卷:

    pvcreae /dev/sha6

  • pvscan:查看物理卷信息

  • pvdisplay:查看各个物理卷的详细参数

  • pvremove:删除物理卷

    删除物理卷的pv属性。

卷组管理:

  • vgcreate:创建卷组
  • vgsacn:查看卷组信息
  • vgdisplay:查看卷组的详细信息
  • vgreduce:缩小卷组,把物理卷从卷组中删除
  • vgextend:扩展卷组,把某个物理卷添加到卷组中
  • vgremove:删除卷组

逻辑卷管理命令:

  • lvcreate:创建逻辑卷
  • lvscan:查看逻辑卷的信息
  • lvdisplay::查看逻辑卷的具体参数
  • lvextend:增大逻辑卷的大小
  • lvreduce:减小逻辑卷大小
  • lvremove:删除逻辑卷

管理文件系统空间:

增大文件系统空间:

  1. 先卸载逻辑卷
  2. 然后通过vgextend,lvextend等命令增大lv的空间
  3. 再使用resize2fs将逻辑卷容量增加
  4. 最后将逻辑卷挂载到目录树下

缩小文件系统空间:

  1. 先卸载逻辑卷
  2. 然后使用resize2fs将逻辑容量减小
  3. 再通过lvreduce等命令减小lv空间
  4. 最后将逻辑卷挂载到目录树下

Linux网络管理

有管网络配置的具体命令参数可参考Linux学习笔记命令篇

查询和配置网口:

查看网口的配置:ifconfig ,可查看IP地址,广播地址和掩码等。

修改网口的配置:ifconfig eth3 192.168.100.128 broadcast 192.168.100.255 netmask 255.255.255.0。修改网络配置文件够,重启后配置才会一直都在,使用ifup命令,启动网口。

查询和配置路由:

查询本机路由表:route。

新增路由:route add ,新增路由数据保存在内存中,系统重启失效。

/etc/sysconfig/network/routes 用来保存静态路由数据,需要重启网络服务才能生效。

侦测网络:

ping:检测对端网络是否可达。

traceroute:探测从源到目的所经过的路由。

配置常用网络服务:

ftp

图:配置ftp服务

telnet

图:配置telnet服务

Linux进程和任务管理

进程管理:

  • 程序:文件中保存的一系列可执行命令
  • 进程:加载到内存中的程序,由CPU运行
  • 守护进程:常驻内存,与终端无关的系统进程
  • 用户进程:用户通过终端加载的进程

进程中常用命令:

ps :静态查看某一时间点进程信息:

  1. a:显示现行终端机下的所有程序
  2. x:显示所有程序,不以终端机来区分
  3. u:以用户维注的格式来显示程序状态
  4. f:用ASCII字符显示树状结构

top:连续观察进程的动态,默认每3秒刷新一次,并按CPU使用率由高到低排序。

pstree:用ASCII字符显示树状结构:

  1. -p:显示进程ID
  2. -u:显示用户名称

kill:结束进程和进程PID,系统可能响应忽视。 kill -9 PID,强制终止进程。

Killall:终止同一进程组内得所有进程。例如:killall httpd

任务管理:

  • 任务:登录系统取得shell之后,在单一终端接口下启动的进程。
  • 前台:在终端接口上,可以出现提示符让哟用户操作的环境。
  • 后台:不显示在终端接口的环境。

任务管理的相关命令:

&:直接将程序放入后台处理,如:find /-name smcapp &

jobs:查看当前shell的后台任务。

ctrl+z:将正在运行的任务放入后台暂停。

fg %[job ID]:将任务放入前台执行。不加job id表示对当前的任务进程操作。

bg %[job ID]:将任务放入后台执行。

crontab:管理周期计划任务.

语法:crontab [-u user ] -e | -l | -r

  1. -u:指定用户
  2. -e:边界crontab任务内容
  3. -l:查阅crontab任务内容
  4. -r:移除所有的crontab的任务内容

crontab相关配置文件:

  1. 使用crontab -e编辑时,程序会直接调用vi接口,程序路径是/usr/sbin/cron
  2. 系统记挂任务保存在/etc/crontab文件中
  3. /var/spool/cron/tabs下面有对应的用户名crontab,对应用户级别的任务配置。
  4. /var、cron对应系统级别的任务配置。

at :管理定时任务,安排一个任务在未来执行,必须先启用atd进程。

  1. at -l:相当于atq,列出当前at任务。
  2. at -d [job ID]:相当于atrm,删除一个at任务
  3. at -c[job ID]:查看任务的具体内容。

at的使用方法:

  1. at HH:MM :今日的HH:MM执行,若是时间已经超过,则明天的HH:MM执行。
  2. at HH:MM YYYY-MM-DD :指定具体的执行日期和时间。
  3. at now + number [minutes | hours | days
    weeks ]:当前时间往后多长时间执行。
  4. at HH:MM + number [minutes | hours | days ] :某个时间点+多长时间执行。

Linux系统监控

监控系统启动日志:

  • dmesg | less
  • /var/log/boot.msg

监控硬件信息:

cat/proc/...

系统硬件信息保存在/pron下的文件中:

  1. /pron/cpuinfo:CPU的信息
  2. /pron/devies:已经加载过的设备信息
  3. /pron/bus:系统总线信息
  4. /pron/scsi scsi:设备信息
  5. /pron/net:网卡设备信息

hwinfo:显示所有硬件相关信息:

  1. –disk:显示磁盘信息
  2. –cpu:显示CPU信息
  3. –memory:显示内存信息
  4. –network:显示网卡信息
  5. –short:显示硬件的摘要信息

fdisk:查看硬盘信息。-l:查看服务器所挂载判个数及分区情况。

iostat:查询cpu和磁盘 I/O的统计信息:

  1. -c:仅显示CPU统计信息
  2. -d:仅显示磁盘统计信息
  3. -k:以k为单位显示每秒的磁盘请求数

lspci:列出所有的PCI设备。

  1. -v:显示PCI接口装置的详细信息
  2. -w比-v更详细的信息。

监控系统和进程:

  • PS:用来显示当前进程状态,和top不同的是,查看的是今天信息。
  • top:即时显示进程的动态,可以用来查看进程使用的cpu,内存等。
  • uptime:查看系统已经开机的时间以及系统平均负载。
  • uname:查看系统版本相关的信息,如内核号。
  • netstat:显示与IP、TCP/UDP协议相关的统计数据、用于检测本机各个端口的网络连接情况。

监控登录信息:

who:查看当前登录系统的用户

  1. -H:显示各栏位的标题信息列
  2. -m:效果同who am i,显示出自己在系统中的用户名,登录终端,登录时间。

w:查看当前登录的用户机用户当前的工作

  1. -u:后面接user,查看具体用户信息

finger:查看用户详细信息

  1. -s:短格式显示用户信息
  2. -l:长格式显示用户信息

last:查看曾今登录后系统的用户

  1. -n num:设置列出名单的显示列数
  2. -F:显示登录和登出的详细信息

lastlog:查看用户前一次的登录的信息。

  1. -t days:查看距今n天内登录了系统的用户的最近一个词登录信息。
  2. -u:显示的登录和登出的详细信息。
坚持原创技术分享,您的支持将鼓励我继续创作!