LINUX基础笔记和总结

linux 简介

系统诞生时间

UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,Linux 诞生于 20 世纪 90 年代

unix系统是Linux 系统的前身。

基于unix 和linux 系统有许多的发行版本。

linux 系统发行版简介

Redhat 版本

Redhat系列,它包括RHEL(Redhat Enterprise Linux. 为收费版本)、Fedora Core(由Redhat桌面版本发展而来,免费),CentOS(RHEL的社区克隆版本,免费)。Redhat可以说是在国内使用最多的Linux版本,甚至有人将Redhat等同于Linux。这个版本的特点就是使用人数多,资源多,而且网上的许多Linux教程也都以Redhat为例进行讲解,Redhat系列的包管理方式采用的是基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件。在稳定性方面,RHEL和CentOS的稳定性非常好,适合于服务器使用;但是Fedora Cora的稳定性较差,一般应用于桌面应用。

Debian系列

Debian系列包括Debian和Ubuntu等。Debian是社区类Linux的典范,也最遵循GNU规范。Debian分为三个分支:stable、testing和unstable。其中,unstable为最新的测试版本,有相对较多的bug,适合桌面用户,testing的版本都经过测试,相对较为稳定。而stable一般只用于服务器,软件包大都比较过时,但是稳定和安全性都很高。Debian最具特色的是apt—get/dpkg包管理方式。

Ubuntu系列

Ubuntu严格来说不能算一个独立的发行版本。Ubuntu是基于Debian的unstable版本加强而来的,可以说Ubuntu是一个拥有Debian所有的优点,以及自己所加强的近乎完美的Linux桌面操作系统。根据选择的桌面系统不同,有三个版本可供选择,基于Gnome的Ubuntu,基于KDE的Kubuntu以及基于Xfc的Xubuntu。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面操作系统的Linux发行版本。

linux 安装

  1. 修改bios的系统启动顺序(当安装完毕后,需要修改回来)

  2. 安装时选择操作方式

  3. 选择语言,键盘时区等

    ​ 选择语言

  4. 软件包选择,根据具体的场景选择,这里选择最小安装

  5. desktop 桌面

  6. minimal desktop 最小化桌面

  7. minimal 最小化

  8. basic server 基本服务器 (推荐)

  9. database server 数据库服务器

  10. web server 网页服务器

  11. virtual host 虚拟主机

  12. software development workstation 软件开发工作站安装日志

  1. 配置分区

选择不使用自动分区,使用手动配置分区

选择使用标准分区

添加对应的分区

  1. /boot 加200M 分区,选路径和etx4格式 (一定是第一个分区 sda1)

  2. /swap 加2g 分区 (选文件系统类型为swap)

  3. / 加剩余的空间大小

  4. 注意分到第四个分区的时候,自动变成逻辑分区

  1. 设置root 密码

  2. 安装完毕后,点击重启。

  3. 安装日志

    /root/install.log 安装系统的软件包和版本信息

    /root/install.log.syslog 存储安装过程中留下的事件记录

    /root/anaconda-ks.cfg 以kickstart 配置文件的格式记录安装过程中设置的选项信息

  4. 各个目录的作用

image-20220530063322865

  1. 安装重启完成后,配置网卡信息(也可以在安装时的图形界面配置)

注意:如果使用虚拟机安装,注意网络模式使用桥接模式

需要首先确定分配给此服务的IP地址,子网掩码。

假设 IP地址 : 192.168.199.10

​ 子网掩码: 255.255.255.0

1
ip addr

查看网卡信息

可以看到2个网卡信息 l0 和eno16777736,其中 l0 是本地回环网卡,不用配置。

要配置的是另一个 eno16777736 网卡。

可以看到有网卡 mac地址信息即 00:0c:29:0c:83:4b

进入网络配置目录

1
2
cd /etc/sysconfig/network-scripts/
ll

查看配置文件

编辑网卡文件, ifcfg-eno16777736 对应着刚才看到的网卡

1
vi ifcfg-eno16777736

修改如上图。

BOOTRPOTO=static 改成使用静态配置IP的方式

ONBOOT=yes 启动后生效

新添加配置

1
2
3
4
IPADDR=xx    //分片的静态ip
GATEWAY=xx //网关地址
NETMASK=xx //子网掩码
DNS1=xx //DNS 服务器配置,可以配置多个

配置完成后,保存文件。

1
2
esc
:qw!

网卡重启

centos 7.x

1
systemctl restart network

centos 6.x

1
service restart network

测试网络连接

1
ping baidu.com

centos 7.x 中,NetworkManager 和 service.network 是共存关系,一般建议 禁用 NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager

常用操作和命令

开关机和重启

  • shutdown [选项] 时间 (推荐使用)

    -c 取消前一个关机名

    -h 关机 shutdown -h now shutdonw -h 20:30(指定时间关机)

    -r 重启 shutdown -r now

  • halt 调用shutdown -h 等同上面的

  • **poweroff **(等同拨电源,打死不用)

  • reboot 重启

  • init 0 关机

  • init 6 重启

init + 数字 为指定linux的运行级别,linux的运行级别分别为

0 关机

1 单用户

2 不完全多用户,不含NFS服务

3 完全多用户

4 未分配

5 图形界面

6 重启

runlevel 查询系统运行级别

CentOS 5、 CentOS 6可以通过修改配置文件/etc/inittab 参数,从而修改系统运行级别,切换系统的runlevel,但是从CentOS 7开始,不能用这个命令了,只能由systemd统一管理。

用户管理

useradd 添加新用户

passwd 给用户设置密码

who 查看用户登录信息

有几个登录用户,远程还是本机登录 ,登录时间和登录ip

w 查看登录用户的信息,包含登录时间等信息

系统运行时间 用户信息,负载情况 ,正在执行什么命令,占用cpu时间等信息。

权限管理命令

chmod ugoa rwx 改变文件权限

chmod ugoa rwx 改变文件权限

权限的数字表示 r 4 w 2 x 1

chmod g+w file 给file 文件的group 增加写权限

chmod -R 777 test 给test目录和下目录增加所有权限

  • r 读权限 可以查看文件内容 可以查看目录中的内容
  • w 写权限 可以修改文件内容 可以在目录中创建和删除文件
  • x 执行 可以执行文件 可以进入目录

chown [用户] [文件或目录] 改变文件的所有者

chgrp [用户组] [文件或目录] 该变文件或目录的所属组

umask [-S] (-s 以rwx形式显示缺省权限) 显示设置文件的缺省权限

目录和文件处理

ls -[lad] l 详细 a 所有包含隐藏 d 查看目录属性

rw- r– r–

r 读权限 w 写软装 x 执行权限

u所有者 g 所属组 o其他人

表示此文件针对不同的身份的人有哪些操作权限。

mkdir 创建目录

mkdir -p 递归创建目录

touch fileName 创建一个指定文件名的空文件

1
touch readMe.md //创建一个readMe 文件

cd 切换路径

pwd 当前路径

rmdir 删除空目录

cp -rp (r 复制目录 p保留文件属性) 复制文件或目录

mv 移动文件或文件改名

rm -rf (r 递归 f 强制) 删除文件

**cat ** -n (n 行号) 查看文件

**tac ** 查看文件内容(反向显示)

more (空格翻页 ,enter 换行,q 退出) 分页展示文件内容,只能向下看

less 分页展示,可以向上翻页

tail -n f (n指定行数 f 动态滚动显示) 查看最后多少行

**ln ** -s (s 软链接) [原文件] [目标文件] 生成链接文件

软链接和硬链接

软链接类似于快捷方式

软链接的文件权限都是lrwxrwxrwx

文件大小只是符号链接

硬链接等于 cp -p+ 同步更新。就是原文件有改动都会更新硬链接

硬链接可以通过i 节点识别,ls -i xx.file ,对于每个文件再linux中都有一个i节点,是个数值,有可能一样,有可能不一样。

不能跨分区

不能针对目录使用

原文件删除后,软链接就没有了,而硬链接还有文件;

帮助命令

man [命令] 获取帮助信息

示例:

1
man  ls

在帮助页中可以使用 /xx 来搜索字符串。

三个作用:

  • 查看命令的帮助

    1
    man 1 ls
  • 查询配置文件的帮助

    1
    man 5 /etc/profile

help [命令] 获取内置命令帮助信息,只显示常见的命令选项;

内置命令指的 pwd cd 等 使用which 找不到命令所在位置的内置命令;

用man 是无法看到对应的信息的命令。

详细说明用 man 简单提示 使用help

搜索命令

find [搜索范围] [匹配条件] 文件搜索

1
2
3
4
5
find /  -name test (-iname 不区分大小写) 搜搜名称为test的
find / -size +204800 搜索大于200M的 +n 大于 -n 小于 =n 等于
find / -user zhangsan 搜索归属人是张三的 -group 根据组来搜索
find / -cmin -5 5分钟内被修改过属性的文件和目录
find /etc -size +100 -a -size -1000 -a 2个条件同时满足 -o 两个条件满足任意一个

find -type 根据文件类型查找 f文件 d目录 l 软链接文件

-inum 根据i节点查找

locate file (-i 不区分大小写) 在文件资料库中进行查找

此命令是建立了一个文件资料库。系统的文件资料被维护在资料库中

如果没有此命令需要安装

yum -y install mlocate

updatedb (更新文件资料库)

which 搜索命令所在的目录和别名信息

whereis [命令名称] 搜索命令所在的目录和帮助文档路径

grep -i [指定字符串] [文件] 在文件内容中搜字符串匹配的行并输出

​ i 不区分大小写

v 排除指定字符串

压缩命令

gz文件(.gz)

只能 压缩文件,不能压缩目录,不推荐,不保留原文件

gzip file 压缩

1
gzip file1

gunzip file 解压缩

1
gunzip file1

tar文件 (.tar)

会保留原文件

tar [-zcf]

c 打包

v 显示详细信息

f 指定文件名

z 打包同时压缩

tar -zcf file 打包的同时执行压缩

tar -zxvf file 解压缩操作

zip文件 (.zip)

zip [-r] (压缩目录) 【压缩后文件名】 【文件或目录】

unzip [压缩目录] 解压目录

bzip2文件 (.bz2)

gzip 的升级版本;

此格式压缩比非常大,推荐压缩大文件;

bzip2 [-k] [文件]

-k 压缩文件的时候保留原文件

bunzip2 -k (解压缩后保留原文件) 解压缩

生成tar.bz2 压缩包

tar -cjf file.tar.gz2 path

tar -xjf file.tar.gz2

网络命令

ping -c (指定发送次数) ip地址 查看网络连通,windows 上也常用。

ifconfig 查看网络状态 ,常用的命令

netstat 显示网络相关信息

-t tcp

-u udp

-l 监听

-r 路由

-n 显示ip地址和端口号

netstat -tlun 查看本机监听的端口

netstat -an 查看本机所有的网络连接

能够看到连接的对应的ip的对应的端口

netstat -rn 查看网关和路由表信息

last 列出目前和过去用户登录系统的信息

可以查看计算机啥时候重启了

lastlog 特定用户的上次的登录时间

lastlog -u zhangsan

traceroute 显示数据包到主机的路径;

一般检查网络连通到那个地方出现问题,从当前网段出发看出经过的路由。

安装 yum install -y traceroute

write user 给在线用户发信息 (不常用)

wall [message] 所有用户发送广播信息(不常用)

mail 查看发送的电子邮件 (不常用)

setup 通过一个简单的图形化配置网络.

文本编辑

linux 可使用vi 和vim 编辑文本,vim比vi 更加强大,vim可能需要安装。

vim 是功能强大的文本编辑器

插入命令

a 光标字符后插入

A 光标所在行尾插入

i 光标所在字符串前插入

I 行尾插入

o 光标下插入新行

O 光标上插入新行

定位命令

:set nu 设置行号

:set nonu 取消行号

gg 到第一行

G 到最后一行

nG 到第n行

:n 到第n行

$ 行尾

0 行首

删除命令

x 删除光标的字符串

nx 删除光标后的n 个字符

dd 删除光标所在行

ndd 删除n 行

dG删除所在行末尾的内容

D 所在行到行尾

:n1,n2d 删除指定范围的行

复制和剪切

yy 复制当前的行

nyy 复制当前行下n行

dd 剪切当前行

ndd 剪切当前行下n行

p,P 粘贴到当前光标所在行下或行上

替换和取消

r 取代光标所在处字符(只替换一个字符)

R 到光标所在处开始替换字符,esc结束(一个字符一个字符的替换)

u 取消上一次操作 (其实就是撤销操作)

/string 搜索指定的字符串

搜索忽略大小写 :set ic

n 搜指定字符串下一个出现的位置

:%s/old/new/g 全文替换指定字符串

**:n1,n2s/old/new/g ** 在一定范围内替换指定字符串 (:13,14s/306/500/g )

保存

:w /home/aa.file 另存为指定的文件

:w 保存修改

:wq 保存修改并退出

ZZ 快捷键 保存修改并退出

:q! 不保存修改退出
:Wq! 保存修改并退出 (文件所有者和root 用户使用)

! 是强行保存,可以针对没有写权限的文件做对应的保存操作;

其他操作

:r /filepath 导入文件的内容到当前文件的中

:! 命令 不退出vim 的时候执行某些命令

:r !命令 把命令的结果写入文件中

定义快捷键

:map ^P I#(注意 ^p 是ctrl + v +p)

:map ^B 0x

连续行注释

:n1,n2s/^/#/g (执行完后,首行会出现变色)

:n1,n2s/^/#/g (注意^ 就是shirt + ^ )

将这些快捷操作写到对应的配置文件中才能永久有效,如果是root 需要到root 目录,普通用户需要是 /home 下

vim /root/.vimrc

vim /home/wsk/.vimrc

粘贴模式

在执行粘贴代码的时候,如果直接粘贴格式可能会乱,使用粘贴模式后可以保留格式,比较常用

1
:set paste

vim 取消底色

1
:nohl

软件包管理

软件包的分类,软件源码包 和二进制包(rpm 等)

源码包:

  1. 开源,修改源代码
  2. 自由选择功能
  3. 编译安装更加适合当前的系统,更加稳定效率高
  4. 卸载方便 (可以直接删除目录的方式卸载)
  5. 但是安装之前需要编译.

rpm 包:

1. 简单快速
 2. 功能选择不如源码包灵活,并且需要处理依赖性问题

安装位置区别

rpm 包安装位置:

  • /etc/ 配置文件目录
  • /usr/bin 可以执行文件目录
  • /usr/lib 函数库的目录
  • /usr/share/doc 软件使用手册保存位置
  • /usr/share/man/ 帮助文件保存位置

源码包可以执行安装位置。

rpm包

命名规则

如:

httpd-2.2.15-15.e16.centos.1.i686.rpm

  • httpd 软件包名
  • 2.15 软件版本
  • 15 软件发布的次数
  • e16.centos linux平台
  • i686 适合的硬件平台
  • rpm 扩展名

依赖性

rpm包存在依赖性问题,查询包的依赖性可以通过网站;

树形依赖 A–> B –> C

环形依赖 A –B –C –A

模块依赖 模块依赖问题,包依赖某一个类库,通过此网站查询对应的库需要安装那个包 https://www.rpmfind.net/

命令及使用

  • rpm -ivh 包全名 (包全名:包含版本的名称) 安装

    -i 安装

    -v 显示详细信息

    -h 显示进度

    –nodeps 不检测依赖性

  • rpm -Uvh 包全名 升级

    -U 升级

  • rpm -e 包名 卸载

    -e 卸载
    –nodeps 不检测依赖性

  • rpm -q 包名 查询是否安装

  • rpm -aq 查询所有已经安装的包

  • rpm -qi 包名 查询软件包详细信息

  • rpm -ql 包名 查询包安装的位置

  • rpm -qf 文件名 查询文件属于那个rpm包

  • rpm -qR 包名 查询软件包的依赖性

  • rpm -V 已安装的包名 rpm包校验 (主要是校验目前的包是否被修改,比如配置文件是否被修改等,如果完全一致,则不做任何输出,只有发现有不正确的文件时才会输出)

    其中每当发现一个不一致的文件就会有一行类似的输出,一下是每个字符的含义:

    S:表示对应文件的大小(Size)不一致;

    M:表示对于文件的mode不一致;

    5:表示对应文件的MD5不一致;

    D:表示文件的major和minor号不一致;

    L:表示文件的符号连接内容不一致;

    U:表示文件的owner不一致;

    G:表示文件的group不一致;

    T:表示文件的修改时间不一致;

    c:只有文件是一个配置文件时才会有此标志,可以用这种方法快速定位rpm包的配置文件安装位置。

    d: 普通文档

    g: ghost file 文件

    l: 授权文件

    r: 描述文件

    rpm相关的文件没有修改时,此值没有输出,当将安装的jdk的readMe文件做了下修改

    1
    2
    [root@VM-20-3-centos jdk1.8.0_131]# rpm -V jdk1.8.0_131-1.8.0_131-fcs.x86_64
    S.5....T. d /usr/java/jdk1.8.0_131/README.html

    可以知道 对那个文件做了修改。

    常用命令:

    安装:rmp -ivh xxx.rpm

    卸载:rpm -e –nodeps xxx.rpm

    查询已经安装的某个包: rpm -qa | grep jdk

    rpm包中文件的提取

    从rpm中获取指定的某个文件,主要的使用场景是修改或删除了某个rpm的文件,导致错误,需要从里面获取到某个文件来修复;

    rpm2cpio 包全名 | cpio -idv .文件绝对路径

    rpm2cpio 把rpm转成cpio

    cpio是一个文件提取的工具;

    cpio 选项 < [文件|设备]

    -i: copy-in 还原

    -d 还原时自动新建目录

    -v 显示还原过程

    1
    2
    3
    4
    5
    //查询ls 命令属于那个包
    rpm -qf /bin/ls
    假如ls 被删除
    rpm2cpio /mnnt/cdrom/Packages/coreutils-8.4-19.e16.i686.rpm | cpio -idv ./bin/ls
    cp /root/bin/ls /bin

YUM

yum是一个自动管理rpm包的工具,可直接从yum仓库下载安装并自动解决依赖问题。

命令

**yum list ** 所有可用的软件包列表

yum search 关键词 搜索关键字相关的包

yum -y install 包名 通过网络安装包 -y 默认yes

**yum -y update ** 包名

yum -y remote 包名 删除 (不推荐,尽量不要卸载)

**yum grouplist ** 查看所有可用的软件组列表

yum groupinstall 软件组名 安装指定软件组 (注意如果组名之间有空格,需要用引号引起来)

yum group remote 软件组名 删除指定的软件组

yum源配置

网络配置源

前提配置网络

/etc/yum.repos.d

1
2
3
4
5
6
7
8
-rw-r--r--. 1 root root 1664 12月  9 2015 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 12月 9 2015 CentOS-CR.repo
-rw-r--r--. 1 root root 649 12月 9 2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 290 12月 9 2015 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 12月 9 2015 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 12月 9 2015 CentOS-Sources.repo
-rw-r--r--. 1 root root 1952 12月 9 2015 CentOS-Vault.repo
里面有针对不同数据源的配置

默认有网的时候Base 生效;

  • name 说明,可以自定义
  • mirrorlist 镜像站点
  • baseurl yum源服务器的地址,默认是centos 官方的,可以选择其他的源服务地址
  • enabled 判断是否生效
  • gpgcheck 如果是1 值rpm 的数字证书生效,如果是0 表示不生效
  • gpgkey 证书的公钥文件保存位置,不用修改
光盘yum源
  1. 挂载光盘

mount /dev/sr0 /mnt/cdrom/

  1. 将其他的非media 的source名称改名让其不生效,改成 .bak

  2. 修改配置文件,media 的改成enable=1 并且改地址

配置光盘源是在没有网络的时候方便软件的安装。linux的系统安装iso文件中包含了很多常用的安装包,通过挂载成yum 源就实现了本地镜像源

源码安装方式

  1. 源代码保存位置 /usr/local/src
  2. 软件安装位置 /usr/local/

安装步骤

  1. 下载源码包
  2. 加压缩下载的源码包
  3. 进入到解压缩命令
  4. 查看ReadME 查看安装说明

一般步骤

./configure 软件配置与检查 增加参数信息

比如 ./configure –prefix=/usr/local/a 添加安装位置

make 编译

make clean 编译清理

make install 编译安装

卸载的的时候直接删除对应的目录就可以了;

用户和用户组

用户的配置文件

1
/etc/passwd

就是用来存储用户的基本信息文件

  1. 用户名称
  2. 密码标志 (x表示用户是有密码的,密码存在shadow 中,并且是没有读取权限的)
  3. UID(用户id)
    1. 0 超级用户 (普通用户的UID 改成0,就会称为管理员权限)
    2. 1-499 系统用户(伪用户,给系统用的用户,不能删除的,不能登录)
    3. 500-65535 普通用户
  4. GID 用户初始组ID
  5. 用户说明
  6. 家目录
    1. /home/xx
    2. /root
  7. 登录后的shell (命令解释器,用来解析当前的输入的shell,shell 有多个,默认是/bin/bash),如果是/bin/nologin 就不能登录了

新建用户的组有2个,一个是初始组就是和当前用户一样的名称的组,附加组就是后来添加的组;

1
/etc/shadow

此配置文件就是存储用户的密码信息的,注意下此文件的权限

  1. 用户名
  2. 加密密码 (加密密码使用sha512散列算法加密的, !! 或 *表示没有密码不能登录)
  3. 密码的最后一次修改日期(精确到天的)
  4. 两次密码的修改间隔
  5. 密码有效期 (天数)
  6. 密码修改到期前的警告天数 (过期多少天前每次登录的时候都提醒要改密码)
  7. 密码过期后的宽限天数 (0 表示过期后马上失效 -1 表示无失效)
  8. 账号失效时间
  9. 保留

通过此文件可以定义用户多少天必须修改密码,并且提前多少天开始提醒要修改密码;

1
/etc/group
  1. 组名
  2. 组密码标识
  3. GID
  4. 组中附加用户
1
/etc/gshaow
  1. 组名
  2. 组密码
  3. 组管理员用户名
  4. 组中附加用户

用户的家目录

root 的家目录 /root

普通用户创建的时候自动创建家目录 /home/xx

用户模板文件

每个用户创建的时候,是从/etc/skel 目录中拷贝的文件;

在此目录下创建任意文件后,新加用户的home目录都会从这里拷贝

用户添加模板文件

添加用户的时候默认使用这些选项

1
/etc/default/useradd

1
/etc/login.defs

定义默认的登录过期等控制

  • PASS_MAX_DAYS 密码有效期限
  • PASS_MIN_DAYS 修改间隔
  • PASS_MIN_LEN 8 密码最小位数
  • PASS_WARN_AGE 7 密码到期警告

当需要为服务器的大部分用户设置一些密码安装的策略的时候,修改模板定义文件可以不用每一个新建的用户设置。

命令操作

useradd [选项] 用户名

-u 手动指定UID 号

-d 家目录 (手动指定)

-c 用户说明

-g 组名 指定初始组

-G 指定附加组

-s 指定用户的登录shell

passwd [选项] 用户名

-S 查询用户密码的密码状态

-l 暂时锁定用户,root 用户可用

-u 解锁用户 ,root 可用

–stdin 通过管道符输出的数据作为用户的密码

锁定和解锁

passwd -L xx

passwd -u xx

使用字符串作为密码

echo “123” | passwd –stdin xx

将xx 的密码设置为123

su 用户名 切换指定用户

usermod [选项] 用户名 修改用户的信息

-u 修改UID

-c 修改说明

-G 修改附加组

-L 临时锁定

-U 解锁用户

chage [选项] 用户名

-l 列出用户的详细密码状态

-d 修改最后一次更改日期

-m 天数 两次密码修改间隔

-M 密码有效期

-W 天数 密码过期前警告天数

-I 密码过期后宽限天数

-E 账号失效时间

userdel [-r] 名称 删除用户

r 删除用户同时删除用户家目录

**id ** 用户名 查看用户名的id

su [选项] 用户名 改变用户身份

-选项表示带用户的环境变量一起切

-c 仅执行一次命令不切换用户身份

1
2
su - root
su - root -c "useradd user3"

groupadd [选项] group

groupdel 组删除

权限ACL管理

ACL是Access Control List(访问控制列表)的缩写,不过在Linux系统中,ACL用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙)。

给对应的用户或用户组增加权限,不是根据所属增加权限操作;

在原有的权限上的扩展权限

开启

在 CentOS 6.x 系统中 ACL 权限默认是开启的。

如果不确定是否开启,那么通过检查挂载选择判断是否支持。

1
2
# 先查询挂载了几个磁盘
df -h

1
2
#是查询指定分区文件系统详细信息的命令,查询挂载 / 的磁盘
dumpe2fs -h /dev/vda1

如果有此显示表示已开启了acl.

临时开启

1
2
#重新挂载跟分区,并挂载的时候加入acl权限
mount -o remount,acl /

长久开启(修改配置文件)

1
vim /etc/fstab
1
2
UUID=4b499d76-769a-40a0-93dc-4a31a59add28 /                       ext4    defaults        1 1

修改为:

1
UUID=4b499d76-769a-40a0-93dc-4a31a59add28 /                       ext4    defaults,acl        1 1

defaults 后面加acl, 然后重启服务

注意:此文件修改一定要修改正确,有可能导致无法开机

使用命令

查看acl 权限

getfacl 文件名 查看文件的acl权限

**setfacl ** [选项] 文件名

-m 设定acl权限

-x 删除指定的acl权限

-b 删除所有的acl权限

-d 设定默认的acl权限

-k 删除默认的acl权限

-R 递归设定acl权限

给用户或组设置acl权限

1
2
> setfacl -m u:xx:rx /path
> setfacl -m g:xx:rx /path

最大有效权限

设置的acl 需要和最大有效权限与操作才能生效,用来限制设置的acl的最大权限;

1
> setfacl -m m:rx 文件名

setfacl -x u:用户名 文件名 删除指定用户的acl权限

setfacl -x g:组名 文件名 删除指定组的acl权限

setfacl -b 文件名 删除文件所有的acl权限

递归acl权限

setfacl -m u:用户名:权限 -R 文件名 递归设置acl权限,设置下级的acl权限

默认acl权限 目录下的新建目录也会有acl权限

**setfacl ** -m d:u:用户名:权限 文件名 (d 可以看做default)

示例:

1
2
3
4
5
6
7
8
9
10
#添加一个用户测试acl 的用户
useradd acl_test1
#为一个目录设置权限为770
chmod 770 test
# 使用acl_test1 查看此目录显示无权限
ls test

#添加acl权限 read权限 ,为子目录也执行
setfacl -m u:acl_test1:r -R test
#再次使用acl_test1 访问此目录可以正常访问了

SUID 权限

只有二进制可执行文件可以并且有需要加此权限。

此权限是针对普通执行用户在执行对应的文件的时候临时拥有文件所有的人的权限。

比如:修改密码的命令的权限,会修改/etc/shadow 文件,而普通用户是没有此文件的修改权限的。所以passwd 命令增加了UId权限,普通用户在执行 passwd 的一瞬间 拥有了 文件所有者 root 的权限,普通用户也可以修改自己的密码了。

给文件添加suid 权限

1
chmod u+s /usr/bin/passwd

给文件去掉suid权限

1
chmod u-s /usr/bin/passwd

添加和删除就是 u+s 和u-s

注意:命令的执行者必须有对此文件的执行权限

对于比较重要的目录不要设置UID

SGID权限

和SUID 相似的权限,只是在执行的时候有所属组的权限;

给文件添加suid 权限

1
chmod g+s xxxfile

给文件去掉suid权限

1
chmod g-s xxxfile

SBIT (Sticky BIT 粘着位)

权限末尾有个t 代表拥有SBIT 权限

只对目录有效

主要的作用是控制删除文件的权限.

SBIT 对目录的作用是:当用户在该目录下创建新文件或目录时,仅有自己和 root 才有权力删除。

添加:

1
chmod o+t 目录名

删除:

1
chmod o-t 目录名

chattr 权限

通过属性的方式添加权限,此权限 对root 用户也有效

查看文件属性

lsattr 选项 文件名

-a 显示所有文件和目录

-d 若目标是目录,仅展示目录本身的属性而不是子文件的

chattr [+-=] [选项] 文件或目录名

+增进 -减去 = 等于

i 属性:不允许对文件改名删除,也不能添加和修改数据,如果对目录设置i 属性,那么只能修改目录下的文件的数据,但是不能建立和删除文件

a 属性: 如果对文件设置a 属性,那么只能在文件中增进数据,但是不能删除也不能修改数据,如果对目录设置a 属性,只能在目录中建立和修改文件

1
2
chattr +i /xx
chattr +a /xx

sudo 权限(常用)

root 的权限给普通用户执行;操作的对象是系统命令;有些命令是只有root能用的;

root 把本来只有root 用户可以执行的命令给普通用户来执行。

定义:

1
2
3
使用root 
//本质就是修改 /etc/sudoers
>visudu

  1. 对应的用户

  2. 被管理主机ip地址或网段=可使用的身份(注意这个ip 不是指的来源的ip还是访问的机器的ip)

    1
    2
    3
    4
    5
    root    ALL=(ALL)       ALL

    //%组名 被管理的主机的地址= 可使用的命令

    %wheel ALL=(ALL) NOPASSWD: ALL

在配置具体的命令的时候,如果写的命令带详细参数,那么只能指定带此参数的命令,如果没有加参数,表示可以加任意的参数

1
2
sudu -l 查看sudo 可以执行的命令
sudu xx 命令

​ 示例:给wsk 增加有root权限的vim命令(这个vim 有跟root 一样的权限,很危险)

文件系统

磁盘的命名规则 sda sdb dbc 依次递增。

一个磁盘最多分 4个主分区(包含1个拓展分区),1个扩展分区。拓展分区中再划分多个逻辑分区。

主分区 命名规则 sda1 sda2 sda3 逻辑分区 从sda5 ,sda6…. 1-4 只能主分区使用

linux 支持的文件系统

  • ext2
  • ext3
  • ext4
  • JFS2 一个字节级日志文件系统,该文件系统主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的,单个文件最大限制16TB,该文件系统最大支持1PB的容量。
  • xfs 是一个高性能的日志文件系统,而且是RHEL7中默认的文件管理系统,优势就是在于发生意外可以快速回复可能被破坏的文件,强大的日志功能只需要花费较低的计算和存储性能,最大支持存储容量18EB,几乎满足多种需求

centos 6.x 使用ext4 centos7.x 使用xfs

查看磁盘信息

df [选项] [挂载点] 查看文件系统命令

选项:

-a 显示所有的文件系统信息,包括特殊文件系统,如

/proc、/sysfs

-h 使用习惯单位显示容量,如KB,MB或GB等

-T 显示文件系统类型

-m 以MB为单位显示容量

-k 以KB为单位显示容量。默认就是以KB为单位

1
df -h

du [选项] [目录或文件名] 统计目录下的文件占用大小

选项:

-a 显示每个子文件的磁盘占用量。默认只统计

子目录的磁盘占用量

-h 使用习惯单位显示磁盘占用量,如KB,MB

或GB等

-s 统计总占用量,而不列出子目录和子文件的

占用量

1
du -h -s /

注意:du 统计的文件占用大小可能比 df 统计的占用小,因为df 会统计被命令和程序占用的空间。du 只统计文件或目录占用的空间

dumpe2fs 分区设备文件名 文件系统的超级块和块组信息(CentOs 6)

1
dumpe2fs  /dev/sda1

centos6时用 dumpe2fs 命令,在 centos7时 用 xfs_growfs来查看文件系统信息

fsck [选项] 分区设备文件名 文件系统修复命令(不常用)

选项:

-a:不用显示用户提示,自动修复文件系统

-y:自动修复。和-a作用一致,不过有些文件系统只支

持-y

挂载

mount [-l] 查看当前的磁盘挂载信息

mount –a 执行自动挂载,磁盘挂载的配置文件是 /etc/fstab ,执行此命令会根据此配置文件自动挂载

mount [-t 文件系统] [-L 卷标名] \

[-o 特殊选项] 设备文件名 挂载点

选项:

-t 文件系统:加入文件系统类型来指定挂载的类型,可

以ext3、ext4

、iso9660等文件系统

-L 卷标名:

挂载指定卷标的分区,而不是安装设

备文件名挂载

-o 特殊选项:可以指定挂载的额外选项

​ atime/noatime 更新访问时间/不更新访问时间。(访问分区文件时,是否更新文件)

​ async/sync 异步/同步,默认为异步,指对磁盘的操作。

​ auto/noauto mount -a 的时候是否会自动挂载

​ defaults 定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项

 exec/noexec执行/不执行,默认可以执行,如果选择不执行,磁盘内的文件无法执行(即使你是root)

​ remount 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限

 rw/ro      读写/只读,文件系统挂载时,是否具有读写权限,默认是rw

​ suid/nosuid 是由能使用suid权限

​ user/nouser 普通用户是否可挂载

​ usrquota 写入代表文件系统支持用户磁盘配额,默认不支持

​ grpquota 写入代表文件系统支持组磁盘配额,默认不支持

​ acl 是否有acl权限

挂载就是将新加入的磁盘分片一个盘符和系统中指定一个挂载的位置。

通过特殊选项可以对磁盘增加一些限制。

1
2
#重新挂载添加acl权限
mount -o remount,acl /dev/mapper/centos-root

挂载光盘

1
2
# 注意光盘的挂载格式
mount -t iso9660 /dev/cdrom /mnt/cdrom/

挂载U盘

1
2
# 查看未挂载的设备
fdisk –l
1
2
#u盘使用vfat 格式  指定中文编码格式为UTF-8
mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/

Linux 默认不支持NTFS文件系统,需要安装 NTFS-3G 插件使LINUX 支持ntfs ,或者就得将ntfs的驱动编译到内核中

卸载

1
unmount /xx

执行分区

  1. 查看新硬盘
1
fdisk -l

可以看到sdb是一个新的未分区的磁盘

  1. 执行分区
1
fdisk /dev/sdb

进入到交互选项模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a 设置可引导标记
b 编辑bsd磁盘标签
c 设置DOS操作系统兼容标记
d 删除一个分区
l 显示已知的文件系统类型。82为Linux swap分区,83为Linux分区
m 显示帮助菜单
n 新建分区
o 建立空白DOS分区表
p 显示分区列表
q 不保存退出
s 新建空白SUN磁盘标签
t 改变一个分区的系统ID
u 改变显示记录单位
v 验证分区表
w 保存退出
  1. 执行新建

    1
    n

  2. 选择拓展分区(只有先创建了拓展分区才能选择创建逻辑分区)

分区号,模式.

增加5G

1
p 现在目前的分区情况

  1. 最终分完后 保存退出

  2. partprobe partprobe则可以使kernel重新读取分区 信息,从而避免重启系统

    1
    partprobe  
  3. 格式化分区,指定分区的文件格式

1
mkfs -t ext4 /dev/sdb1

​ 8. 创建目录,执行挂载

1
2
mkdir /file1
mount /dev/sdb1 /file1

基本步骤就是 n 创建新分区,选择分区号,选择从那个位置开启,选择大小 +xxG 或全部, 逻辑分区是从创建的扩展分区内部再进行划分.

分区完成后格式化然后挂载.

挂载文件 fstab

在文件系统挂载的一个相关的配置文件是 /etc/fstab 文件

显示了一条一条的挂载记录,每个列分别代表的含义是

  • 分区设备文件名或UUID

  • 挂载点

  • 文件系统名称

  • 挂载参数

  • 指定分区是否被dump备份,0代表不备份,1

    代表每天备份,2代表不定期备份

  • 指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高

此文件的作用是当系统启动的时候根据此文件的挂载信息将外部磁盘挂载到系统中。

仅仅 **手动mount 执行的挂载 ** 重启后就会失效。

普通挂载

  1. 编辑 /etc/fstab
1
vim /etc/fstab

​ 2. 添加一个挂载记录

1
2
3
/dev/sdb1 /file1  ext4 defaults 0 0


  1. 执行一次自动挂载(为了检查写入的文件格式是否正确,无报错就可以)
1
mount -a

注意:fstab 文件如果有错误可能导致系统无法启动,如果是 非root 分区导致的错误,那么启动报错的时候通过重新挂载 mount -o remount,rw / 还能对fstab 文件修改,如果是系统启动相关的分区错误,就办法修复了。

swap 挂载

1
free -h

查看到内存使用和可用空间,还有swap分区占用空间。

Swap分区,即交换区,系统在物理内存(这里应该是运行内存)不够时,与Swap进行交换。

假设要扩充swap分区.

  1. 对一个分区格式化成swap分区

    1
    2
    mkswap /dev/sdb7

  2. 临时操作加入swap分区

#加入

1
swapon  /dev/sdb7

#退出swap分区

1
swapoff  /dev/sdb7

  1. 添加fstab 文件,swap分区自动挂载

    1
    /dev/sdb7 swap swap defaults 0 0

系统和服务管理

服务管理

CentOS 6.x

服务管理
service 服务名 start | stop | restart | status 开启/停止/重启/状态

服务自启

chkconfig 服务名 off | on | -list 关闭自启/开启自启/自启列表

服务文件所在目录 /etc/init.d

CentOS 7.x

服务管理
systemctl start | stop | restart | status 服务名 开启/停止/重启/状态

服务自启

systemctl enable | disable | list-unit-files 服务名 禁用自启/启用自启/自启列表

服务文件所在目录 /usr/lib/systemd/system

系统进程

ps [选项] 查看系统中进程

a 列出带有终端的所有用户的进程
x 列出当前用户的所有进程,包括没有终端的进程
u 面向用户友好的显示风格
-e 列出所有进程
-u 列出某个用户关联的所有进程
-f 显示完整格式的进程列表

显示系统中进程的上下级进程id

1
ps -ef 

查询系统中的进程信息

1
ps axu

kill [选项] 进程号码 杀死进程

-9 强制杀死

强制杀死某个进程号的进程

1
kill -9 432434 

killall 进程名称/通配符名称 根据进程名称杀死,可以使用通配符

杀死一些tomcat进程

1
killall  tomcat*

pstree [选项] 显示进程树
-p 显示pid
-u 显示用户

1
pstree -pu

top 查看系统实时状态
-d 秒数,指定几秒更新显示状态,默认是3秒
-i 不显示闲置的进程
-p 监控指定进程id的状态

进入到top中可执行一些操作。

  • P cpu使用率排序
  • M 内存使用率排序
  • N pid排序

网络占用

netstat [选项]

-a 显示所有正在监听(listen)和未监听的套接字(socket)
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出在监听的服务状态
-p 表示显示哪个进程在调用
-t tcp
-u udp

查看端口号是否被占用

1
netstat -nltp | grep 8080

查看某个进程的网络信息

1
netstat -anp | grep  sshd