Linux学习手册

Linux

学习流程

  1. linux环境下基本操作命令
    1. 文件操作命令rm mkdir chmod chown
    2. 编辑工具使用 vi vim
    3. linux用户管理 useradd userdel usermod
  2. linux各种配置
    1. 环境变量配置
    2. 网络配置
    3. 服务配置
  3. linux下如何搭建对应语言的开发环境
  4. 能编写shell脚本, 对linux服务器进行维护
  5. 能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优
  6. 深入理解linux系统,对内核有研究,熟练掌握大型网站应用架构组成,并熟悉各个环节的部署和维护方法

学习方法

  1. 不需要掌握所有的Linux指令,要学会,要学会查询手册和百度
  2. 先 know how, 再 know why
  3. 计算机是一门”做中学”的学科
  4. 适当囫囵吞枣
  5. 重点是实操

Linux 基础

总结

  1. 目录中有且只有一个根目录
  2. 各个目录存放的内容规划好的,不要乱放文件
  3. linux以文件形式管理设备,在linux中,一切皆为文件
  4. 脑海中应该有一个linux目录树

目录

加粗标识重要,删除线标识不要动的目录

  • bin
    • 是Binary的缩写,存放经常使用的命令
  • sbin
    • s就是super user的意思,这里存放的是系统管理员使用的系统管理程序
  • home
    • 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的帐号名命名的
  • root
    • 该目录为系统管理员,也称作超级权限者的用户主目录
  • lib
    • 系统开机所需要的最基本的动态连接共享库,作用类似windows的ddl文件.
    • 几乎所有的应用程序都需要用到这些共享库
  • lost+found
    • 这个目录一般情况是空的,当系统非法关机后,这里就存放了一些文件
  • etc
    • 所有的系统管理所需要的配置文件和子目录 my.conf
  • usr
    • 非常重要的目录,用户的很多应用程序和文件都放在这个目录下
    • 类似windows下的program files
  • boot
    • 存放的是启动Linux时使用的一些核心文件.包括一些连接文件以及镜像文件
  • proc
    • 这个目录是一个虚拟的目录,他是系统内存的映射,存放这个目录来获取系统信息
  • srv
    • service的缩写,存放一些服务启动后需要提取的数据
  • sys
    • 这是linux2.6内核的一个很大的变化.
    • 安装了2.6内核中新出现的一个文件系统sysfs
  • tmp
    • 存放临时文件
  • dev
    • 类似window设备管理器,把所有的硬件用文件的形式存储
  • media
    • linux系统会自动识别一些设备,例如u盘,光驱等.当识别后,linux会把识别的设备挂载到这个目录下
  • mnt
    • 系统提供该目录是为了让用户临时挂载别的文件系统的.
    • 可以将外部的存储挂载在/mnt上,进入该目录可以查看里面的内容了
  • opt
    • 这是给主机额外安装软件所摆放的目录.默认为空
  • /usr/local
    • 晚装软件的安装目录.
    • 一般通过编译源码的方式安装的程序
  • var
    • 存放者不断在扩充的东西.
    • 习惯将经常被修改的目录放在这个目录下
    • 例如日志
  • selinux[security-enhanced linux]
    • SELinux是一种安全子系统,它能控制程序只能访问特定 文件

开关机&登录指令

关机&重启

注意: 在关机或重启之前,都应该先执行sync指令把内存的数据写入磁盘,防止数据丢失

1
2
3
4
5
6
7
8
shutdown
shutdown -h now #立即关机
shutdown -h 1 #一分钟后关机
shutdown -r now #现在重新启动

halt #关机,作用同上
reboot #现在重新启动
sync #把内存的数据同步到磁盘

用户登录&注销

  1. 登录时尽量不使用root用户登录.使用普通用户登录,需要权限时使用su - username来切换为管理员身份
  2. 提示符下输入logout即可注销
    1. 图形界面无效,运行级别3有效

用户管理

用户

添加用户

1
2
useradd username
useradd -d xxx username #指定home目录

指定密码

1
passwd username

删除用户

1
2
userdel username #保留home目录
userdel -r username #删除用户以及home目录

是否保留home目录? 一般情况下保留

查询用户信息

id username

切换用户

切换: su - username,权限高切换到权限低不需要密码

需要返回原来用户: exit

用户组

增加

groupadd groupname

删除

groupdel groupname

增加一个用户同时指定组

useradd -g groupname username

修改用户组

usermod -g groupname username

用户和用户组的配置文件

  • /etc/passwd文件
    • 用户的配置文件,记录用户的各种信息
    • 格式: 用户名:用户标识号:组标识号:注释性描述:主目录:登录Shell
  • /etc/shadow文件
    • 口令的配置文件
    • 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
  • /etc/group文件
    • 组配置文件
    • 组名:口令:组标识号:组内用户列表

实用指令

运行级别

级别 状态
0 关机
1 单用户(找回丢失密码)
2 多用户无网络服务
3 多用户有网络服务
4 保留
5 图形页面
6 重启
  • 常用级别为3和5
  • 配置文件: /etc/inittab

切换到指定运行级别

init [012356]

帮助指令

对某个指令不熟悉时候,使用帮助指令来了解这个指令的使用

  1. man [命令]
  2. help [命令]

文件目录类

pwd

  • 显示当前工作目录的绝对路径

ls

  • ls [选项] [目录或文件]
  • 常用选项
    • -a 显示所有文件和目录,包括隐藏文件
    • -l 以列表的方式显示信息
    • -al 以列表方式显示所有文件和目录

cd

  • change directory 切换目录
  • cd [选项]
  • 常用选项
    • cd ~ 或者 cd : 回到自己的home目录
    • cd.. 回到当前目录的上一级目录

mkdir

  • make directory创建目录
  • mkdir -p [目录] 可以一次创建多级目录

rmdir

  • remove direcotry 删除空目录
  • rm -rf 删除非空目录

touch

  • 创建空文件
  • 可以一次创建多个

cp

  • 拷贝文件到具体目录
  • cp [选项] source dest
  • 常用选项
    • -r 递归复制整个文件夹

rm

  • rm [选项] 要删除的文件或目录
  • 常用选项
    • -r 递归删除整个文件夹
    • -f 强制删除不提示

mv

  • 移动或者重命名文件或目录
    • 重命名: mv oldNameFile new NameFile
    • 移动: mv /temp/movefile /targerFolder

cat

  • 查看文件内容(只读)
  • cat [选项] 文件
  • 常用选项
    • -n 显示行号
  • 常和more一起使用,分页显示,空格翻页
    • cat -n file | more

more

  • more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容
  • 若干快捷键
    • space 翻页
    • Enter 向下翻一行
    • q 立刻离开more
    • Ctrl+F 向下滚动一屏
    • Ctrl+B 返回上一屏
    • = 输出当前行行号
    • :f 输出文件名和当前行行号

less

  • 分屏查看文件内容, 与more相似,但是更强大
  • less显示内容时,不是一次加载整个文件后才显示,而是根据显示需要加载内容,对于大型文件有很高的效率
  • 若干快捷键
    • space 翻页
    • pagedown 翻页
    • pageup 上一页
    • /字串 向下搜寻字串
      • n: 向下查找
      • N:向上查找
    • ?字串 向上搜寻字串
      • n: 向下查找
      • N:向上查找
    • q 离开less

> 和 >>

  • **> **输出重定向: 会将原来的文件内容覆盖

  • >> 追加: 不会覆盖原文件内容,而是追加到文件的尾部

  • 语法

    • ls -l > 文件 列表的内容写入文件中(常用)
    • ls -al > 文件 列表的内容追加到文件的结尾
    • cat 文件1 > 文件2 将文件1的内容覆盖到文件2
    • echo 内容 >> 文件

echo

  • 输出内容到控制台

  • echo [选项] 输出内容

    echo $PATH

  • 显示文件开头部分内容,默认前十行
  • head 文件
  • head -n 5 文件 指定显示前5行

tail

  • 显示文件尾部的内容,默认后10行
  • tail 文件
  • tail -n 5 文件: 查看文件后5行内容
  • tail -f 文件: 实时跟踪文档的所有更新

ln

  • 软链接,也叫符号连接,存放了链接其他文件的路径
  • 语法
    • ln -s [原文件或目录] [软连接名]: 给原文件创建一个软链接
  • 注意:
    • 删除的时候直接rm -rf, 但是不要带后面斜杠
    • 使用pwd指令查看目录时,仍然看到的是软链接的目录

history

  • 查看已经执行过的历史指令
  • 语法
    • history 显示所有的
    • history 10: 显示最近的10个
  • !+编号直接调用某指令: !178

时间日期类

date

  • 显示当前日期
  • 语法
    • date [格式] 显示当前时间
    • date +%Y 显示当前年
    • date +%m 显示当前月份
    • date +%d 显示当前日
    • date “+%Y-%M-%d %H:%M:%S” 显示当前年月日时分秒
  • 设置当前日期
    • date -s 字符串时间

cal

  • 查看日历
  • 语法
    • cal [选项] 不加选项显示本月日历
    • cal 2020 显示2020年的日历

搜索查找类

find

  • 从指定目录向下递归遍历各个子目录,将满足条件的文件或目录显示
  • 语法
    • find [搜索范围] [选项]
  • 常用选项
    • -name<查询方式> 按照指定的文件名查找模式查找文件
      • 可以使用通配符: find / -name *.txt
    • -user<用户名> 查找属于指定用户名所有文件
    • -size<文件大小> 按照指定的文件大小查找文件
      • find / -size +20M 大于
      • find / -size -20M 小于
      • find / -size 20M 等于

locate

  • 快速定位文件路径. 利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位给定的文件. locate指令无需遍历整个文件系统,查询速度较快.为了保证查询结果的准确度,管理员必须定期更新locate数据库
  • 语法
    • locate 搜索文件
  • 注意
    • 第一次运行前,,必须使用updatedb指令创建locate数据库

grep 和 管道符|

  • grep过滤查找
  • 管道符 | 标识将前一个命令的处理结果输出传递给后面的命令处理
  • 语法
    • grep [选项] 查找内容 源文件
  • 常用选项
    • -n 显示匹配行及行号
    • -i 忽略字母大小写
    • cat hello.txt | grep -ni y

压缩解压缩

gzip/gunzip

  • gzip 压缩,只能压缩为*.gz文件
    • 压缩后原文件不保留
  • gunzip 解压缩

zip/unzip

  • 压缩: zip [选项] xxx.zip 将要压缩的内容
    • zip -r mypackage /home(压缩home文件夹为mypackage)
  • 解压缩: unzip [选项] 将要解压缩的内容
  • 常用选项
    • -r 递归压缩
    • -d 指定解压后文件的存放目录

tar

  • 打包指令
  • 语法
    • tar [选项] xxx.tar.gz 打包的内容 (打包目录,压缩后的文件格式为.tar.gz)
    • 常用选项
      • -c 产生.tar打包文件
      • -v 显示详细信息
      • -f 指定压缩后的文件名
      • -z 打包同时压缩
      • -x 解包.tar文件
    • 常用: (zcvf zxvf)
      • 两种:
        • 压缩 zcvf
        • 解压缩 zxvf
      • tar -zcvf a.tar.gz a1.txt a2.txt (将a1和a2打包为a.tar.gz)
      • tar -zxvf a.tar.gz (将a.tar.gz解压到当前目录)
      • tar -zxvf a.tar.gz -C /opt/ (将a.tar.gz解压到opt目录,opt目录要存在, -C代表change)

组管理和权限管理

文件/目录所有者

  • 一般为文件的创建者

查看文件的所有者

  • ls -ahl

修改文件所有者

  • chown [指令] userName fileName
  • chown userName:groupName filaName修改的同时修改文件所属组
  • 常用指令
    • -R 递归修改其下所有文件和目录

查看文件/目录所在组

  • ls -ahl

修改文件所在组

  • chgrp groupName fileName

其他组

  • 除了文件的所有者和所在组的用户外, 系统的其他用户都是文件的其他组

改变用户所在组

  • usermod -g groupName userName

权限管理

文件基本属性

img

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

rwx权限详解

  • r: read. w: write, x: execute

  • rwx作用到文件

    • r代表可读:可以读取,查看
    • w代表可写: 可以修改,但是不代表可以删除文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
    • x代表可以被执行
  • rwx作用到目录

    • r代表可读: 可以读取, ls查看目录
    • w代表可写: 可以修改,目录内创建/删除/重命名目录
    • x代表可执行:可以进入该目录

修改权限

chmod

  • 第一种方式: + - = 变更权限
    • u: 所有者 g: 所有组 o:其他人 a: 所有人(u,g,o的总和)
    • 语法
      • chmod u=rwx,g=rx,o=x fileName/DictionaryName
      • chmod o+w fileName/DictionaryName
      • chmod a-x fileName/DictionaryName
    • 示例
      • 给abc文件的所有者读写执行权限,给所在组读执行权限,给其他组读执行权限chmod u=rwx,g=rx,o=rx abc
      • 给abc文件的所有者除去执行的权限,增加组写权限chmod u=rwx,g=rx,o=rx abc
      • 给abc文件的所有用户添加读的权限chmod a+r abc
  • 第二种方式: 通过数字变更
    • r=4 w=2 x=1 rwx=4+2+1=7
    • 语法
      • chmod u=rwx,g=rx,o=x fileName/DictionaryName相当于chmod 751 fileName/DictionaryName

crond任务调度

  • 任务调度: 指系统在某个时间执行的特定的命令或程序
  • 任务调度分类:
    • 系统工作: 有些重要的工作必须周而复始地执行
    • 个别用户工作: 希望执行某些程序,如对数据库的备份

crontab

  • 语法

    • crontab [选项]
  • 常用选项

    • -e 编辑crontab定时任务
    • -l 查询crontab任务
    • -r 删除当前用户所有的crontab任务
  • 步骤

    1. cron -e
    2. */1 * * * * ls -l /etc >> /tmp/to.txt
    3. 保存后退出
    4. 在每一分钟都会调用ls -l /etc >> /tmp/to.txt
  • 参数说明(具体详见cron表达式)

    • 第一个*: 一小时中的第几分钟 0-59
    • 第二个*:一天中第几小时 0-23
    • 第三个*: 一个月当中的第几天 1-31
    • 第四个*: 一年当中的第几月 1-12
    • 第五个*: 一周当中的星期几 0-7(0和7都是星期日)
  • 示例

    • 每隔一分钟,将当前的日期信息,追加到/tmp/mydate文件中
      • 先编写一个文件 /home/mytask1.sh
      • 写入date >> /tmp/mydate
      • 给mytask1.sh一个可执行权限chmod 744 mytask1.sh
      • crontab -e
      • 写入 */1 * * * * /home/mytask1.sh
    • 每天凌晨2:00将mysql数据库testdb,备份到文件中mydb.bak
      • 先编写一个文件/home/mytask2.sh
      • 写入 /usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
      • 给mytask2.sh一个可执行权限chmod 744 mytask2.sh
      • crontab -e
      • 写入 0 2 * * * /home/mytask2.sh

磁盘分区和挂载

分区方式

mbr分区

  1. 最多支持四个主分区
  2. 系统只能安装在主分区
  3. 扩展分区要占一个主分区
  4. MBR最大只支持2TB,但具有最好的兼容性

gtp分区

  1. 支持无限多个主分区(但操作系统可能限制,如windows下最多128个)
  2. 最大支持18EB的最大容量 (EB=1024PB, PB=1024TB)
  3. Windows7 64位之后支持gtp

Linux分区

  1. Linux 无论有几个分区,分给哪一个目录使用,它归根到底就只有一个跟目录,一个独立且唯一的文件结构. Linux中每个分区都是用来组成整个文件系统的一部分
  2. Linux 采用了一种叫”载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来. 这时要载入的一个分区将使它的存储空间在一个目录下获得

如何增加磁盘

  1. 虚拟机添加磁盘
  2. 分区fdish /dev/sdb
  3. 格式化mkfs -t ext4 /dev/sdb1
    1. ext4是分区类型
  4. 挂载(指令: mount 设备名 挂载目录)(卸载: umount 设备名或者挂载目录)
    1. 先创建一个目录 /home/newdisk
    2. 挂载mount /dev/sdb1 /home/newdisk(卸载 umount /dev/sdb1 或者 umount /newdisk)
  5. 设置自动挂载(重启系统,仍然挂载)
    1. vim etc/fstab
    2. 写入 /dev/sdb1 /home/newdisk ext4 defaults 0 0

磁盘情况查询

查询系统整体磁盘使用情况

  • 语法
    • df [选项]
  • 常用选项
    • -h
    • -l
    • -lh

查询指定目录的磁盘占用情况

  • 语法
    • du [选项]
  • 常用选项
    • -s 指定目录大小汇总
    • -h 带人类可读性大小
    • -a 含文件
    • –max-depth=1 子目录深度
    • -c 列出明细的同时,增加汇总值
  • 示例
    • 查询opt目录占用情况,深度为1
      • du -ach --max-depth=1 /opt
    • 统计目录下文件个数
      • ls -l /home | grep "^-" | wx -l
    • 统计目录以及目录下目录个数
      • ls -lR /home | grep "^d" | wx -l

树状结构显示

  • tree 目录
  • 未安装指令使用yum install tree安装

网络配置

查看网络连接

ping 目的主机

配置

自动获取

  • 每次启动自动获取的ip不一样, 不适用于服务器

指定固定ip (推荐)

  • 直接修改配置文件来指定IP,并可以连接到外网
  • 编辑 vi /etc/sysconfig/network-scripts/ifcfg-eth0
  • 修改IPADDR
  • GATEWAY 指定网关
  • DNS1 dns和网关保持一致即可
  • BOOTPROTO=static 表示以静态方式获取ip
  • ONBOOT=yes 启动boot配置成yes
  • 重启网络服务或者系统生效
    • service netword restart
    • reboot

进程管理

基本介绍

  • linux中,每个执行的程序都成为一个进程.每一个进程都分配一个ID号
  • 每一个进程都会对应一个父进程,而这个父进程可以复制多个子进程.例如www服务器
  • 每个进程都可能以两种方式存在的.
    • 前台与后台
    • 前台进程是用户目前的屏幕上可以进行操作的.
    • 后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
    • 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中.直到关机

显示系统执行的进程

ps命令

  • 用来查看目前系统中,进程的执行状况
  • 选项:
    • -a 显示当前终端的所有进程信息
    • -u 以用户的形式显示进程信息
    • -x 显示后台进程运行的参数
  • 示例
    • ps -aux信息全面
    • ps -aux | grep xxx 将结果交给grep过滤
    • ps -ef | more
      • PID 进程号
      • PPID 父进程ID
  • 指令说明
    • System V展示风格
    • USER: 用户名称
    • PID: 进程号
    • %CPU: 进程占用CPU的百分比
    • %MEM: 进程占用物理内存的百分比
    • VSZ: 进程占用的虚拟内存大小(单位KB)
    • RSS: 进程占用的物理内存大小(单位KB)
    • TT: 终端名称,缩写.
    • STAT: 进程状态
      • S: 睡眠
      • s: 表示该进程是会话的先导进程
      • N: 表示进程拥有比普通优先级更低的优先级
      • R: 正在运行
      • D: 短期等待
      • Z: 僵死进程
      • T: 被跟踪或者被停止等等
      • STARTED: 进程的启动时间
      • TIME: CPU时间,即进程和私用CPU的总时间
      • COMMAND: 启动进程所用的命令和参数,如果过长会被截断显示

kill和killall

  • 停止进程
  • 语法
    • kill [选项] 进程号
    • killall 进程名称 (通过进程名称杀死进程,支持通配符,在系统引负载过大变得很慢的时候很有用)
  • 常用选项
    • -9: 表示强迫进程立即停止
  • 示例
    • 踢出用户
      • ps -aux | grep sshd查看
      • kill pid

pstree

  • 以树状的形式来展示进程信息
  • 语法
    • pstree [选项]
  • 常用选项
    • -p: 显示进程的pid
    • -u: 显示进程的所属用户

服务管理

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

管理指令

service 服务名 [start | stop | restart | reload | status]

在CentOS7.0之后不再使用service,而是systemctl

  • 查看防火墙状态: systemctl status firewalld.service (CentOS8)
  • 启动防火墙: systemctl start firewalld.service
  • 注意:
    • 关闭或者启用防火墙后,立即生效
    • 这种方式只是临时生效, 当重启系统后,还是回归之前对服务的配置
    • 如果希望设置某个服务自启动或关闭永久生效,需要使用chkconfig指令

查看服务名

systemctl list-unit-files

ls -l /usr/lib/systemd/

ls -l /etc/init.d/(CentOS8测试无效)

查看服务运行级别

运行级别

如果不小心将默认的运行级别设置成0或者7,怎么处理?

进入单用户模式,修改成正常的!

chkconfig&systemctl

  • 可以给每个运行级别设置自启动/关闭
  • 语法:
    • 旧版系统
      • 查看服务: chkconfig --list | grep xxx
      • chkconfig 服务名 --list
      • chkconfig --level 5 服务名 on/off
    • 新版CentOS
      • systemctl list-units --type=service
      • systemctl list-dependencies

动态监控进程

top

  • 与ps命令相似.他们都用来显示正在执行的进程. 不同之处在于top在执行一段时间可以更新正在运行的进程

  • 语法

    • top [选项]

    • 选项

      选项 功能
      -d秒数 指定top命令每隔几秒更新.默认是3秒
      -i 使top不显示任何闲置或者僵死进程
      -p 通过指定监控进程ID来仅仅监控某个进程的状态
    • 交互操作说明

      操作 功能
      P 以CPU使用率排序,默认就是此项
      M 以内存的使用率排序
      N 以PID排序
      q 退出top

查看系统网络情况netstat

  • 语法
    • netstat [选项]
  • 常用选项
    • -an 按一定顺序排列输出
    • -p 显示哪个进程在调用
  • 示例
    • 查看系统所有的网络服务
      • netstat -anp

RPM包的管理

  • 一种用于互联网下载包的打包及安装工具.
  • 包含在某些Linux分发版中
  • 生成具有.RPM拓展名的文件. RPM是RedHat Package Manager的缩写
  • 公认的业内标准, suse,redhat,centos都有采用

查询指令

  • 语法: rpm [选项]
  • 示例
    • 查询已安装的rpm列表: rpm -qa | grep xx,rpm -qa | more
    • 查询软件包是否安装: rpm -q firefox
    • 查询软件包信息: rpm -qi file
    • 查询软件包中的文件: rpm -ql firefox
    • 查询文件所属的软件包: rpm -qf /etc/password(使用文件全路径名)

卸载

rpm -e 包名

注意:

  • 如果其他软件包依赖于要删除的软件包,卸载会产生错误信息
  • 强制删除: 增加参数 –nodeps
  • 但是一般不推荐这么做,因为依赖与该软件包的程序可能无法运行

安装

rpm -ivh 包名

i=install安装 v=verbose提示 h=hash进度条

yum

  • yum是一个Shell前端软件包管理器.
  • 基于RPM包管理.
  • 能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的安装包
  • 使用前提: 联网

基本指令

  • 查询yum服务器是否有需要安装的软件
    • yum list | grep xx
  • 安装指定的yum包
    • yum install xxx