尚硅谷 Linux系统管理教程 笔记

目录

Linux简介

Unix主要发行版

操作系统 公司 硬件平台
AIX IBM PowerPC
UX HP PA-RISC
Solaris SUN SPARC
Linux,BSD IA(Intel、AMD…)

常用开源软件

  • Web服务器:Apach/Nginx
  • 数据库:MySQL/SQLserver/Oracle/MongoDB
  • 脚本语言:PHP/Ruby/Python
  • 文件服务器:Samba

支撑互联网的开源技术:LAMP(Linux,Apach,MySQL,PHP)

Linux的安装

虚拟机配置

  • CentOS 6 安装最小内存是628MB,实际运行还可以更小,选择1024M
  • 硬盘选择20G
  • 处理器数量不超过线程数
  • 网络配置
    • 桥接:连接了本地真实网卡,可以连接到本机,局域网,公网。注意要手动设置桥接到那块网卡
    • NAT:连接到虚拟网卡,可以连接本机和公网
    • 主机模式:连接到虚拟网卡,可以连接本机

虚拟机快照

可以理解为是游戏存档,可用于系统的快速恢复,系统克隆

系统分区

为了读取数据方便,我们将硬盘逻辑上的进行了分区

分区的形式
  • MBR分区表:主引导记录分区表,最古老的,最大支持2.1T硬盘,最多支持4分区
  • GPT分区表:全局唯一标识分区表,最大9.4ZB,无分区限制
分区类型
  • 主分区:最多四个
  • 扩展分区
    • 最多一个
    • 主+扩最多四个
    • 不能写入数据,只能包括逻辑分区
  • 逻辑分区

这里的最多4个指的是MBR分区表

在使用MBR的时候最多4个分区可能不能满足我们使用,所以可以使用扩展分区,但是两者加起来不得超过4个,扩展分区不能写入数据,可以在里面放逻辑分区

分区格式化

格式化又叫逻辑格式化,目的是用于写入文件系统,在磁盘特定区域划出一片用于存放文件分配表,目录表等用于文件管理的磁盘空间,Windows下常见的文件系统有FAT16,FAT32,NTFS,Linux下常见的有EXT2,EXT3,EXT4

格式化会将分区划成两部分

  • 一部分用来存数据,这部分会将硬盘划成等大的数据块(默认4KB),一个数据块如果没有写满也不能存别的数据
  • 一部分用来索引,将这个索引叫做inode,一个inode为128B,存放文件的位置,时间,权限
设备文件名

Linux下所有设备都有文件名,其中

  • /dev/hda1:IDE硬盘接口
  • /dev/sda1:SCSI/STAT接口

其中前两个字母(例如:sd)表示设备类型,之后的字母与数字(例如sda1的a1)表示这个类型的第几块硬盘的第几号分区,注意是第几号分区,例如有两种分区方式

  1. 三个主分区,分别是sda1-sda3,一个扩展分区是sda4,扩展分区有两个逻辑分区发表是sda5,sda6
  2. 一个主分区是sda1,一个扩展分区是sda2,扩展分区有两个逻辑分区发表是sda5,sda6

注意sda1-sda4永远是主分区或者扩展分区的,逻辑分区一定是sda5+

挂载点

使用已经存在的空目录作为挂载点

  • 必须分区

    • / (根分区)
    • swap分区(交换分区,允许你不分,但是强烈建议)
      • 实际内存小于4G应该是2倍
      • 实际内存大于4G应该与实际一致
      • 实验用虚拟机不大于2G
  • 推荐分区

    • /boot (启动分区 1G 强烈建议)

      当系统启动的时候,系统会临时释放很小一点文件用于启动,如果硬盘写满,这点空间都没有就无法启动,于是单独开一个boot用于启动

  • 常用分区

    • /home 常用于文件服务器
    • /www 常用于Web服务器

挂载点的位置随意,但是/bin,/lib,/etc必须和/在同目录

Linux的安装

关于ISO文件中的"dvd1"

虚拟机开机之后会选择第一个安装,之后出现蓝窗口,问你找到硬盘,要不要检测里面有什么,选跳过,检测很慢,之后可能报错,说显卡有问题,此时重启或者换镜像

语言选择简体中文,这里的选择语言不仅仅是安装过程的语言,而是安装的系统的,不选中文就没有中文的编码与字体包

然后选择基本存储,主机名需要修改,否则整个集群都是一个名字,暂时不要修改

选择创建自定义分区

选择空闲-标准分区-挂载点:/home-大小2048M-固定大小-不加密,同理创建

  • /boot 200M boot必须是启动分区,有他必须是sda1,不能是sda2
  • / 15G

创建交换分区:文件系统类型为swap不需要挂载点

真实的服务器选minimal,此时为了学习选择BasicServer

之后会自动安装

SSH连接

若是VirtualBox则务必设置为NAT端口转发,在高级中选择端口转发添加规则,客户机端口为22,主机端口选择不用的

开机后ifconfig看看有没有检测到非lo的网卡,没有的话

ip a					# 查看新网卡
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth0			# eth0换成新网卡
# 将ONBOOT改为yes
service network restart # 重启网络服务

之后在主机上进行ssh连接,linux

ssh -l [CentOsUsername] -p 1111 127.0.0.1 # 将1111替换为当时端口转发的主机端口

windows直接远程工具

初学注意事项

与WIndwos的区别

  • Linux严格区分大小写,没有大写命令,命令的选项有大写
  • Linux一切皆文件,硬件也是文件,永久保存的配置必须写入文件
  • Linux不靠扩展名区分文件类型,靠权限标识识别文件类型,但是部分特殊文件还是要求写扩展名以区分类型,有
    • 压缩包:如果压缩包没有扩展名管理员不知道用哪个命令去解压缩压缩包
    • 二进制软件包:redhat下软件包用.rpm,debian下一般是.deb
    • 程序文本:shell的.sh
    • 网页文件:.htlp,.php…是网页服务器要求的
  • 所有的存储设备必须挂载后使用

Linux服务器管理

Linux的目录结构
目录名 作用
/bin/ 存放系统命令的目录,所有用户都可以执行,是/usr/bin/的软链接
/sbin/ 存放系统命令的目录,root可以执行,是/usr/sbin/的软链接
/usr/bin/ 存放系统命令的目录,所有用户都可以执行
/usr/sbin/ 存放系统命令的目录,root可以执行
/boot/ 系统启动目录。存放与启动相关文件如内核与启动引导(grub)等文件
/dev/ 设备文件保存位置(例如分区)
/etc/ 保存配置文件(默认安装的程序的配置文件)
/home/ 普通用户的家目录
/root/ root用户的家目录
/lib/ 系统的函数库(频繁调用的程序库,例如C的iostream)
/lib64/ 系统的64位函数库(只要看到.so.数字的都是函数库)
/lost+find/ 当系统意外关机之后产生的碎片文件,再次开机如果可以恢复系统会自动恢复
/media/ 空目录,事先准备的挂载点,一般用于挂光盘
/misc/ 空目录,事先准备的挂载点,一般用于挂网络设备
/mnt/ 空目录,事先准备的挂载点,一般用于挂硬盘
/opt/ 软件安装位置(用的少,还是习惯在/usr/local)
/proc/ 不是硬盘的挂载点,里面挂载的是内存
/sys/ 不是硬盘的挂载点,里面挂载的是内存
/net/ 不是硬盘的挂载点,里面挂载的是内存
/selinux/ linux的增强安全组件,用来限制root
/usr/ Unix Software Resource系统软件资源目录的缩写,存放系统资源文件的目录
/var/ 存放动态数据的目录
/tmp/ 临时文件
/usr/lib/ 应用程序调用函数库保存位置,和/lib/的不一样
/usr/local/ 程序安装位置
/usr/share/ 资源文件保存位置,例如文档,说明文档,字体目录
/usr/src/ 源码包保存位置,不过一般是放内核源码,建议三方的源码一般放/usr/local/src,内核放在/usr/src/kernels
/usr/src/kernels/ 建议将内核源码放这里
/var/log/ 系统日至目录
/var/lib/ 程序运行时数据保存目录
/var/lib/mysql/ MySQL数据库保存位置
/var/www/html/ 默认的apach网页目录
/var/run/ 服务启动后他们的PID的保存位置,是/run/的软链接
/var/spool/ 放置队列数据的目录,例如邮件队列与打印队列
/var/spool/mail/ 邮件队列,收到的邮件会保存在此处
/var/spool/cron/ 系统定时任务队列的存储位置
  • 有bin的是二进制命令文件是所有人都能执行的,sbin是管理员执行的,bin与/usr/bin目前几乎没有区别

  • *.so.数字的文件是Linux的重要函数库

  • Linux准备了三个点挂载,但是习惯于用/mnt/

远程服务器注意事项
  • 服务器只能重启不能关机
  • 重启之前要终止正在执行的任务
  • 重启建议选用shutdown -r now并且在重启前多次执行sync命令,他可以将内存中的数据同步在硬盘上
  • 不在访问 高峰进行高负载命令
  • 配置防火墙的时候不要把自己踢出服务器,有个笨办法是在每次配置防火墙之前开定时人物没10min删除防火墙配置,确认配置没问题之后再关闭定时人物

常用命令

命令的基本格式

  1. 命令提示符

    [root@bogon ~]# 
    

    第一部分是登陆的用户,例如目前是root,@是分隔符无意义,bogon是当前系统的简写主机名,~是当前的路径,之后是命令提示符#$,#表示是root用户,$表示是普通用户

  2. 命令的基本格式

    命令 [选项] [参数]
    

    []表示可选,选项用于调整命令的功能,参数用来指定操作对象,不写就执行默认参数,例如ls -l表示长格式输出

  3. ls -l的输出解释

    [root@bogon ~]# ls -l
    总用量 44
    -rw-------. 1 root root  1284 122 20:31 anaconda-ks.cfg
    -rw-r--r--. 1 root root 28250 122 20:31 install.log
    -rw-r--r--. 1 root root  7572 122 20:30 install.log.syslog
    
    • 第一列表示权限
    • 第二列是引用计数,对于文件表示有多少硬链接的个数,对文件夹表示有多少个一级子目录
    • 第三列表示文件所有者
    • 第四列表示文件所属组,分配所有者与所属组是为了方便赋权限
    • 第五列文件字节(默认Byte)
    • 第六列是文件修改/访问时间
  4. ls的其他选项

    • -h 以易于阅读的格式输出文件大小,例如KB
    • -a 显示隐藏文件
    • -d 显示目录本身而不是子文件ls /ls -d /
    • -i 显示文件inode节点号
  5. 隐藏文件的作用:告诉你不要动而不是想藏起来

  6. Linux中绝大部分选项没有先后顺序,例如ls -alls -la

目录操作命令

  1. ls命令

  2. cd命令

    用于切换所在的目录,注意区分绝对与相对路径,Linux中特殊路径符号有:~家目录-上次所在目录.当前目录..上一级目录

    pwd显示当前目录

    cd可以直接回到家目录

  3. mkdir命令

    • mkdir tmp建立目录tmp
    • mkdir -p ./1/2/3 使用-p选项递归建立目录
  4. rmdir命令

    • rmdir只能删除空目录,所以不推荐使用
  5. rm命令

    • rm删除文件(夹)
    • -r递归删除
    • -f不提示是否确认,强制删除
    • 防止误删除建议安装extundelete

文件操作命令

  1. touch命令

    • 用于创建新文件或者修改文件时间,也就是没有就创建,有就修改文件时间
    • touch 文件名就创建了文件
  2. stat命令

    • 查看文件的基本信息,结果如下

      [root@localhost ~]# stat abc
        File: "abc"
        Size: 0               Blocks: 0          IO Block: 4096   普通空文件
      Device: 802h/2050d      Inode: 393882      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2021-01-26 22:13:51.117999672 +0800
      Modify: 2021-01-26 22:13:51.117999672 +0800
      Change: 2021-01-26 22:13:51.117999672 +0800
      

      分别是文件名,大小,占用块,每个块的大小,硬件设备标识号,inode,硬链接数目,权限,所有者ID,所属组ID,访问时间,修改时间,状态修改时间(修改权限的时间)

  3. cat命令

    • 查看文件内容
    • -n查看行号
    • -v列出特殊字符(例如\n显示为$)
    • -A显示所有的特殊字符
    • cat会输出所有内容,但是终端最大行数有限,不建议使用
  4. more命令

    • 分屏显示文件内容
    • 空格向下翻页
    • /字符串向下搜索字符串
    • b向上翻页
    • 回车向下一行
    • q 推出
  5. less命令

    • 分行显示文件内容
    • 上下键上下显示
  6. head命令

    • 显示文件头几行
    • -数字显示文件头几行,不写是10行
  7. tail命令

    • 显示文件头几行

    • -数字显示文件头几行,不写是10行

    • -f监听文件变化,即当有程序向后面追加内容是自动显示变化,使用ctrl+C退出

  8. ln命令

    • ln filename ./it/is/path/实现在./it/is/path/下创建filename的链接
    • -s创建软链接,不写默认硬链接
  9. 软链接与硬链接

我们知道block块放的是文件的内容,inode指向了文件的block地址,但是文件名不知道在那里,实际上文件名存在了他的父文件夹的block中,父文件夹的block里面有个文件名-inode的表,就是说查找文件的时候实际上是去文件夹的block中查找,按照这个说法/的文件名-inode映射没地方存了,实际上/的inode是固定的,是2(1在启动的时候被占用了)

创建硬链接后可以看到

18 -rw-rw-r--. 2 liukairui liukairui 0 129 22:25 bcd
18 -rw-rw-r--. 2 liukairui liukairui 0 129 22:25 ./bcd_h

两个文件的inode号相同,引用系数变为2,删除原文件/硬链接之后另一个文件正常存在,原因是硬链接与原文件同inode,删除文件只是删除了父文件夹的文件名-inode的一个映射,但是另一个映射不变

[liukairui@10 ~]$ rm ./bcd
[liukairui@10 ~]$ ls -ild  ./bcd_h 
18 -rw-rw-r--. 1 liukairui liukairui 3 129 22:30 ./bcd_h

注意的是,不推荐使用硬链接,因为

  • 系统不会明显的标注一个链接是硬链接,只能通过同inode与应用系数增加判断是硬链接

  • 普通用户不能硬链接目录,见

    [liukairui@10 ~]$ ln -db --help
    	-d, -F, --directory           创建指向目录的硬链接(只适用于超级用户)
    

    如果引入了对目录的硬连接就有可能在目录中引入循环,那么在目录遍历的时候系统就会陷入无限循环当中。也许您会说,符号连接不也可以引入循环吗,那么为什么不限制目录的符号连接呢?原因就在于在linux系统中,每个文件(目录也是文件)都对应着一个inode结构,其中inode数据结构中包含了文件类型(目录,普通文件,符号连接文件等等)的信息,也就是说操作系统在遍历目录时可以判断出符号连接,既然可以判断出符号连接当然就可以采取一些措施来防范进入过大的循环了,系统在连续遇到8个符号连接后就停止遍历,这就是为什么对目录符号连接不会进入死循环的原因了。但是对于硬连接,由于操作系统中采用的数据结构和算法限制,目前是不能防范这种死循环的。

    在说明第二个原因之前,我们先来看看文件的dentry结构在系统空间中长什么样子和它们是怎么存放在系统空间的。dentry结构主要包含了文件名,文件的inode 号,指向父目录dentry结构的指针和其他一些与本次讨论无关的指针,这里关键是那个指向父目录的指针;系统中所有的dentry结构都是按杂凑值存放在杂凑表中的,这里的杂凑算法很重要,它是取文件名和文件的父目录dentry结构的地址一起杂凑运算出杂凑值的。现在我们假设有两个目录 /a和/b,其中/b是我们通过ln -d命令建立起来的对/a的硬连接。这个时候内核空间中就会存在一个/a的dentry结构和一个/b的dentry结构,由上面的知识可知,/a和/b 目录下面的每一个文件或目录都各自有对应的dentry结构(因为虽然/a目录下面的文件名没有改变,但是因为dentry结构有指向父目录dentry 的指针和计算杂凑值时考虑了父目录dentry结构的地址,这个时候dentry结构就分身乏术了),而且这种继承还会影响到所有子目录下面的文件,这样下来就会浪费很多系统空间了,特别是如果被硬连接的目录中存在大量文件和子目录的时候就更加明显了。

  • 只能同分区链接

软链接完全可以理解为windows下的快捷方式

  • 删除原文件快捷方式就没了

  • 在ls软链接的时候会提示原文件位置,例如

    [liukairui@10 ~]$ ln -s bcd bcd_s
    [liukairui@10 ~]$ ls -ild bcd bcd_s
    18 -rw-rw-r--. 1 liukairui liukairui 0 129 22:49 bcd
    19 lrwxrwxrwx. 1 liukairui liukairui 3 129 22:49 bcd_s -> bcd
    

    删除原文件之后重新ls会发现bcd链接地址变成黑底白字闪烁

  • 软链接的权限是最大的例如上面的19 lrwxrwxrwx.,意思是所有人可以访问软链接但是软链接没数据还要访问原文件,权限还要看原文件

  • 软链接一定要写绝对路径,否则出去或者拷贝软链接就找不到了

文件与目录命令

  • rm命令

    • 删除文件或者目录
    • -f强制删除
    • -r递归删除,目录操作使用
    • -i交互删除,在删除之前会询问用户(默认就是交互删除)
  • cp命令

    • cp 原文件 新文件的路径在路径下复制同名新文件
    • cp 原文件 新文件的路径/新文件名在路径下复制改名新文件
    • -r 复制目录使用
    • -a相当于-dpr目标与原文件一模一样,包括修改时间等
    • -i覆盖同名文件
  • mv命令

    • 移动文件/重命名

    • -f强制覆盖

    • -i交互移动,默认就是交互

    • -v显示详细信息,例如

      [liukairui@10 ~]$ mv -v ./cp1 ./cp2
      "./cp1" -> "./cp2"
      

权限命令

Linux的基本权限

ls -l之后会看到文件的权限,形如:-rw-rw-r--.

  • 第一位表示文件类型

    • -表示普通文件
    • d表示目录文件(目录也是文件)
    • l表示软链接
    • b表示块设备文件,例如/dev/sda
    • c表示字符设备,例如键盘
    • p管道符文件
    • s套接字文件,一些服务支持socket访问会产生这样的文件
  • 第2-4位表示文件所有者u的权限

    • r表示有读权限
    • w表示有写权限
    • x表示有执行权限
  • 第5-7位表示文件所属组g的权限

  • 第9-10位表示文件其他人x的权限

  • 最后的.表示这个文件是被SELinux管理(保护)的

权限基本命令
  • chmod命令

    • 修改文件的权限模式
    • chmod [选项] 权限 文件名
      • 权限可以写+/-,写u+x表示为u(所有者)添加x(执行)权限
      • 权限可以用,连,写u+x,g-x表示为u(所有者)添加x(执行)权限,同时为所属组去掉执行权限
      • 权限可以用数字表示,r=4,w=2,x=1直接把需要的加起来就可以了,例如755表示rwxr-xr-x,常见的数字权限有755文件的执行权限与目录的基本权限644文件的基本权限777最大权限,实际生产中不得赋予
    • -R递归设置,给子目录文件设置
  • chown命令

    • 修改所有者与所属组
    • chown 新所有者 文件
    • chown 新所有者:新所属组 文件
  • chgrp命令

    • 修改所属组
    • chgrp 新所属组 文件
  • 普通用户可以修改自己所有/所属文件权限,但是不能修改任何文件的所有者/所属组

权限的基本作用

权限对文件的作用

  • r:一旦文件具有的读权限就可以读取数据,例如cat,more,less,head,tail等命令
  • w:一旦文件具有写权限就可以修改文件内容使用例如vim,echo >>写入,拥有w权限并不能删除文件,想要删除文件必须获得文件父文件夹的w权限
  • x:代表文件有执行的权限,但是到底能不能正确执行或者能不能执行还要看文件本身

权限对目录的作用

  • r:可以读目录,即可以ls
  • w:可以修改目录下的数据例如touchrmcpmv等等,这是目录的最高权限
  • x:目录不能执行,目录拥有x权限就可以对目录进行cd,进入目录
  • 当然如果是rw-这样没有x不能进去根本没有用,所以目录至少有x
umask默认权限

当一个文件新建的时候,会有一个默认的权限,这个权限就是从umask权限获取的,Linux是通过umask得到的一个文件的默认权限,使用umask可以获取到系统的umask值。

  • 对于系统说文件的默认最大权限是666(系统认为x是危险的,想要作为执行文件必须后期修改),文件夹是777
  • 系统计算权限的方法是进行二进制的与非运算,对于手算可以采用先换成字母然后减去,例如umask是033,创建文件的时候默认是666是rw-rw-rw-减去033是----wx-wx就成了rw-r–r--

可以修改/etc/profile修改umask,这个文件是Linux环境变量

帮助命令

  • man命令

    • man 指令

    • 可以使用上下箭头,PgUp/PgDn翻页,g移动到第一页,G文件尾,q退出,/查找,?反向搜索,n/N前后一个

    • 帮助是有级别的,可以在man的左上角看到,其中

      • 1级别表示普通用户可以执行的命令的帮助
      • 2级别表示内核调用函数的帮助
      • 3级别表示C语言的函数和工具的帮助
      • 4级别表示设备和特殊文件的帮助
      • 5级别表示配置文件的帮助
      • 6级别表示游戏的帮助
      • 7级别表示杂项的帮助
      • 8级别表示root可以执行命令的帮助
      • 9级别表示内核的帮助

      可以使用whatis 命令/man -f 命令查询命令的所有帮助,例如

      [liukairui@10 ~]$ whatis passwd
      passwd               (1)  - update user's authentication tokens
      passwd               (5)  - password file
      passwd [sslpasswd]   (1ssl)  - compute password hashes
      

      可以使用man 级别 命令打开对应级别的命令,例如man 5 passwd

      如果whatis不能用可以执行makewhatis来重建whatis

    • -k查询所有带有指定关键字的命令

  • info命令

    • info 指令
    • info是一本书,每个命令是一节,其中命令的某些内容又是一个小节,可以用
      • 可以使用上下箭头,PgUp/PgDn翻页
      • 在前有*的一行回车进入小节
      • tab在小节之间切换
      • u进入父小节
      • n/p进入下一小节/上一小节
      • ?显示帮助
      • q退出
  • help命令

    • 获取shell内置指令的帮助
  • --help选项

    • 大多数指令 --help可以获取简明帮助

搜索命令

  • whereis命令

    • 直接加命令的名字,只能搜索系统命令,不能搜索文件
    • 显示命令的源文件与帮助文件的位置
  • which命令

    • 查找系统命令的时候如果有别名也可以查到,例如
    [liukairui@10 ~]$ whereis ls
    ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
    [liukairui@10 ~]$ which ls
    alias ls='ls --color=auto'
            /bin/ls
    

    whereis会提示ls的位置在/bin/ls帮助文档在usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz

    which提示ls是'ls --color=auto'的别名,可以使用alias查询所有别名

  • locate命令

    • 可以直接加 文件名搜索普通文件

    • 他是按照数据库搜索的所以速度快,消耗小,数据库位置在/var/lib/mlocate/mlocate.db

    • 但是只能按照文件名搜索不能做按照权限、大小、时间等搜索

    • 由于他是按照数据库搜索的,所以新建的文件在升级数据库之间是找不到的,可以使用命令updatedb升级数据库

    • 有的时候发现updatedb之后还是搜索不到,这是因为locate配置文件的问题,可以编辑/etc/updatedb.config

      PRUNE_BIND_MOUNTS = "yes"			# 表示文件生效
      PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"		# 不搜索文件类型,例如光驱中的文件
      PRUNENAMES = ".git .hg .svn"		# 不搜索扩展名为这些的文件
      PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spool/cups /var/spool/squid /var/tmp"			# 不搜索这些系统目录
      
  • find命令

    • 按照文件名搜索[完全匹配],格式是find 搜索范围路径 -name 文件名

      • 按照文件名不区分大小写,格式是find 搜索范围路径 -iname 文件名
      • 按照inode搜索,格式是find 搜索范围路径 -inum inode号
    • 可以按照文件大小搜索,格式是find 范围 -size [+/-]大小其中±分别表示大于或者小于,不写就是等于,大小要写单位,KB是kMB是M,注意大小写,可以看find的帮助文档

      -size n[cwbkMG]File  uses n units of space, rounding up.  The following suffixes can be
          used:
      
          `b'    for 512-byte blocks (this is the default if no suffix is used)
          单位b表示是512字节,也就是说1b代表512Byte,b是默认呢单位
          `c'    for bytes
          单位c表示是字节Byte
          `w'    for two-byte words
      	单位w是2Byte
          `k'    for kibibytes (KiB, units of 1024 bytes)
          单位k是1024Byte注意小写
          `M'    for mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes)
          单位M是大写
          `G'    for gibibytes (GiB, units of 1024 *  1024  *  1024  =  1073741824bytes)
          单位G是大写
      
    • 可以按照文件修改时间搜索,格式是find 范围 -标签 [+-]时间

      • -atime是按照文件访问时间搜索
      • -mtime是按照文件数据修改时间搜索
      • -ctime是按照文件状态修改时间搜索
      • 3,-3,+3代表第五天前修改,3天内修改,4天前修改的
    • 按照文件权限搜索

      • find 范围 -perm xxx查找权限恰好为那几个数字的文件
      • find 范围 -perm +xxx查找文件的三个权限中有任何一个权限比给出的大,例如666可以查到700文件
      • find 范围 -perm -xxx查找文件的三个权限都比给出的大,例如666不能查到700文件
    • 按照文件的所有者/所属组查询

      • find 路径 [选项] 内容,选项有
      • -uid按照用户ID查询
      • -gid按照用户组ID查询
      • -user按照用户名查询
      • -group按照用户组名查询
      • -nouser查询没有所有者的文件,只有一种情况没有所有者,当文件来自windows
    • 按照文件类型搜索

      • find 路径 -type d/f/l分别表示目录,普通文件,软链接
    • 逻辑运算符

      • -a 与运算
      • -o或运算
      • -not非运算

      例如搜索大于1K的文件夹就是

      find ./ -size +1k -a -type d
      
    • -exec {} \;选项

      • 将find的结果作为参数执行到吓一个目录
      • find ... -exec 新命令 {} \;格式
      • find ./ -size +1k -exec ls -alh {} \;就是将find查询到的大于1k的结果放在ls的大括号里面执行,相当于ls了所有大于1k的文件,此时第二个目录不能使用别名
    • -ok {} \;选项

      • 与-exec相同,但是在每执行一个文件的时候都会询问是否执行
  • grep命令

    • grep [选项] 搜索内容 搜索文件
    • -i忽略大小写
    • -n输出行号
    • -v反向查找
    • --color=auto搜索出的关键字用颜色标注
  • find命令是完全匹配,如需模糊匹配需要使用通配符

    grub是包含匹配。如果需要模糊匹配需要使用正则表达式

    当对文件名使用通配符的时候最好使用双引号包起来

  • 通配符表

通配符 作用
? 匹配任意一个字符
* 匹配任意多个(也可以是0个)字符
[] 匹配[]中的任意一个字符
[-] 匹配[]中的任意一个字符,其中-代表范围,例如[a-z]
[^] 表示匹配不是[^]包裹的字符
  • 正则表达式

    正则符 作用
    ? 匹配前一个字符0/1次
    * 匹配前一个字符0/任意多次
    [] 匹配[]中的任意一个字符
    [-] 匹配[]中的任意一个字符,其中-代表范围,例如[a-z]
    [ ^ ] 匹配不是[^]包裹的字符
    ^ 匹配行首
    $ 匹配行尾

    其中?不属于标准正则而是扩展正则,需要使用egrep匹配

管道符

  • 格式:命令1 | 命令2
  • 命令1的输出作为命令2的操作对象

别名与快捷命令

别名是就是为命令创建小名方便使用

  • 可以使用alias查看当前的所有别名
  • 使用alias 别名="原命令"的方式临时定义别名,但是别名的优先级高于系统指令所以如果别名和原命令同名就会优先执行别名,原命令就无法执行了
  • 可以修改环境变量自定义别名,但是别名应该是一个人的习惯而不是所有人的,所以应该设置为某用户的环境变量,修改~/.bashrc即可

Bash下的常用快捷键有

快捷键 作用
Tab 补全命令/文件
Ctrl+A 将光标移动到命令的开头
Ctrl+E 将光标移动到命令的末尾
Ctrl+C 强制结束命令
Ctrl+L 清屏
Ctrl+U 剪切光标之前的命令
Ctrl+Y 粘贴Ctrl+U的命令

压缩与解压命令

压缩文件有很多种,不同的压缩方式有不同的命令

  • zip格式
    • 压缩:zip 目标压缩包.zip 原文件1 [原文件2...]
    • 解压:unzip 压缩包 [解压路径]不写解压路径默认到当前目录
    • 这个格式在linux中不常用,主要是为了兼容windows,是唯一一个可用的windows压缩格式
  • gz格式
    • 压缩:gzip 原文件1 [原文件2...]
      • 压缩会自动删除原文件,可以使用-c选项,他的原意是将压缩得到的二进制结果输出出来(实际上并不压缩),可以结合管道使用gzip -c 原文件 >> 压缩包.gz
      • -r压缩目录,注意这个选项的意思,gz是不会将目录压缩成文件,而是将这个文件夹下的所有文件(包括子目录的)全部单个压缩,即gz不会打包,例如执行gzip a b c d就会得到a.gz,b.gz,c.gz,d.gz,如果不加-rgzip会直接提示访问到一个目录直接忽略
    • 解压:gzip -d 压缩文件或者gunzip 压缩文件
  • bz2格式
    • 压缩:bzip2 [选项] 原文件
      • -k保留原文件
      • -v显示详细信息
      • 压缩命令不能打包,遇到目录直接报错
    • 解压:bzip2 -d 压缩文件
  • tar格式
    • tar是用于打包的目录,只打包不压缩
    • 打包:tar [选项] [-f 压缩包文件名] 源文件或目录
      • -c打包
      • -v显示打包过程
      • -f指定压缩包的文件名,用于给管理员识别是给打包文件
      • 一般习惯写-cvf
    • 解打包:tar -xvf 打包文件
  • tar.gz/tar.bz2格式
    • 压缩为tar.gztar -zcvf 目标文件 原文件
    • 解缩tar.gztar -zxvf 压缩文件 [-C 解压位置] [要单独解压的文件]
    • 查看tar.gztar -ztvf 压缩文件
    • 压缩为tar.bz2tar -jcvf 目标文件 原文件
    • 解缩tar.bz2tar -jxvf 压缩文件 [-C 解压位置] [要单独解压的文件]
    • 查看tar.bz2tar -jtvf 压缩文件

开关机命令

  • sync命令
    • 用于数据同步,刷新文件系统缓冲区
  • shutdown命令
    • shutdown是最安全的
    • shutdown 选项 时间
    • -r重启
    • -h关机
    • -c取消已经执行的shutdown命令
    • 时间可以选now或者7:10这样的时间
  • reboot命令
    • 重启,也是安全的
  • haltpoweroff
    • 直接关机,都不安全
  • init 0init 6
    • 关机与重启,都不安全

网络命令

  • 配置IP地址

    • 配置IP地址

      • setup目录图形化实现(redhat专有)
      • vim /etc/sysconfig/network-script/ifcfg-网卡名
    • 重启网络服务

      • service network restart

      • 如果发现某个网卡重启失败大概率是ip冲突

      • 如果换了很多ip还是提示失败大概率是因为装系统的时候使用的是克隆的方式,导致UUID冲突,解决方法是删除mac与通过mac计算uuid的规则文件,然后重启,系统就会自动重新计算UUID

        [liukairui@10 ~]$ vim /etc/sysconfig/network-scripts/ifcfg-网卡名
        # 删除 HWADDR=XX:XX:XX:XX:XX:XX 一行
        [liukairui@10 ~]$ rm -rf /etc/udev/rules.d/70-persistent-net.rules
        # 删除规则文件
        [liukairui@10 ~]$ reboot
        
  • ifconfig命令

    • 最主要的作用就是查IP,直接输入ifconfig即可

      [liukairui@10 ~]$ ifconfig
      eth0      Link encap:Ethernet  HWaddr 08:00:27:45:12:CA  
                inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
              # IP地址				  广播地址			 子网掩码
                inet6 addr: fe80::a00:27ff:fe45:12ca/64 Scope:Link
              # IPv6地址
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:1316 errors:0 dropped:0 overruns:0 frame:0
              # 接受数据包的情况
                TX packets:766 errors:0 dropped:0 overruns:0 carrier:0
              # 发送数据包的情况
                collisions:0 txqueuelen:1000 
                RX bytes:109033 (106.4 KiB)  TX bytes:136348 (133.1 KiB)
      
  • ping命令

    • ping [选项] IP通过ICMP协议进行网络探测
    • -b 广播地址对整个网段进行探测
    • -c 次数指定ping的次数
    • -s 字节数指定探测包的大小
  • netstat命令

    • 网络状态查看命令,可以看到本机的端口,也可以看到连接的客户端,centOS 7.x默认没有安装,需要使用则要安装net-snmpnet-tools

    • -tuln查询本机所有开启的端口

      [liukairui@10 ~]$ netstat -tuln
      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address     Foreign Address             State 
      tcp        0      0 0.0.0.0:40398     0.0.0.0:*                   LISTEN
      协议   接受发送数据包队列  本机IP与端口号    远程主机与端口号              状态
      
    • -tulnp查询所有开启的端口与那个服务开启了这个端口

    • -rn查询网关

  • write命令

    • Linux是多用户的,一个系统可以多账户同时登陆,可以使用write进行用户之间的交流

    • 用户登陆的时候有不同的终端,有本地文本终端是从TTY1-6 可以使用Ctrl+Alt+F1-6切换,还有图形界面TTY7,安装图形界面后按Ctrl+Alt+F7三秒切换,远程终端pts/0-255

    • write 用户名 回车之后填写要发送的内容

      [root@10 ~]# w      # 使用w查看当前的用户
       20:39:11 up 23 min,  2 users,  load average: 0.00, 0.01, 0.04
      USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
      liukairu pts/0    10.0.2.2         20:19    2:03   0.01s  0.01s -bash
      root     pts/1    10.0.2.2         20:18    0.00s  0.06s  0.00s w
      [root@10 ~]# write liukairui pts/0    # 写出用户名和登陆的终端
      hello 
      

      按ctrl+d结束发送

  • wall命令

    • 想包括自己的所有人发送消息
    • wall 内容
  • 邮件命令

    • 发邮件:mail 收件人回车输入标题,回车输入内容
    • 查邮件:mail未读邮件前显示N
    • -s指定邮件标题

系统痕迹命令

系统中有一些日志文件,为了防止用户修改,这些文件都是二进制文件无法使用编辑器打开,只能使用对应命令查询

  • w命令

    • 显示系统中目前正在登陆的用户信息,文件位于/var/run/utmp

      [root@10 ~]# w
       21:43:18 up  1:27,  2 users,  load average: 0.00, 0.01, 0.04
      # 系统时间  系统开机时间 当前用户数目			前1min 5min 15min 的平均负载,一般不超过核心数
      USER     TTY      FROM      LOGIN@   IDLE   JCPU          PCPU          WHAT
      liukairu pts/0    10.0.2.2  20:19    5.00s  0.02s         0.02s         -bash
      root     pts/1    10.0.2.2  20:18    0.00s  0.07s         0.00s         w
      登陆用户   登陆终端  登陆IP     登陆时间  闲置时间 所有进程占CPU时 当前进程占CPU时 用户当前操作
      
  • who命令

    • w效果相同但是内容简单
  • last命令

    • 查看系统所有登陆过的用户信息

      [root@10 ~]# last
      liukairu pts/0        10.0.2.2         Mon Feb  1 20:19   still logged in   
      root     pts/1        10.0.2.2         Mon Feb  1 20:18   still logged in   
      root     pts/0        10.0.2.2         Mon Feb  1 20:16 - 20:19  (00:02)    
      reboot   system boot  2.6.32-642.el6.x Mon Feb  1 20:15 - 21:53  (01:37)    
      root     pts/1        10.0.2.2         Mon Feb  1 12:14 - down   (00:17)    
      liukairu pts/0        10.0.2.2         Mon Feb  1 10:49 - 12:31  (01:41)    
      liukairu pts/0        10.0.2.2         Mon Feb  1 10:48 - 10:49  (00:00)    
      liukairu pts/0        10.0.2.2         Mon Feb  1 10:08 - 10:48  (00:40)    
      reboot   system boot  2.6.32-642.el6.x Mon Feb  1 09:51 - 12:31  (02:39)    
      
  • lastlog命令

    • 查询所有用户的最后登陆时间

      [root@10 ~]# lastlog
      用户名           端口     来自             最后登陆时间
      root             pts/1    10.0.2.2         一 21 20:18:56 +0800 2021
      bin                                        **从未登录过**
      daemon                                     **从未登录过**
      adm                                        **从未登录过**
      lp                                         **从未登录过**
      sync                                       **从未登录过**
      shutdown                                   **从未登录过**
      halt                                       **从未登录过**
      mail                                       **从未登录过**
      uucp                                       **从未登录过**
      operator                                   **从未登录过**
      games                                      **从未登录过**
      gopher                                     **从未登录过**
      ftp                                        **从未登录过**
      nobody                                     **从未登录过**
      dbus                                       **从未登录过**
      rpc                                        **从未登录过**
      vcsa                                       **从未登录过**
      abrt                                       **从未登录过**
      rpcuser                                    **从未登录过**
      nfsnobody                                  **从未登录过**
      haldaemon                                  **从未登录过**
      ntp                                        **从未登录过**
      saslauth                                   **从未登录过**
      postfix                                    **从未登录过**
      sshd                                       **从未登录过**
      tcpdump                                    **从未登录过**
      oprofile                                   **从未登录过**
      liukairui        pts/0    10.0.2.2         一 21 20:19:20 +0800 2021
      

      注意,这个命令会列出所有的最近登陆记录,可以看到只有第一个和最后一个是实际存在的用户,其余用户是不能登陆的,也不是我们创建的,叫做伪用户,用来启动特殊的服务

  • lastb查看错误的登陆记录

    [root@10 ~]# lastb
    liukairu ssh:notty    10.0.2.2         Mon Feb  1 21:58 - 21:58  (00:00)    
    liukairu ssh:notty    10.0.2.2         Mon Feb  1 21:58 - 21:58  (00:00)    
    liukairu ssh:notty    10.0.2.2         Mon Feb  1 21:58 - 21:58  (00:00)    
    
    btmp begins Mon Feb  1 21:58:12 2021
    

挂载命令

挂载是将一个存储设备的设备名与已经存在的空目录连起来的过程

  • mount挂载命令

    • mount直接使用可以查看当前所有挂载的设备

      • -l显示卷标
      • -t 文件系统指定文件系统
      • -o特殊选项,常用的就是remount来修改挂载的权限
    • mount -a检查自动挂载文件etc/farab,但是这个功能很弱

      Linux支持设备自动挂载,但是光驱等设备不建议自动挂载,否则开机找不到光盘就开不了机,配置文件在/etc/fstab系统开机就会从这个文件读取

    • 挂载一个光盘

      • 在CentOS 5.x-光盘是/dev/hdc/

        在CentOS 6.x+光盘是/dev/sr0/

        无论是什么系统,都有一个/dev/cdrom软链接到实际的光盘设备,例如

          [liukairui@10 ~]$ ll /dev/cdrom 
          lrwxrwxrwx. 1 root root 3 21 20:15 /dev/cdrom -> sr0
        
      • 挂载命令

        [root@10 liukairui]# mkdir /mnt/cdrom
        [root@10 liukairui]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
        

        其中-t iso9660表示指定挂载文件系统为iso9660背下来即可,可以省略

        但是可能会提示不识别文件系统或者找不到/dev/sr0这都是因为没放光盘

        还可能会报错mount: block device /dev/sr0 is write-protected, mounting read-only说系统想挂载光盘为读写但是挂载成了读,因为大部分光盘是只读的,所以这恰好可以认为是光盘正确挂载了

      • 卸载命令

        [root@10 cdrom]# cd ../
        [root@10 mnt]# umount /dev/sr0
        
    • 挂载U盘

      • U盘与硬盘在Linux中共享设备名sdx所以U盘的设备名是动态的,例如有3个硬盘,那么U盘就是sdd所以在挂载之前fdisk -l查看所有的U盘

      • 挂载命令

        mkdir /mnt/usb
        mount -t vfat /dev/sdb4 /mnt/usb		# U盘是FAT32的写vfat
        

        注意,进入U盘之后ls可能会出现无法现实中文,修改方式是在挂载的时候指定编码

        mount -t vfat -o iocharset=utf8 /dev/sdb4 /mnt/usb
        

        前提是Linux安装的时候选择了中文编码,同时tty支持中文

      • 卸载命令

        umount /dev/sdb4
        
  • 挂载NTFS分区

    windows下大多数使用的是NTFS分区,但是Linux不识别NTFS分区,可以通过修改实现只读

    • Linux的驱动加载顺序是

      • 系统加载必备的驱动会直接放在系统的内核中这这部分数量比较少
      • 驱动以模块的形式放在硬盘中,存放在/lib/modules/2.6.32-642.el6.x86_64/kernel/
      • 驱动可以被Linux识别,但是Linux认为不常用,默认不加载,如果需要手动安装那么需要重新编译内核,NTFS属于这个范畴
      • 部分硬件不被Linux识别,那么需要手动安装驱动,甚至是手写
    • 可以使用ntfs-3G插件手动安装,然后

      mount -t ntfs-3g /dev/sdb1 /mnt/win
      

Vim编辑器

基础内容略,见Vim笔记

windows文件中的回车会在linux中显示为^M$,Linux中的回车会显示成$可以使用dos2unixunix2dos实现相互转化

软件包安装

软件包的分类

Windows与Linux的软件是不通用的,windows的软件是经过编译的二进制exe/msi文件,Linux中有软件有源码包二进制包文件

  • 如果服务是给大量客户端使用的,建议使用源码包,因为源码包效率高
  • 如果是给本机使用的建议使用RPM包
二进制包

二进制包的分类

  • DPKG包:由Debian Linux开发的包管理机制,主要用于Debian和Ubuntu
  • RPM包:有RedHat开发的包管理系统,主要用于Fedora,CentOS,suSE

RPM包依赖

  • 树形依赖:a->b->c

  • 环形依赖:a->b->c->a

  • 模块依赖(函数库依赖),例如

    [root@10 liukairui]# mount /dev/cdrom /mnt/cdrom/
    mount: block device /dev/sr0 is write-protected, mounting read-only
    [root@10 liukairui]# cd /mnt/cdrom/Packages/
    [root@10 Packages]# rpm -ivh mysql-connector-odbc-5.1.5r1144-7.el6.x86_64.rpm 
    warning: mysql-connector-odbc-5.1.5r1144-7.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
    error: Failed dependencies:				# 错误:失败依赖性
            libodbcinst.so.2()(64bit) is needed by mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
            unixODBC is needed by mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
    

    可以看到,我们安装的是mysql-connector-odbc-5.1.5r1144-7.el6.x86_64.rpm但是报错提示的是这个包依赖于mysql-connector-odbc-5.1.5r1144-7.el6.x86_64这说明我们看反了…依赖的是libodbcinst.so.2()(64bit)可以看到他依赖的是一个.so.数字,是一个函数库,于是

    rpm -ivh libodbc<Tab>
    

    于是tab发现并没有补全,这是因为压根就没有这个软件,我们缺少的是函数库,这个函数库只是某个软件包的一个函数库,需要先安装这个软件才能带出这个软件库,但是这个软件的名字我们不知道,可以去http://rpmfind.net/查询,打开链接输入libodbcinst.so.2看到第三列是系统名字,找到我们的CentOS(如果发现一个CentOS都没有,可以刷新一下…)对应的一行,右边一列就是那个需要安装的软件包

RedHat也认为依赖难以解决于是在手动安装包的基础上开发了yum安装的方式(注意没有yum包,只有源码包或者rpm包),yum包安装软件的时候会自动链接RedHat的服务器获取依赖信息,下载依赖文件

二进制RPM包命令

RPM包的命名规则
httpd-2.2.15-53.el6.centos.x86_64.rpm 

上面是Apache的软件包,有几个部分组成

  • httpd:软件包名,注意这是软件包名/进程名,可以不叫Apach

  • 2.2.15:软件版本

  • 53:发布次数

  • e16:软件发行商。e16是RedHat发布的适合于RHEL6.x下使用

  • x86_64:适合的硬件平台,RPM包可以在不同硬件平台安装选择适合不同CPU的软件版本所以出现了有

    • i386适合386以上平台使用
    • i686适合奔腾II以上计算机安装
    • x86_6464位CPU均可安装
    • noarch没有硬件限制

    等文件名

  • rpm:扩展名,用来帮助管理员区分

以上是包全名,还有包名就是第一部分的软件包名,如果是要操作没有安装的软件包就要使用包全名与绝对路径,如果操作已经安装的软件包可以直接使用包名,系统会自动搜索rpm数据库(/var/lib/rpm)找到路径

RPM包的安装
  • 安装命令

    • rpm -ivh 包全名
    • -i安装
    • -v显示详细信息
    • -h打印#显示进度
    • --perfix=指定路径,如果不指定,软件会安装在开发者指定的安装位置,不建议修改路径,否则不易维护与卸载
    • --nodeps不检测依赖安装(但是如果不检测依赖的软件基本不能用,不建议使用)
    • --replacefiles如果安装的时候部分文件已存在就会报错,使用这个选项可以强制覆盖
    • --force强制安装,相当于--replacefiles --nodeps
    • --test测试安装,不实际安装,只是检测依赖
  • 使用RPM安装Apache

    [root@10 Packages]# rpm -ivh httpd-
    httpd-2.2.15-53.el6.centos.x86_64.rpm         httpd-manual-2.2.15-53.el6.centos.noarch.rpm
    httpd-devel-2.2.15-53.el6.centos.x86_64.rpm   httpd-tools-2.2.15-53.el6.centos.x86_64.rpm
    [root@10 Packages]# rpm -ivh httpd-2.2.15-53.el6.centos.x86_64.rpm 
    warning: httpd-2.2.15-53.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    error: Failed dependencies:
            apr-util-ldap is needed by httpd-2.2.15-53.el6.centos.x86_64
            httpd-tools = 2.2.15-53.el6.centos is needed by httpd-2.2.15-53.el6.centos.x86_64
            libapr-1.so.0()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64
            libaprutil-1.so.0()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64
    [root@10 Packages]# rpm -ivh apr-devel-1.3.9-5.el6_2.x86_64.rpm 
    warning: apr-devel-1.3.9-5.el6_2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    error: Failed dependencies:
            apr = 1.3.9-5.el6_2 is needed by apr-devel-1.3.9-5.el6_2.x86_64
            libapr-1.so.0()(64bit) is needed by apr-devel-1.3.9-5.el6_2.x86_64
    [root@10 Packages]# rpm -ivh apr-
    apr-1.3.9-5.el6_2.x86_64.rpm               apr-util-devel-1.3.9-3.el6_0.1.x86_64.rpm
    apr-devel-1.3.9-5.el6_2.x86_64.rpm         apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm
    apr-util-1.3.9-3.el6_0.1.x86_64.rpm        
    [root@10 Packages]# rpm -ivh apr-1.3.9-5.el6_2.x86_64.rpm 
    warning: apr-1.3.9-5.el6_2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing...                ########################################### [100%]
       1:apr                    ########################################### [100%]
    [root@10 Packages]# rpm -ivh apr-devel-1.3.9-5.el6_2.x86_64.rpm 
    warning: apr-devel-1.3.9-5.el6_2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing...                ########################################### [100%]
       1:apr-devel              ########################################### [100%]
    [root@10 Packages]# rpm -ivh httpd-tools-2.2.15-53.el6.centos.x86_64.rpm 
    warning: httpd-tools-2.2.15-53.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    error: Failed dependencies:
            libaprutil-1.so.0()(64bit) is needed by httpd-tools-2.2.15-53.el6.centos.x86_64
    [root@10 Packages]# rpm -ivh apr-util-
    apr-util-1.3.9-3.el6_0.1.x86_64.rpm        apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm
    apr-util-devel-1.3.9-3.el6_0.1.x86_64.rpm  
    [root@10 Packages]# rpm -ivh apr-util-1.3.9-3.el6_0.1.x86_64.rpm 
    ]warning: apr-util-1.3.9-3.el6_0.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
    Preparing...                ########################################### [100%]
       1:apr-util               ########################################### [100%]
    [root@10 Packages]# rpm -ivh httpd-tools-2.2.15-53.el6.centos.x86_64.rpm 
    warning: httpd-tools-2.2.15-53.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing...                ########################################### [100%]
       1:httpd-tools            ########################################### [100%]
    [root@10 Packages]# rpm -ivh httpd-2.2.15-53.el6.centos.x86_64.rpm 
    warning: httpd-2.2.15-53.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    error: Failed dependencies:
            apr-util-ldap is needed by httpd-2.2.15-53.el6.centos.x86_64
    [root@10 Packages]# rpm -ivh apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm 
    warning: apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
    Preparing...                ########################################### [100%]
       1:apr-util-ldap          ########################################### [100%]
    [root@10 Packages]# rpm -ivh httpd-
    httpd-2.2.15-53.el6.centos.x86_64.rpm         httpd-manual-2.2.15-53.el6.centos.noarch.rpm
    httpd-devel-2.2.15-53.el6.centos.x86_64.rpm   httpd-tools-2.2.15-53.el6.centos.x86_64.rpm
    [root@10 Packages]# rpm -ivh httpd-2.2.15-53.el6.centos.x86_64.rpm 
    warning: httpd-2.2.15-53.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing...                ########################################### [100%]
       1:httpd                  ########################################### [100%]
    [root@10 Packages]# rpm -ivh httpd-manual-2.2.15-53.el6.centos.noarch.rpm 
    warning: httpd-manual-2.2.15-53.el6.centos.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing...                ########################################### [100%]
       1:httpd-manual           ########################################### [100%]
    

    启动Apache服务

    [root@10 Packages]# service httpd restart
    停止 httpd:                                               [确定]
    正在启动 httpd:                                           [确定]
    

    也可以是

    [root@10 Packages]# /etc/rc.d/init.d/httpd restart
    停止 httpd:                                               [确定]
    正在启动 httpd:                                           [确定]
    

    实际上service就是搜索的/etc/rc.d/init.d/httpd

    netstat -tulnp看到httpd跑在80上

    setup关闭防火墙

    ifconfig看ip

    网页的位置在/var/www/html

    配置文件在/etc/httpd/conf/httpd.conf

RPM包升级
  • rpm -Uvh 全名:升级安装,没装会直接装,装了会升级
  • rpm -Fvh 全名:升级安装,只升级不安装
RPM包卸载
  • rpm -e 包名
  • --nodeps不检查依赖 ,生产不得使用
  • 卸载的时候会提示程序有某个依赖还没有卸载,需要卸载依赖才可以卸载他,例如hpptd->httpd-tools那么卸载http的时候就会提示还没卸载httpd-tools,比较麻烦,但是不能用yum替代,yum在卸载的时候会自动处理依赖,但是例如有依赖关系systemXXX->httpd->httptool某个系统工具依赖httpd,当卸载httpd时候yum认为http-tool没有httpd也可以独立存在没有卸载的必要,但是systemXXX依赖于httpd,没了httpd的话systemXXX也没有必要,于是连带卸载了,但是systemXXX很可能是系统软件直接删了管理员又不知道,系统直接崩
RPM包的查询
  • rpm -q 包名可以查询某个包是否安装,注意yum的查询与之不同,yum的查询是查询RedHat也没有这个包
  • rpm -qa可以系统中所有的包
  • rpm -qi 包名可以查询某个包的详细信息
  • rpm -qip 包全名可以查询某未安装包的详细信息
  • rpm -ql 包名可以查询某包的文件安装位置
  • rpm -qlp 包全名可以查询某未安装包的文件安装位置
  • rpm -qf 某文件名可以反查这个文件是那个包的文件
  • rpm -qR 包名查询软件的所有依赖包(注意不管装没装都写)
RPM包验证
  • rpm -Va验证本机所有已经安装的软件包
  • rpm -V 包名验证某个已经安装的软件包
  • rpm -Vf 文件验证某个软件包的文件

验证的机制是检查文件与初始安装时发生的变化,例如修改httpd的conf文件

[root@10 liukairui]# rpm -V httpd
S.5....T.  c /etc/httpd/conf/httpd.conf

系统会现实那个包发生了变化,变化的信息卸载前面,分别是

  • S文件大小发生变化
  • M文件权限变化
  • 5文件MD5发生变化
  • D设备主从代码发生改变
  • L文件路径变化
  • U文件所有者变化
  • G文件所属组变化
  • T文件的修改时间变化
  • c这个文件是这个软件的配置文件
  • d这个文件是这个软件的普通文件
  • g这个文件是这个软件的鬼文件(不是RPM包的文件)
  • l这个文件是这个软件的授权文件
  • r这个文件是这个软件的描述文件

这个RPM校验是与RPM记录的原始值进行对比,为了保证原始值有个数字证书的概念

数字证书

数字证书,又称数字签名,由软件开发商直接发布。Linux 系统安装数字证书后,若 RPM 包做了修改,此包携带的数字证书也会改变,将无法与系统成功匹配,软件无法安装。

可以将数字证书想象成自己的签名,是不能被模仿的(厂商的数字证书是唯一的),只有我认可的文件才会签名(只要是厂商发布的软件,都符合数字证书验证);如果我的文件被人修改了,那么我的签名就会变得不同(如果软件改变,数字证书就会改变,从而通不过验证。当然,现实中人的手工签名不会直接改变,所以数字证书比手工签名还要可靠)。

数字证书是为了保证RPM校验文件没有问题,具有如下特点

  • 必须找到原厂的公钥才可以安装
  • 再安装PRM包的时候会提取RPM的证书与本机原厂证书对比验证
  • 验证通过安装,不通过就报错

数字证书的位置/mnt/cdrom/RPM-GPG-KEY-CentOS-6/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

  • 安装数字证书

    [root@localhost ~]# rpm --import /efc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
  • 验证数字证书

    [root@localhost ~]# rpm -qa | grep gpg-pubkey
    
RPM包的文件提取命令

在修改软件配置文件但是想恢复的时候会发现覆盖安装只会安装被删除的文件,但是不覆盖存在的文件,所以需要从rpm包中提取文件

  • cpio命令

    这个命令本身是用来做复制备份还原的,但是用它备份还原极其不方便,不推荐进行备份还原

    备份

    cpio -o[vcB] > [文件|设备]
    
    • -o备份模式
    • -v显示备份过程
    • -c使用portable formate存储方式
    • -B设定输入输出块为5120Bytes而不是5120butes

    还原

    cpio -i[vcdu] < [文件|设备]
    
    • -i还原模式
    • -v显示还原过程
    • -c使用portable formate存储方式
    • -d还原时自动新建目录
    • -u使用较新的文件覆盖旧文件

    备份

    cpio -o[vcB] > [文件|设备]
    
    • -o备份模式
    • -v现实备份过程
    • -c使用portable formate存储方式
    • -B设定输入输出块为5120Bytes而不是5120butes

    举例备份还原/etc

    find /etc -print | cpio -ocvB > /root/etc.cpio	# 必须用find与管道找源文件用>方式写入
    cpio -idvcu < /root/etc.cpio				   
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liukairui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值