图片需要重新转换,可以考虑分为两篇或者按章节分为多篇
前言
有任何问题可以在下面的评论区留言交流
第一章 Linux系统简介
1.2 开源软件介绍
(1)Unix主要发行版本
(2)Linux发行版本比较
Ubuntu 20.04LTS 18.04软件比较多
Manjaro
桌面环境: xfc, gnome, kde
- LinuxMint
Ubuntu的替代,基于ubuntu发行版上的一种优化版,开行即用,区别就是驱动不同
比乌班图更为流畅
桌面:cinammon, mate, xfce
- Deepin
最好的中文Linux发行版之一,流畅度差
Pop!OS
Debian 、 Centos
Arch
(3)LAMP
第二章 Linux系统安装
2.1 VMware 虚拟机介绍
(1)Vmware 特点
(2)配置要求
2.2 系统分区
步骤:分区 -> 格式化(将分区表写入到磁盘中)-> 设置设备文件名(不用自己弄)-> 挂载
在 Linux 世界里,一切皆文件。
安装 CentOS6.9 系统,硬盘给20G,建议分区配置如下:
- 系统启动区 boot : 256M
- 虚拟内存交换区 swamp : 2000M
- 用户家目录 home : 2000M
- 剩余全部给 root
第三章 **Linux 的目录结构 **
3.1 基本介绍
linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
3.2 Linux 具体目录结构
**boot、etc 目录要备份 **
- /lib
- 系统开机所需要最基本的动态链接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found
- 一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- **/etc ****[重点]**
- 所有系统管理所需要的配置文件和子目录。my.conf
- /usr
- 用户的很多应用程序和文件都放在这个目录下。类似于Windows下的 program files 目录
- **/bin [重点](usr/bin、/usr/local/bin) [**usr:Unix System Resource,即Unix系统资源的缩写]
- 是Binary的缩写,这个目录存放着经常使用的命令
- /sbin (usr/sbin、/usr/local/sbin)
- s 就是 super 的意思,这里存放的是系统管理员使用的系统管理程序
- **/home ****[重点]**
- 存放普通用户的主目录,在Linux中的每个用户都有一个自己的目录,一般该目录一用户的账号名命名
- **/root ****[重点]**
- 该目录为系统管理员,超级权限者的用户目录
- /boot
- 存放的启动Linux时使用的一些核心文件,包括一些链接文件和镜像文件
- **/proc **
- 虚拟目录,是系统内存的映射,访问这个目录来获取系统信息。
- **/srv **
- service 的缩写,该目录是存放一些服务启动之后需要提取的数据
- /sys
- Linux2.6 内核的一个很大变化,该目录安装了2.6内核中新出现的一个文件系统
- /tmp
- 存放临时文件
- /dev
- 类似于 windows的设备管理器,把所有的硬件用文件的形式存储
- **/media ****[重点]**
- Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后 Linux 会把识别的设备挂载到这个目录下
- /mnt [重点]
- 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在 /mnt/ 上,然后进入该目录就可以查看里的内容了。d:/ myshare
- /opt
- 这是给主机额外安装软件所摆放的目录。如安装 ORACLE 数据库就可放到该目录下。默认为空。
- **/usr/local **[重点**]**
- 这是另个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
- **/var ****[重点]**
- 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
- /selinux [security-enhanced linux] 类似 360
- Selinux 是一种安全子系统,它能控制程序只能访同特定文件。
3.3 Linux 目录总结一下
- linux 的目录中有且只要一个根目录 /
- linux 的各个目录存放的内容是规划好,不用乱放文件。
- linux 是以文件的形式管理我们的设备,因此 linux 系统,一切皆为文件。
- linux 的各个文件目录下存放什么内容,大家必须有一个认识。
- 学习后,你脑海中应该有一颗 linux 目录树。
第四章 Linux 常用命令
**
4.1 文件处理命令
(1) 命令格式与目录处理命令 ls
命令格式 : 命令 [-选项] [参数]
例 : ls -la /etc
说明:1)个别命令使用不遵循此格式
2)当有多个选项时,可以写在一起
3)简化选项与完整选项 -a 等于 –all
命令名称:**ls **
命令英文原意:list
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录文件
语法:ls 选项[-ald] [文件或目录]
-a 显示所有文件,包括隐藏文件
(想要隐文件就在文件名前面加一个点 “.”)
-l 详细信息显示
-d 查看目录属性
-h 人性化查看
-i 查看节点
tip:
-rw-r–r–
- 文件类型(- 文件 d 目录 l 软链接文件)
- rw- r– r–
u g o
u所有者 g所属组 o其他人
r读 w写 x执行
(2) 目录处理命令
命令名称:**mkdir **
命令英文原意:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -p [目录名]
功能描述:创建新目录 -p 递归创建
范例: $ mkdir -p /tmp/Japan/boduo
$ mkdir /tmp/Japan/longze /tmp/Japan/cangjing
*命令名称:***cd **
命令英文原意:change directory
命令所在路径:shell内置
命令执行权限:所有用户
语法:cd [目录]
功能描述:切换目录
范例: $ cd /tmp/Japan/boduo 切换到指定目录
$ cd .. 回到上一级目录
**命令名称:pwd **
命令英文原意: print working directory
命令所在路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录
范例:$ pwd
/tmp/Japan
*命令名称:***rmdir **
命令英文原意:remove empty directories
命令所在路径:/bin/rmdir
执行权限:所有用户
语法:rmdir [目录名]
功能描述: 删除空目录
范例: $ rmdir /tmp/Japan/boduo
命令名称:**cp **
命令英文原意:copy
命令所在路径:/bin/cp
执行权限:所有用户
语法:cp -rp [原文件或目录] [目标目录]
-r 复制目录
-p 保留文件属性
功能描述:复制文件或目录
范例:$ cp -r /tmp/Japan/cangjing /root
将目录/tmp/Japan/cangjing复制到目录/root下
$ cp -rp /tmp/Japan/boduo /tmp/Japan/longze /root
将/tmp/Japan目录下的boduo和longze目录复制到/root下,保持目录属性
$ cp -r/tmp/Japan/cangjing /root/shenchao
将目录/tmp/apan/ cangjing复制到目录/root下并将其改名为 shenchao
命令名称:mv** **
命令英文原意:move
命令所在路径:/bin/mv
执行权限:所有用户
语法:mv [原文件或目录] [目标目录]
功能描述:剪切文件、改名
范例:$ mv /tmp/Japan/longze /root/nvshen
移动文件longze到/root 目录下并改名为nvshen
$ mv cangjingkong canglaoshi
将cangjingkong重命名为canglaoshi
*命令名称:***rm **
命令英文原意:remove
命令所在路径:/bin/rm
执行权限:所有用户
语法:rm -rf [文件或目录]
-r 删除目录
-f 强制执行
功能描述:删除文件
范例:$ rm /tmp/yum.log
删除文件/tmp/yum.log
$ rm -rf /tmp/Japan/longze
删除目录/tmp/Japan/longze
(3)文件处理命令
*命令名称:***touch **
命令所在路径:/bin/touch
执行权限:所有用户
语法:touch [文件名]
功能描述:创建空文件
范例: $ touch Japanlovestory.list
若未指明详细的绝对路径,则默认创建在当前路径
创建文件名时如直接加入空格,系统认为创建两个文件
如需创建中间带空格文件名的文件,可加双引号。(但不建议这样命名)
命令名称:****cat
命令所在路径:/bin/cat
执行权限:所有用户
语法:cat [文件名]
功能描述:显示文件内容
-n 显示行号
范例: $ cat /etc/issue $ cat -n /etc/services
彩蛋:tac(反向列示)(不支持-n)
命令名称:**more **
命令所在路径:/bin/more
执行权限:所有用户
语法:more [文件名]
(空格) 或f 翻页
(Enter) 换行
q或Q 退出
功能描述:分页显示文件内容
范例: $ more /etc/services
命令名称:**less **
命令所在路径:/usr/bin/less
执行权限:所有用户
语法:less [文件名]
上箭头翻行 PgUp翻页
功能描述:分页显示文件内容(可向上翻页)
范例: $ less /etc/services
tips: 按下 / 后可以搜索 会反显高亮 按q退出(more也可以)
按 N(next) 显示下ー处高亮
命令名称:****head
命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head [文件名]
功能描述:显示文件前面几行
-n 指定行数 (若不指定行数,默认显示前10行)
范例: $ head -n 20 /etc/services
*命令名称:***tail **
命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tail [文件名]
功能描述:显示文件后面几行
-n 指定行数
-f 动态显示文件末尾内容
范例: $ tail -n 18 /etc/services
(4) 链接命令
**
命令名称:**ln **
命令英文原意:link
命令所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [原文件] [目标文件]
-s 创建软链接
功能描述:生成链接文件
范例:
$ ln -s /etc/issue /tmp/issue.soft
创建文件/etc/issue的软链接/tmp/issue.soft
$ ln /etc/issue /tmp/issue.hard
创建文件/etc/issue的硬链接/tmp/issue.hard
软链接特征:
类似 Windows 快捷方式
1、lrwxrwxrwx l 软链接
软链接文件权限都为 rwxrwxrwx
2、文件大小-只是符号链接
3、/tmp/issue.soft -> /etc/issue 箭头指向原文件
**硬链接特征: **
1、拷贝cp -p + 同步更新
echo “this is a test” >> /etc/motd
2、可通过i节点识别
3、不能跨分区
4、不能针对目录使用
4.2 权限管理命令(详细见)
(1) 权限管理命令 chmod
*命令名称:***chmod **
命令英文原意:change the permissions mode of a file
命令所在路径:/bin/chmod
执行权限:所有用户
语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录]
[mode=421 ] [文件或目录]
-R 递归修改 (目录下的所有文件都改成同样的权限)
功能描述:改变文件或目录权限
权限的数字表示
r —- 4 w —- 2 x —- 1
rwxrw-r– 7 6 4
范例:
$ chmod g+w testfile
赋予文件testfile所属组写权限
$ chmod -R 777 testdir
修改目录testfile及其目录下文件为所有用户具有全部权限
|
代表字符 |
权限 |
对文件的含义 |
对目录的含义 |
| — | — | — | — |
|
r |
读权限 |
可以查看文件内容 |
可以列出目录中的内容 |
|
w |
写权限 |
可以修改文件内容 |
可以在目录中创建、删除文件 |
|
x |
执行权限 |
可以执行文件 |
可以进入目录 |
**tips:
**
1.rwx 作用在文件时
1> r : read,可以读取,查看
2> w : writte, 可以修改,但是不代表可以删除该文件,删除一个文件的前提是对该文件所在的目录(文件夹)具有写的权限,才能删该文件
3> x : execute,可以被执行
2.rwx 作用在目录时
1> r,ls 查看目录内容
2> w, 可以修改,目录内创建+删除+重命名目录
3> x, 可以进入该目录
(2) 其他权限管理命令
*命令名称:***chown **
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:所有用户
语法:chown [用户] [文件或目录]
功能描述:改变文件或目录的所有者 范例:$ chown shenchao fengjie
改变文件fengjie的所有者为shenchao
*命令名称:***chgrp **
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp [用户组] [文件或目录]
功能描述:改变文件或目录的所属组
范例:$ chgrp lampbrother fengjie
改变文件fengjie的所属组为lampbrother
命令名称:**umask **
命令英文原意:the user file-creation mask
命令所在路径:Shell内置命令
执行权限:所有用户
语法:umask [-S]
-S 以rwx形式显示新建文件缺省权限
功能描述:显示、设置文件的缺省权限
范例: $ umask -S
tips: 新建文件是默认没有x权限(比如:防止木马病毒攻击)
4.3 文件搜索命令
(1) 文件搜索命令 find
命令名称:**find **
命令所在路径:/bin/find
执行权限:所有用户
语法:find [搜索范围] [匹配条件]
功能描述:文件搜索
范例:
$ find /etc -name init
在目录/etc中查找文件 init
-iname 不区分大小写
$ find /etc -name init
在目录/etc中查找文件名包含 init
$ find /etc -name init???
在目录/etc中查找文件名init开头并有3个字符的
$ find /etc -name init*
在目录/etc中查找文件名init开头的
tips : * 匹配任意字符,?匹配单个字符
_
$ find / -size +204800
在根目录下查找大于100MB的文件
+n 大于 -n 小于 n 等于
(1数据块=512字节=0.5K 100MB=102400KB=204800数据块)
$ find /home -user shenchao
在根目录下查找所有者为shenchao的文件
-group 根据所属组查找
$ find /etc -cmin -5
在/etc下查找5分钟内被修改过属性的文件和目录
-amin 访问时间 access
-cmin 文件属性 change
-mmin 文件内容 modify
$ find /etc -size +163840 -a -size -204800
在/etc下查找大于80MB小于100MB的文件
-a 两个条件同时满足
-o 两个条件满足任意一个即可
$ find /etc -name inittab -exec ls -l {} ;
在/etc下查找inittab文件并显示其详细信息
-exec/-ok 命令 {} ; 对搜索结果执行操作
_tips : _-exec直接执行,ok会询问操作
(花括号 {} 指查找的结果,斜杠 \ 表示转义符,分号 ; 表示结束)
-type 根据文件类型查找
f 文件 d 目录 l 软链
find /etc -name inti* -a -type f
-inum 根据i节点查找
find . -inum 31531 -exec rm {} ;
在当前目录下查找节点为31531的文件删除
(2) 其他搜索命令
*命令名称:***locate **
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate 文件名
功能描述:在文件资料库中查找文件
范例:$ locate inittab
tips : 新建文件 locate 不到,可以 updatedb,更新文件资料库后查找【tmp 不在文件资料库内】
$ locate -i masichun.json // -i 作用你不区分大小写类似 -iname
命令名称:**which **
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which 命令
功能描述:搜索命令所在目录及别名信息
范例:$ which ls
*命令名称:***whereis **
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助文档路径
范例:$ whereis ls
*命令名称:***grep **
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep -iv [指定字串] [文件]
功能描述:在文件中搜寻字串匹配的行并输出
-i 不区分大小写
-v 排除指定字串
范例:# grep mysql /root/install.log
grep -v ^# /etc/inittab 去除以#开头的所有行信息,^表示以XXX开头
4.4 帮助命令
*命令名称:***man **
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
(空格) 或f 翻页
(Enter) 换行
q或Q 退出
功能描述:获得帮助信息
范例: $ man ls
查看ls命令的帮助信息
(用man命令来查看配置文件的信息时,不需要man+绝对路径,只需写man+[配置文件的名字] )
(info 跟 man 功能大同小异)
$ man services
查看配置文件services的帮助信息
1 命令的帮助 5配置文件的帮助
man 5 passwd -> 查看配置文件的帮助
( whereis passwd时,除了显示 passwd命令的绝对路径,也会显示 passwd的命令帮助路径和配文件的帮助路径,“1”代表命令帮助文件,“5”代表配置帮助文件,因此用man passwd时,要在中加上5表示查找的是 passwd的配文件帮助)
命令名称:****whatis
**语法:whatis **命令
功能描述:获得命令的简单介绍信息
范例:whatis ls
类似的:apropos
语法:apropos 配置文件
whatis 类似于精确查找
apropos 模糊查找关键字 [功能等于 man -k ][可以tab快速补全]
(如果记不清楚工具或者函数的完整名字,可以考虑用-k参数;如果仅仅想了解什么是什么,可以用f数。)
命令名称:****help
命令所在路径:Shell内置命令
执行权限:所有用户
语法:help 命令
功能描述:获得Shell内置命令的帮助信息
范例: $ help umask
查看umask命令的帮助信息
(可以理解为用 which找不到命令所在路径的时候,此命令为 shell 内的命令)
(ls –help 简短的显示帮助信息,且已经翻译为了中文,如 touch –help)
4.5 用户管理命令
命令名称:****useradd
命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户
范例: $ useradd yangmi
*命令名称:***passwd **
命令所在路径:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户密码
范例: $ passwd yangmi
普通用户只能更改自己密码,root用户可以更改所有人密码
*命令名称:***who **
命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登录用户信息
范例: $ who
参数分别为:
用户名 登录终端[tty本地终端/pts远程终端] 登录时间 IP地址[没有表示本地登录]
命令名称:**w **
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登录用户详细信息
范例: $ w
(命令 uptime,可以看当前系统已经运行的时司。用W命令,显示的 up 也表示当前电脑已经运行的时间。 load average后面显示的三个数,分别表示1min、5min和15min的负戴情况(cpu和内存的负载)
4.6 压缩解压命令
*命令名称:***gzip **
命令英文原意:GNU zip
命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件 (不保留源文件)
压缩后文件格式:.gz
tips:只能压缩文件不能压缩目录
命令名称:**gunzip [= gzip -d]**
命令英文原意:GNU unzip
命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:解压缩 .gz 的压缩文件 (不保留源文件)
范例: $ gunzip boduo.gz
命令名称:****tar
命令所在路径:/bin/tar
执行权限:所有用户
语法:tar 选项[-zcf] [压缩后文件名] [目录]
-c 打包
-v 显示详细信息
-f 指定文件名
-z 打包同时压缩
功能描述:打包目录 压缩后文件格式:.tar.gz
范例:
$ tar -zcf Japan.tar.gz Japan
将目录Japan打包并压缩为.tar.gz文件
tar命令解压缩语法:
-x 解包
-v 显示详细信息
-f 指定解压文件
-z 解压缩
范例:$ tar -zxvf Japan.tar.gz
*命令名称:***zip **
命令所在路径:/usr/bin/zip
执行权限:所有用户
语法:
zip 选项[-r] [压缩后文件名] [文件或目录]
-r 压缩目录
功能描述:压缩文件或目录
压缩后文件格式:.zip
范例:
压缩文件
$ zip buduo.zip boduo
压缩目录
$ zip -r Japan.zip Japan
tips:会保留原文件
*命令名称:***unzip **
命令所在路径:/usr/bin/unzip
执行权限:所有用户
语法:unzip [压缩文件]
功能描述:解压.zip的压缩文件
范例:$ unzip test.zip
*命令名称:***bzip2 **
命令所在路径:/usr/bin/bzip2
执行权限:所有用户
语法: bzip2 选项 [-k] [文件]
-k 产生压缩文件后保留原文件
功能描述:压缩文件
压缩后文件格式:.bz2
范例:$ bzip2 -k boduo
$ tar -cjf Japan.tar.bz2 Japan
命令名称:****bunzip2
命令所在路径:/usr/bin/bunzip2
执行权限:所有用户
语法: bunzip2 选项 [-k] [压缩文件]
-k 解压缩后保留原文件
功能描述:解压缩
范例:$ bunzip2 -k boduo.bz2
$ tar -xjf Japan.tar.bz2
4.7 网络命令
指令名称:**write **
指令所在路径:/usr/bin/write
执行权限:所有用户
语法:write <用户名>
功能描述:给用户发信息,以Ctrl+D保存结束
(只能给在线用户发消息,若用户不在线,则发不出去)
范例: # write linzhiling
tips:输入错误,ctrl+backspace 删除
指令名称:**wall **
命令英文原意:write all
指令所在路径:/usr/bin/wall
执行权限:所有用户
语法:wall [message]
功能描述:发广播信息 (用户在接收 Messages 时命令行会中断,尽量少用。)
范例: # wall ShenChao is a honest man!
命令名称:****ping
命令所在路径:/bin/ping
执行权限:所有用户
语法:ping 选项 IP地址
-c 指定发送次数
功能描述:测试网络连通性
范例: # ping 192.168.1.156
命令名称:**ifconfig **
命令英文原意:interface configure
命令所在路径:/sbin/ifconfig
执行权限:root
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
范例:# ifconfig eth0 192.168.8.250
(eth0:本地的真实网卡按照数字依次类推 lo:回环网卡用于本机通讯试127.0.0.1)
命令名称:**mail **
命令所在路径:/bin/mail
执行权限:所有用户
语法:mail [用户名]
功能描述:查看发送电子邮件
范例:# mail root
(h看邮件列表 d 1删除部件 q退出)
命令名称:**last **
命令所在路径:/usr/bin/last
执行权限:所有用户
语法:last
功能描述:列出目前与过去登入系统的用户信息
范例:# last
命令名称:**lastlog **
命令所在路径:/usr/bin/lastlog
执行权限:所有用户
语法:lastlog
-u 指定ID
功能描述:检查某特定用户上次登录的时间
范例:# lastlog
lastlog -u 502
命令名称:**traceroute **
命令所在路径:/bin/traceroute
执行权限:所有用户
语法:traceroute
功能描述:显示数据包到主机间的路径
范例:# traceroute www.lampbrother.net
命令名称:**netstat **
命令所在路径:/bin/netstat
执行权限:所有用户
语法:netstat [选项]
功能描述:显示网络相关信息
选项:
-t : TCP协议
-u: UDP协议
-l : 监听
-r : 路由
-n : 显示IP地址和端口号
范例:
netstat -tlun 查看本机监听的端口
netstat -an 查看本机所有的网络连接
netstat -rn 查看本机路由表
查看某一端口是否被占用:netstat -tunlp | grep 2181
命令名称:setup** **
命令所在路径:/usr/bin/setup
执行权限:root
语法:setup
功能描述:配置网络
范例:# setup
(setup是针对 redhat操作系統, centos7使用 nmtui 命令)
(setup相比 ifconfig 配置网络是永久生效的)
(配置完成后要 service network restart)
命令名称:**mount **
命令位置:/bin/mount
执行权限:所有用户
命令语法:mount [-t 文件系统] 设备文件名 挂载点
范例:# mount -t iso9660 /dev/sr0 /mnt/cdrom
(首先创建挂载目录:mk /mnt/cdrom,然后将设备文件名 /dev/sr0 与目录相连接)
(1、t 和 iso9660 这两个参数可以路,系统默认。2、 umount:取消挂载)
4.8 关机重启命令
(1) shutdown命令
[root@localhost ~]# shutdown [选项] 时间
选项: -c: 取消前一个关机命令 -h: 关机 -r: 重启
(2)其他关机命令
[root@localhost ~]# halt
[root@localhost ~]# poweroff
[root@localhost ~]# init 0
(3) 其他重启命令
[root@localhost ~]# reboot
[root@localhost ~]# init 6
(4) 系统运行级别
0 关机
1 单用户 (类似于Windows的安全模式)
2 不完全多用户,不含NFS服务 (NFS:用于文件共享,但不安全,不建议使用)
3 完全多用户
4 未分配
5 图形界面
6 重启
[root@localhost ~]# cat /etc/inittab
#修改系统默认运行级别
id:3:initdefault:
[root@localhost ~]# runlevel
#查询系统运行级别
(5) 退出登录命令
[root@localhost ~]# logout
第五章 文本编辑器 Vim
5.1 Vim常用操作
Vim 简介:
Vim是一个功能强大的全屏幕文本编辑器, 是 Linux/UNIX 上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件。
Vim 没有菜单,只有命令。
插入命令
|
命令 |
作用 |
| — | — |
|
a |
在光标所在字符后插入 |
|
A |
在光标所在行尾插入 |
|
i |
在光标所在字符前插入 |
|
I |
在光标所在行行首插入 |
|
o | 在光标下插入新行 |
|
O |
在光标上插入新行 |
定位命令
|
命令 |
作用 |
| — | — |
| :set nu
:set nonu
gg
G
nG
:n
$
0 | 设置行号
取消行号
到第一行
到最后一行
到第n行
到第n行
移至行尾
移至行首 |
删除命令
命令 作用
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 全文替换指定字符串 tips: %s 全文替换
:n1,n2s/old/new/g 在一定范围内替换指定字符串
起始行,终止行 s/要替换的字符串/替换的新的字符串/g
/c 询问确认
保存和退出命令
命令 作用
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改退出
:wq! 保存修改并退出(文件所有者及root可使用)
总结:
5.2 Vim 使用技巧
导入文件内容 :r 文件路径
查看命令路径 :!which 命令
导入命令执行结果 :r !命令
定义快捷键 :map 快捷键 触发命令
范例: : map ^P I#
: map ^B 0x
连续行注释 :n1,n2s/^/#/g
:n1,n2s/^#//g
:n1,n2s/^////g tips:\转义字符
替换 : ab mymail samlee@lampbrother.net [输入mymail会自动替换成后面的内容]
tips:定义的快捷键或者ab的内容重启后会消失。5
保存在:文件 .vimrc 中
root用户 -> /root/.vimrc
普通用户 -> /home/username/.vimrc
第六章 Linux 软件安装
6.1 软件包管理简介
软件包分类
源码包
脚本安装包 (install.sh)
二进制包(RPM包、系统默认包)
(经过编译过后的)
源码包
源码包的优点是:
开源,如果有足够的能力,可以修改源代码
可以自由选择所 需的功能
软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
卸载方便(可以直接删除文件夹)
源码包的缺点
安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
编译过程时间较长,安装比二进制安装时间长
因为是编译安装,安装过程中一旦报错新手很难解决
RPM包
二进制包的优点
包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
安装速度比源码包安装快的多
二进制包缺点:
经过编译,不再可以看到源代码
功能选择不如源码包灵活
依赖性
rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
6.2 RPM包管理-rpm命令管理
(1) 软件包管理-rpm命令管理-包命名与依赖性
RPM包命名原则
httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6.centos 适合的Linux平台
i686 适合的硬件平台
rpm rpm包扩展名
RPM包依赖性
树形依赖: a→b→c
环形依赖: a→b→c→a
遇到环形依赖的解决方法是把所有的RPM包放在一条命令中进行安装。模块依赖: 模块依赖查询网站:www.rpmfind.net
库依赖的软件包名字后缀一般为.so.2,另外一种方法是用yum进行在线安装自动解决依赖问题。
(2) 软件包管理-rpm命令管理-安装升级与卸载
包全名与包名
包全名:操作的包是没有安装的软件包时, 使用包全名。而且要注意路径
包名:操作已经安装的软件包时,使用包名。(由于已经安装过,所以操作包的时候不用写绝对路径)
是搜索/var/lib/rpm/中的数据库
RPM安装
rpm –ivh 包全名
选项:
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
–nodeps 不检测依赖性
RPM包升级
rpm -Uvh 包全名
选项:
-U(upgrade) 升级
卸载
rpm -e 包名
选项:
-e(erase) 卸载
–nodeps 不检查依赖性
(安装和升级需要加包全名,其他操作一般只加包名即可。)
(3) 软件包管理-rpm命令管理-查询
查询是否安装
[root@localhost ~]# rpm -q 包名
#查询包是否安装
选项:
-q 查询(query)
[root@localhost ~]# rpm –qa
_#查询所有已经安装的RPM包 _
选项:
-a 所有(all)
查询软件包详细信息
[root@localhost ~]# rpm –qi 包名
选项:
-i 查询软件信息(information)
-p 查询未安装(需要加包全名)
包信息(package)
查询包中文件安装位置
[root@localhost ~]# rpm –ql 包名
选项:
-l 列表(list)
-p 查询未安装包信息(package)
查询系统文件属于哪个RPM包
[root@localhost ~]# rpm –qf 系统文件名
选项:
-f 查询系统文件属于哪个软件包(file)
查询软件包的依赖性
[root@localhost ~]# rpm –qR 包名
选项:
-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)
(4) 软件包管理-rpm命令管理-校验和文件提取
RPM包校验
[root@localhost ~]# rpm –V 已安装的包名
选项:
-V 校验指定RPM包中的文件(verify)
验证内容中的8个信息的具体内容如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验和是否改变(可以看成文件内容是否改变)
D 设备的中,从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
文件类型
c 配置文件(config file)
d 普通文档(documentation)
g “鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
l 授权文件(license file)
r 描述文件(read me)
RPM包中文件提取
[root@localhost ~]# rpm2cpio 包全名 | \
cpio -idv .文件绝对路径
(rpm2cpio 包全名 | \ cpio -idv .文件绝对路径 中\代表命令太长,换一行写)
rpm2cpio
_#将rpm包转换为cpio格式的命令 _
cpio
#是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
[root@localhost ~]# cpio 选项 < [文件|设备]
选项:
-i:copy-in模式,还原
-d:还原时自动新建目录
-v:显示还原过程
[root@localhost ~]# rpm -qf /bin/ls
#查询ls命令属于哪个软件包
[root@localhost ~]# mv /bin/ls /tmp/
#造成ls命令误删除假象
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils- 8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
(./bin/ls 中.代表把指定文件写到当前目录中 centos7路径要使用./usr/bin/ls)
#提取RPM包中ls命令到当前目录的/bin/ls下
[root@localhost ~]# cp /root/bin/ls /bin/
#把ls命令复制会/bin/目录,修复文件丢失
6.3 RPM包管理-yum在线管理
(1) IP地址配置和网络yum源
**
1、IP地址配置
[root@localhost ~]# setup
#使用setup工具
**tips:CentOS7中是 **__**nmtui **__命令
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
把**ONBOOT=“no” **改为
** ONBOOT=“yes“ **
#启动网卡
[root@localhost ~]# service network restart
#重启网络服务
2、网络yum源
[root@localhost yum.repos.d]# vi /etc/yum.repos.d
(cd /etc/yum.repos.d/进入目录 ls查看)
/CentOS-Base.repo
[base] 容器名称,一定要放在[]中
name 容器说明,可以自己随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务 器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成 enable=0就是不生效
gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
gpgkey 数字证书的公钥文件保存位置。不用修改
(2) yum命令
**
1.常用yum命令
**1)查询 **
[root@localhost yum.repos.d]# yum list
#查询所有可用软件包列表
[root@localhost yum.repos.d]# yum search 关键字
#搜索服务器上所有和关键字相关的包
**2)安装 **
[root@localhost yum.repos.d]# yum –y install 包名
选项: install 安装
-y 自动回答yes
3)升级
[root@localhost yum.repos.d]# yum -y update 包名
选项: update 升级
-y 自动回答yes
**4)卸载 **
[root@localhost yum.repos.d]# yum -y remove 包名
选项: remove 卸载
-y 自动回答y e s
tips:update 不加包名全部升级(包括Linux内核,会导致服务器挂掉)
卸载同理(尽量不要卸载)
2、YUM软件组管理命令
[root@localhost~]# yum grouplist
#列出所有可用的软件组列表
[root@localhost~]# yum groupinstall 软件组名
#安装指定软件组,组名可以由grouplist查询出来
[root@localhost~]# yum groupremove 软件组名
#卸载指定软件组
tips:安装软件包组 有空格 用””括起来
双引号
(2) 光盘yum源搭建
光盘yum源搭建步骤
1)挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
2)让网络yum源文件失效 (视频内改名处理)
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mv CentOS-Base.repo \ CentOS-Base.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo \ CentOS-Debuginfo.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Vault.repo \ CentOS-Vault.repo.bak
3)修改光盘yum源文件
[root@localhost yum.repos.d]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
#地址为你自己的光盘挂载地址
file:///media/cdrom/
file:///media/cdrecorder/
#注释这两个不存在的地址 ( 不注释也没事,但是会显示报错)
gpgcheck=1
**enabled=1 **
#把enabled=0改为enabled=1,让这个yum源配置文件生效 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Linux系统中挂载和使用光盘的基本步骤
参考:https://www.cnblogs.com/fengfangbing/p/6889757.html
1. 创建挂载点
1 | mkdir /mnt/cdrom |
在 /mnt 目录下创建一个空文件夹cdrom作为光盘的挂载点(任何一个空目录都可以作为挂载点)。
2. 打开光驱,放入光盘
如果用的是VMware中的虚拟机,进入虚拟机设置,选择“CD/DVD”硬件,勾选“已连接”和“启动时连接”,在连接处,选择“使用ISO映像文件”,浏览选择本地电脑中下载好的ISO光盘镜像文件,确定即可。
3. 执行挂载命令
1 | mount -t iso9660 /dev/sr0 /mnt/cdrom |
iso9660 是光盘的默认文件系统。
由于linux系统可以自动识别光盘的文件系统,故“-t iso9660”也可以省略不写。
光盘的设备文件名是固定的,一般为/dev/cdrom或/dev/sr0。
挂载成功后,就可以通过挂载点读取光盘里面的数据。
4. 查看光盘中的数据
1 | cd /mnt/cdrom |
注意:操作完成之后,如果要取出光盘,必须解除挂载。
5. 解除挂载
不能在挂载点目录下解除挂载,必须先切换到其他目录(如用户家目录)。
1 | cd |
6.4 源码包管理
(1) 源码包和RPM包的区别
- 区别
安装之前的区别:概念上的区别
安装之后的区别:安装位置不同
- RPM包安装位置
- 是安装在默认位置中
|
** | |
---|---|
/etc/ | |
配置文件安装目录 | |
/usr/bin/ | |
可执行的命令安装目录 | |
/usr/lib/ | |
程序所使用的函数库保存位置 | |
/usr/share/doc/ | |
基本的软件使用手册保存位置 | |
/usr/share/man/ | |
帮助文件保存位置 |
- 源码包安装位置
- 安装在指定位置当中,一般是
/usr/local/软件名/
- 安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:
/etc/rc.d/init.d/httpd start
service httpd start
而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:
- /usr/local/apache2/bin/apachectl start
(2) 源码包安装过程
- 安装准备
安装C语言编译器
- 安装注意事项
源代码保存位置:/usr/local/src/
软件安装位置:/usr/local/
如何确定安装过程报错:
安装过程停止
并出现error、warning或no的提示
- 源码包安装过程
下载源码包
解压缩下载的源码包
进入解压缩目录
(可以使用du命令查看目录大小du -sh 目录名)./configure 软件配置与检查
定义需要的功能选项。
检测系统环境是否符合安装要求。
把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑
make 编译
make clean
make install 编译安装
- 源码包的卸载
- 不需要卸载命令,直接删除安装目录即可。
不会遗留任何垃圾文件。
6.5 脚本安装包
- 脚本安装包
脚本安装包并不是独立的软件包类型,常见安装的是源码包。
是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
非常类似于Windows下软件的安装方式。
- Webmin的作用
- Webmin 是一个基于 Web 的 Linux 系统管理界面。您就可以通过图形化的方式设置用户帐号、Apache、DNS、文件共享等服务。
- Webmin安装过程
下载软件
解压缩,并进入加压缩目录
执行安装脚本
没有安装perl的需要先安装perl
安装步骤:
- 通过浏览器打开 http://www.perl.org/get.html。
( https://pan.baidu.com/s/1tenkC16krTUv1dwMzJQl2Q_ 密码:hh1x__)_
下载适用于 Unix/Linux 的源码包。
下载 perl-5.x.y.tar.gz 文件后执行以下操作。
1
2
3
4
5
6$ tar -xzf perl-5.x.y.tar.gz
$ cd perl-5.x.y
$ ./Configure -de
$ make
$ make test
$ make install接下来我们如果 perl -v 命令查看是否安装成功。
安装成功后,Perl 的安装路径为 /usr/local/bin ,库安装在 /usr/local/lib/perlXX, XX 为版本号。
1.941版本(202-01-05发布)
下载地址:
https://pan.baidu.com/s/1tenkC16krTUv1dwMzJQl2Q
密码:hh1x
ip:10000 访问
出现上面情况可能是
未关闭:
1 | $ systemctl stop firewalld |
参考:
1.启动防火墙
systemctl start firewalld
2.禁用防火墙
systemctl stop firewalld
3.查看状态
systemctl status firewalld或者 firewall-cmd –state
(https://blog.csdn.net/root_miss/article/details/83000159)
(https://blog.csdn.net/baidu_36124158/article/details/90603496)
第七章 用户和用户组管理
7.1、用户配置文件
(1) 用户信息文件/etc/passwd
- 用户管理简介
所以越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。
在Linux中主要是通过用户配置文件来查看和修改用户信息
- /etc/passwd
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
0: 超级用户
1-499: 系统用户(伪用户)
500-65535: 普通用户(centos7 从1000开始计算)
第4字段:GID(用户初始组ID)[不推荐修改初始组]
第5字段:用户说明
第6字段:家目录
普通用户:/home/用户名/
超级用户:/root/
第7字段:登录之后的Shell
3、初始组和附加组
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
4、Shell是什么
Shell就是Linux的命令解释器。
在/etc/passwd当中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin,/usr/bin/passwd等。
tips:暂时禁用用户,可以把/bin/bash -> /bin/nologin
(2) 影子文件/etc/shadow
- 影子文件/etc/shadow
第1字段:用户名
第2字段:加密密码
加密算法升级为SHA512散列加密算法
如果密码位是“!!”或“*”代表没有密码,不能登录
第3字段:密码最后一次修改日期
- 使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔时间(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5 字段相比)
0:代表密码过期后立即失效
-1:则代表密码永远不会失效。
第8字段:账号失效时间
- 要用时间戳表示
第9字段:保留
- 时间戳换算
把时间戳换算为日期
- date -d “1970-01-01 16066 days”
把日期换算为时间戳
- echo $(($(date –date=”2014/01/06” +%s)/86400+1))
(3) 组信息文件/etc/group和组密码文件 /etc/gshadow
- 组信息文件/etc/group
第一字段:组名
第二字段:组密码标志
第三字段:GID
第四字段:组中附加用户
- 组密码文件/etc/gshadow
第一字段:组名
第二字段:组密码 (不推荐使用,可以理解为给组设置个小组长)
第三字段:组管理员用户名
第四字段:组中附加用户
7.2、用户管理相关文件
- 用户的家目录
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
- 用户的邮箱
- /var/spool/mail/用户名/
- 用户模板目录
- /etc/skel/
7.3、用户管理命令
(1) 用户添加命令useradd
1、useradd命令格式
[root@localhost ~]#useradd [选项] 用户名
选项:
-u UID: 手工指定用户的UID号
-d 家目录: 手工指定用户的家目录
-c 用户说明: 手工指定用户的说明
-g 组名: 手工指定用户的初始组
-G 组名: 指定用户的附加组
-s shell: 手工指定用户的登录shell。默认是/bin/bash
2、添加默认用户
- [root@localhost ~]# useradd lamp
[root@localhost ~]# grep “lamp” /etc/passwd l
[root@localhost ~]# grep “lamp” /etc/shadow
[root@localhost ~]# grep “lamp” /etc/group
[root@localhost ~]# grep “lamp” /etc/gshadow
[root@localhost ~]# ll -d /home/lamp/
[root@localhost ~]# ll /var/spool/mail/lamp
3、指定选项添加用户
groupadd lamp1
useradd -u 550 -g lamp1 -G root -d /home/lamp1 \ -c “test user” -s /bin/bash lamp1
- 用户默认值文件
- /etc/default/useradd
GROUP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数(7)
EXPIRE= #密码失效时间(8)
SHELL=/bin/bash #默认shell
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
/etc/login.defs
PASS_MAX_DAYS 99999 #密码有效期(5)
PASS_MIN_DAYS 0 #密码修改间隔(4)
PASS_MIN_LEN 5 #密码最小5位(PAM)
PASS_WARN_AGE 7 #密码到期警告(6)
UID_MIN 500 #最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512 #加密模式
(2) 修改用户密码passwd
- passwd命令格式
[root@localhost ~]#passwd [选项] 用户名
选项:
-S 查询用户密码的密码状态。仅root用户可用。
-l 暂时锁定用户。仅root用户可用
-u 解锁用户。仅root用户可用
–stdin 可以通过管道符输出的数据作为用户的密码。
- 查看密码状态
[root@localhost ~]# passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1
#用户名 密码设定时间(2013-01-06) 密码修改间隔时间(0) #密码有效期(99999 ) 警告时间(7) 密码不失效(-1)
- 锁定用户和解锁用户
[root@localhost ~]# passwd -l lamp
[root@localhost ~]# passwd -u lamp
- 使用字符串作为用户的密码
- [root@localhost ~]# echo “123” | passwd –stdin lamp(shell脚本可能会用到)
tips:以下命令也可修改用户密码:
1 | echo “新密码” | passwd --stdin 用户名 |
(3) 修改用户信息usermod&修改用户密码状态chage
1、修改用户信息usermod
[root@localhost ~]#usermod [选项] 用户名
选项:
-u UID: 修改用户的UID号
-c 用户说明: 修改用户的说明信息
-G 组名: 修改用户的附加组
-L: 临时锁定用户(Lock)
-U: 解锁用户锁定(Unlock)
- [root@localhost ~]# usermod -c “test user” lamp
修改用户的说明
- [root@localhost ~]# usermod -G root lamp
把lamp用户加入root组
- [root@localhost ~]# usermod -L lamp
锁定用户
- [root@localhost ~]# usermod -U lamp
解锁用户
2、修改用户密码状态chage
[root@localhost ~]#chage [选项] 用户名
选项:
-l: 列出用户的详细密码状态
-d 日期: 修改密码最后一次更改日期(shadow3字段)
-m 天数: 两次密码修改间隔(4字段)
-M 天数: 密码有效期(5字段)
-W 天数: 密码过期前警告天数(6字段)
-I 天数: 密码过后宽限天数(7字段)
-E 日期: 账号失效时间(8字段)
- [root@localhost ~]# chage -d 0 lamp
这个命令其实是把密码修改日期归0了(shadow第3字段)#这样用户一登陆就要修改密码
(4) 删除用户userdel 用户切换命令su
- 删除用户userdel
[root@localhost ~]# userdel [-r] 用户名
选项:
-r 删除用户的同时删除用户家目录
手工删除用户
[root@localhost ~]# vi /etc/passwd
[root@localhost ~]# vi /etc/shadow
[root@localhost ~]# vi /etc/group
[root@localhost ~]# vi /etc/gshadow
[root@localhost ~]# rm -rf /var/spool/mail/lamp
[root@localhost ~]# rm -rf /home/lamp/
- 查看用户ID
[root@localhost ~]# id 用户名
- 切换用户身份su
[root@localhost ~]# su [选项] 用户名
选项:
: 选项只使用“-”代表连带用户的环境变量一起切换 (env命令查看当前环境变量)
-c 命令: 仅执行一次命令,而不切换用户身份[lamp@localhost ~]$ su – root
#切换成root
- [lamp@localhost ~]$ su - root -c “useradd user3”
#不切换成root,但是执行useradd命令添加user1用户
7.4、用户组管理命令
1、添加用户组
[root@localhost ~]# groupadd [选项] 组名
选项:
-g GID 指定组ID
2、修改用户组
[root@localhost ~]# groupmod [选项] 组名
选项:
-g GID 修改组ID
-n 新组名 修改组名
例:[root@localhost ~]# groupmod -n yxlm lol
#把组名lol修改为yxlm
3、删除用户组
[root@localhost ~]# groupdel [选项] 组名
tips:删除组的时候,组内不允许有初始用户存在。
1 | $ groupadd lol |
- 把用户添加入组或从组中删除
[root@localhost ~]# groupdel [选项] 组名
选项:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除
第八章 权限管理
8.1 ACL权限
8.1.1 ACL权限简介与开启
参考博文:http://c.biancheng.net/view/863.html
ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。
1、ACL权限简介
2、查看分区ACL权限是否开启
[root@localhost ~]# dumpe2fs -h /dev/sda3
#dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项: -h 仅显示超级块中信息,而不显示磁盘块组的详细信息
tips:先用 df -h命令查看信息,我的根是在/dev/mapper/centos-root
CentOS7不支持这个命令,用了 xfs_info也看不懂,希望大神指点
同样问题blog:https://www.cnblogs.com/gaoyuechen/p/8594204.html
3、临时开启分区ACL权限
[root@localhost ~]# mount -o remount,acl /
#重新挂载根分区,并挂载加入acl权限
- 永久开启分区ACL权限
[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl 1 1
#加入acl
[root@localhost ~]# mount -o remount /
#重新挂载文件系统或重启动系统,使修改生效
8.1.2 查看与设定ACL权限
- 查看ACL命令
[root@localhost ~]# getfacl 文件名
#查看acl权限
- 设定ACL权限的命令
[root@localhost ~]# setfacl 选项 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限。
-k 删除默认ACL权限
-R 递归设定ACL权限。
3、给用户设定ACL权限
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# useradd st
[root@localhost ~]# groupadd tgroup
[root@localhost ~]# mkdir /project
[root@localhost ~]# chown root:tgroup /project/
[root@localhost ~]# chmod 770 /project/
[root@localhost ~]# setfacl -m u:st:rx /project/
#给用户st赋予r-x权限,使用“u:用户名:权限”格式
4、给用户组设定ACL权限
[root@localhost /]# groupadd tgroup2
[root@localhost /]# setfacl -m g:tgroup2:rwx project/
#为组tgroup2分配ACl权限。使用“g:组名:权限”格式
1 | [root@local1 ~]# mkdir /lol |
操作前后显示内容对比:
1 | # ========前=========== |
8.1.3 最大有效权限与删除ACL权限
- 最大有效权限mask
- mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限
|
** |
** |
** |
| — | — | — |
|
r |
r |
r |
|
r |
---|
- |
| - |
r | - |
| - |
- |
- |
修改最大有效权限
[root@localhost /]# setfacl -m m:rx 文件名
#设定mask权限为r-x。使用“m:权限”格式
- 删除ACL权限 [root@localhost /]# setfacl -x u:用户名 文件名
#删除指定用户的ACL权限
[root@localhost /]# setfacl -x g:组名 文件名
#删除指定用户组的ACL权限
[root@localhost /]# setfacl -b 文件名
#会删除文件的所有的ACL权限
8.1.4 默认ACL权限和递归ACL权限
- 递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
setfacl -m u:用户名:权限 -R 文件名
tips:只对当前现有目录有作用 ,例如新touch的文件没有设定的权限。
- 默认ACL权限
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件(目录)都会继承父目录的ACL权限。
setfacl -m d:u:用户名:权限 文件名
1 | $ setfacl -m -d:u:timo:rx -R /lol |
8.2 文件特殊权限
8.2.1 SetUID
- SetUID的功能
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x(执行)权限
命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
passwd命令拥有SetUID权限,所以普通可以修改自己的密码
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
- cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容 [root@localhost ~]# ll /bin/cat -rwxr-xr-x 1 root root 47976 6月 22 2012 /bin/cat
- 设定SetUID的方法
- 4代表SUID
chmod 4755 文件名
chmod u+s 文件名
- 取消SetUID的方法
chmod 755 文件名
chmod u-s 文件名
- 危险的SetUID
关键目录应严格控制写权限。比如“/”、“/usr”等
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
tips:
1.新建gailun(盖伦)文件,赋予s权限
1 | 2.然后去掉s,x权限。只保留rw权限。 |
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# rm -rf *
[root@localhost tmp]# touch abc
[root@localhost tmp]# touch abcd
[root@localhost tmp]# touch 012
[root@localhost tmp]# touch 0abc
[root@localhost tmp]# ls ?abc
[root@localhost tmp]# ls [0-9]*
[root@localhost tmp]# ls [^0-9]*
1 | ![](https://cdn.nlark.com/yuque/0/2021/png/1730795/1613634499016-31ee5886-3910-4701-a9e7-1eebbf9e4fd4.png#align=left&display=inline&height=486&margin=%5Bobject%20Object%5D&originHeight=486&originWidth=502&size=0&status=done&style=none&width=502) |
#!/bin/bash
for i in “$*”
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo “The parameters is: $i”
done
x=1
for y in “$@”
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo “The parameter$x is: $y”
x=$(( $x +1 ))
done
1 |
|
#/bin/bash
Author: shenchao (E-mail: shenchao@lampbrother.net)
echo “The current process is $$”
#输出当前进程的PID。
#这个PID就是variable.sh这个脚本执行时,生成的进程的PID
find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后台执行,工作管理我们在系统管理章节会详细介绍
echo “The last one Daemon process is $!”
1 |
|
#!/bin/bash
#Author: shenchao (E-mail: shenchao@lampbrother.net)
read -t 30 -p “Please input your name: “ name
#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
echo “Name is $name “
read -s -t 30 -p “Please enter your age: “ age
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo -e “\n”
echo “Age is $age “
read -n 1 -t 30 -p “Please select your gender[M/F]: “ gender
#使用“-n 1”选项只接收一个输入字符就会执行(都不用输入回车)
echo -e “\n”
echo “Sex is $gender”
1 | ### 10.5 Bash 的运算符 |
[root@localhost ~]$ aa=$(( (11+3)*3/2 ))
#虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级
[root@localhost ~]$ bb=$(( 14%3 ))
#14不能被3整除,余数是2
[root@localhost ~]$ cc=$(( 1 && 0 ))
#逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0
1 | #### (2) 变量测试与内容替换 |
[root@localhost ~]# unset y
#删除变量y
[root@localhost ~]# x=${y-new}
#进行测试
[root@localhost ~]# echo $x new
#因为变量y不存在,所以x=new
[root@localhost ~]# y=””
#给变量y赋值为空
[root@localhost ~]# x=${y-new}
#进行测试
[root@localhost ~]# echo $x
[root@localhost ~]# y=old
#给变量y赋值
[root@localhost ~]# x=${y-new}
#进行测试 [root@localhost ~]# echo $x
old
1 | ### 10.6 环境变量配置文件 |
if [ 条件判断式 ] ; then
程序
fi
#或者
if [ 条件判断式 ]
then
程序
fi
1 |
|
#!/bin/basn
统计根分区使用率
Author: shenchao (E-mail: shenchao@qq.com)
rate=$(df -h | grep “/dev/sda3” | awk ‘{print $5}’ | cut -d “%” -f 1)
把根分区使用率作为变量值赋予变量rate
if [ $rate -ge 80]
then
echo “Warning! /dev/sda3 is full!”
fi
1 |
|
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
1 |
|
#!/bin/bash
#备份mysql数据库。
Author:shenchao(E-mail:shenchao@lampbrother.net)
ntpdateasia.pool.ntp.org&>/dev/null
#同步系统时间
date=$(date+%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量
datesize=$(du-sh/var/lib/mysql)
#统计mysql数据库的大小,并把大小赋予size变量
if [ -d/tmp/dbbak ]
then
echo”Date:$date!” > /tmp/dbbak/dbinfo.txt
echo”Datasize$size”>>/tmp/dbbak/dbinfo.txt
cd/tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt
else
mkdir /tmp/dbbak
echo”Date:date!”>/tmp/dbbak/dbinfo.txt
echo”Datasize:size”>>/tmp/dbbak/dbinfo.txt
cd/tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql
dbinfo.txt &> /dev/null
rm -rf /tmp/dbbak/dbinfo.txt
fi
1 |
|
#!/bin/bash
#Author:shenchao(E-mail:shenchao@lampbrother.net)
port=$(nmap -sT 192.168.1.156 | grep tcp | grep http |awk’{print$2}’)
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port
if [ “$port”==”open” ]
then
echo“$(date)httpdisok!” >> /tmp/autostart-acc.log
else
/etc/rc.d/init.d/httpdstart &> /dev/null
echo”$(date)restarthttpd!!” >> /tmp/autostart-err.log
fi
1 |
|
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
„省略更多条件…
else
当所有条件都不成立时,最后执行此程序
fi
1 |
|
#!/bin/bash
#判断用户输入的是什么文件
#Author:shenchao(E-mail:shenchao@lampbrother.net)
read-p”Pleaseinputafilename:”file
#接收键盘的输入,并赋予变量file
if [ -z “$file” ]
#判断file变量是否为空
then
echo “Error,pleaseinputafilename”
exit 1
elif [ ! -e “$file” ]
#判断file的值是否存在
then
echo “Yourinputisnotafile!”
exit 2
elif [ -f “$file” ]
#判断file的值是否为普通文件
then
echo “$fileisaregularefile!”
elif [ -d “$file” ]
#判断file的值是否为目录文件
then
echo “$fileisadirectory!”
else
echo”$fileisanotherfile!”
fi
1 |
|
case $ 变量名 in
“ 值1”)
如果变量的值等于值1,则执行程序1
; ;
“ 值2”)
如果变量的值等于值2,则执行程序2
; ;
…省略其他分支…
* )
如果变量的值都不是以上的值,则执行此程序
; ;
esac
1 | ``` |
**(3)for 循环 **
语法一
1 | for 变量 in 值1 值2 值3 |
1 | #!/bin/bash |
输出:
this city is beijing
this city is nanjing
this city is shanghai
1 | #!/bin/bash |
语法二
1 | for((初始值;循环控制条件;变量变化)) |
1 | #!/bin/bash |
(4)while 循环与 until 循环
**
- **while循环 **
- while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了。
1 | while [ 条件判断式 ] |
1 | #!/bin/bash |
- until循环
- until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。
1 | until [ 条件判断式 ] |
1 | #!/bin/bash |
11.6 函数
语法:
1 | [ function ] funname [()]{ |
[] -> 表示可以省略
tips:在以上的函数语法中,前面的funcation 表示声明一个函数!!! 可以不写 return -n 是指退出函数
参考:https://www.cnblogs.com/YankaiJY/p/8832436.html
1 | #!/bin/bash |
输出:
1 | [timo@local1 sh]$ sh function.sh |
第十二讲 Linux 服务管理
12.1 服务简介与分类
- 服务的分类
启动与自启动
服务启动:就是在当前系统中让服务运行,并提供功能。
服务自启动:自启动是指让服务在系统开机或重启动之后,随着系统的启动而自动启动服务。
查询已安装的服务
- RPM包安装的服务
- chkconfig –list
#查看服务自启动状态,可以看到所有RPM包安装的服务
- 源码包安装的服务
- 查看服务安装位置,一般是/usr/local/下
RPM安装服务和源码包安装服务的区别
- RPM安装服务和源码包安装服务的区别就是安装位置的不同
源码包安装在指定位置,一般是/usr/local/
RPM包安装在默认位置中
12.2 RPM 包安装服务的管理
(1) 独立服务的管理
- RPM包安装服务的位置
RPM安装服务和源码包安装服务的区别就是安装位置的不同
源码包安装在指定位置,一般是/usr/local/
RPM包安装在默认位置中 /etc/init.d/:启动脚本位置
/etc/sysconfig/:初始化环境配置文件位置
/etc/:配置文件位置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:基于xinetd服务的启动脚本
/var/lib/:服务产生的数据放在这里
/var/log/:日志
- 独立服务的启动
/etc/init.d/独立服务名 start|stop|status|restart|
service 独立服务名 start|stop|restart||status
- 独立服务的自启动
chkconfig [–level 运行级别] [独立服务名] [on|off]
修改/etc/rc.d/rc.local文件
使用ntsysv命令管理自启动
tips: service和chkconfig命令的功能在Centos7中好像都被阉割了。被systemctl取代。
参考博文:Centos7下的systemctl命令与service和chkconfig
(2) 基于xinetd服务的管理
Xinetd:即extended internet daemon,是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。Xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。
- 安装xinetd与telnet
[root@localhost ~]# yum -y install xinetd
[root@localhost ~]# yum -y install telnet-server
- xinetd服务的启动
[root@localhost ~]# vi /etc/xinetd.d/telnet
service telnet <- 服务的名称为telnet
{
flags = REUSE <- 标志为REUSE,设定TCP/IP socket可重用
socket_type = stream <-使用TCP协议数据包
wait = no <-允许多个连接同时连接
user = root <- 启动服务的用户为root
server = /usr/sbin/in.telnetd <- 服务的启动程序
log_on_failure += USERID <- 登陆失败后,记录用户的ID
disable = no <- 服务不启动
}
重启xinetd服务 [root@localhost ~]# service xinetd restart
- xinetd服务的自启动
[root@localhost ~]# chkconfig telnet on
ntsysv
12.3 源码包安装服务的管理
- 源码包安装服务的启动
- 使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明,查看启动脚本的方法。
/usr/local/apache2/bin/apachectl start|stop
- 源码包服务的自启动
[root@localhost ~]# vi /etc/rc.d/rc.local
加入
/usr/local/apache2/bin/apachectl start
- 让源码包服务被服务管理命令识别
- 让源码包的apache服务能被service命令管理启动
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache
- 让源码包的apache服务能被chkconfig与ntsysv命令管理自启动
vi /etc/init.d/apache
chkconfig: 35 86 76
#指定httpd脚本可以被chkconfig命令管理。格式是:
chkconfig: 运行级别 启动顺序 关闭顺序
description: source package apache
#说明,内容随意
[root@localhost ~]# chkconfig –add apache
#把源码包apache加入chkconfig命令
12.4 服务管理总结
脑图地址
第十三章 Linux 系统管理
13.1 进程管理
(1) 进程查看
- 进程简介
- 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
- 进程管理的作用
判断服务器健康状态
查看系统中所有进程
杀死进程
- 查看系统中所有进程
[root@localhost ~]# ps aux
#查看系统中所有进程,使用BSD操作系统格式
[root@localhost ~]# ps -le
#查看系统中所有进程,使用Linux标准命令格式。
USER:该进程是由哪个用户产生的;
PID:进程的ID号;
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEN:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ: 该进程占用虚拟内存的大小,单位KB;
RSS:该进程占用实际物理内存的大小,单位KB;
TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7 是图形终端。pts/0-255代表虚拟终端。
STAT:进程状态。常见的状态有:
R:运行
S:睡眠
T:停止状态
s:包含子进程
+:位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名
tips: ps aux 和 ps -ef 区别
两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
其中各列的内容意思如下
UID //用户ID、但输出的是用户名
PID //进程的ID
PPID //父进程ID
C //进程占用CPU的百分比
STIME //进程启动到现在的时间
TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
CMD //命令的名称和参数
- 查看系统健康状态
[root@localhost]# top [ 选项]
选项:
- d 秒数: 指定top命令每隔几秒更新。默认是3秒 在top命令的交互模式当中可以执行的命令:
?或h: 显示交互模式的帮助
P: 以CPU使用率排序,默认就是此项
M: 以内存的使用率排序
N: 以PID排序
q: 退出top
第一行信息为任务队列信息 [重点关注load average]
第二行为进程信息
第三行为CPU信息 [重点关注 id(空闲cpu百分比)]
第四行为物理内存信息 [重点关注free]
第五行为交换分区(swap)信息
- 查看进程树
[root@localhost]# pstree [选项]
选项:
- p : 显示进程的PID
- u : 显示进程的所属用户
(2) 终止进程
- kill命令
[root@localhost ~]# kill –l
#查看可用的进程信号
[root@localhost ~]# kill -1 22354
#重启进程
[root@localhost ~]# kill -9 22368
#强制杀死进程
- killall命令
[root@localhost]# killall [ 选项][信号] 进程名
#按照进程名杀死进程
选项:
- i : 交互式,询问是否要杀死某个进程
- I : 忽略进程名的大小写
- pkill命令
[root@localhost]# pkill [ 选项] [信号] 进程名
#按照进程名终止进程 选项:
- t 终端号: 按照终端号踢出用户
**按照终端号踢出用户 **
[root@localhost ~]# w
#使用w命令查询本机已经登录的用户
[root@localhost ~]# pkill -t -9 pts/1
#强制杀死从pts/1虚拟终端登录的进程
13.2 工作管理
- 把程序放入后台
tar -zcf etc.tar.gz /etc & [程序还在运行]
[root@localhost ~]# top
#在top命令执行的过程中,按下ctrl+z快捷键 [程序暂停,除非恢复]
- 查看后台的工作
[root@localhost]# jobs [-l]
选项:
-l: 显示工作的PID
注:”+”号表示最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。
“-“号代表倒数第二个放入后台的工作
- 将后台暂停的工作恢复到前台执行
[root@localhost]# fg %工作号
参数:
%工作号:%号可以省略,但是注意工作号和PID的区别
- 把后台暂停的工作恢复到后台执行
[root@localhost]# bg %工作号
注:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行。
即:命令和前台有交互是不能恢复到后台运行。例如:top
13.3 系统资源查看
- vmstat命令监控系统资源
[root@localhost ~]# vmstat [刷新延时 刷新次数]
例如:
[root@localhost proc]# vmstat 1 3
- dmesg开机时内核检测信息
[root@localhost ~]# dmesg
[root@localhost ~]# dmesg | grep CPU
- free命令查看内存使用状态
[root@localhost ~]# free [-b|-k|-m|-g]
选项:
-b: 以字节为单位显示
-k: 以KB为单位显示,默认就是以 KB为单位显示
-m: 以MB为单位显示
-g: 以GB为单位显示
缓存和缓冲的区别
- 简单来说缓存(cache)是用来加速数据从硬盘中“读取”的,而缓冲(buffer)是用来加速数据“写入”硬盘的。
tips:向硬盘写入数据的时候,现存在缓冲中,达到一定规模,写入到硬盘。减少写入写出操作。
- 查看CPU信息
[root@localhost ~]# cat /proc/cpuinfo
- uptime命令
[root@localhost ~]# uptime
#显示系统的启动时间和平均负载,也就是top命令的第一行。w命令也可以看到这个数据。
- 查看系统与内核相关信息
[root@localhost ~]# uname [选项]
选项:
-a: 查看系统所有相关信息;
-r: 查看内核版本;
-s: 查看内核名称。
** 判断当前系统的位数**
[root@localhost ~]# file /bin/ls
**查询当前Linux系统的发行版本 **
[root@localhost ~]# lsb_release -a
- 列出进程打开或使用的文件信息
[root@localhost ~ ] # lsof [ 选项]
列出进程调用或打开的文件的信息
选项:
- c 字符串: 只列出以字符串开头的进程打开的文件
- u 用户名: 只列出某个用户的进程打开的文 件
- p pid : 列出某个PID进程打开的文件
13.4 系统定时任务
- **crond服务管理与访问控制 **
[root@localhost ~]# service crond restart
[root@localhost ~]# chkconfig crond on
- 用户的crontab设置
[root@localhost ~]# crontab [选项]
选项:
-e: 编辑crontab定时任务
-l: 查询crontab任务
-r: 删除当前用户所有的crontab任务
[root@localhost ~]# crontab -e
#进入crontab编辑界面。会打开vim编辑你的工作。
- 执行的任务
举例
*/5 * * * * /bin/echo ”11” >> /tmp/test
5 5 * * 2 /sbin/shutdown -r now
0 5 1,10,15 * * /root/sh/autobak.sh1
2
3
4
5[yasuo@local1 tmp]$ crontab -l
*/1 * * * * echo "你好,明天$(date)" >> /tmp/test
[yasuo@local1 tmp]$ cat test
你好,明天2020年 04月 14日 星期二 00:24:01 CST
你好,明天2020年 04月 14日 星期二 00:25:01 CST
- 执行的任务
**
第十四讲 日志管理
14.1 日志管理简介
**
- 日志服务
在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服务更加先进,功能更多。但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的,所以学习起来基本和syslogd服务一致。
rsyslogd的新特点:
基于TCP网络协议传输日志信息;
更安全的网络传输方式;
有日志消息的及时分析框架;
后台数据库;
配置文件中可以写简单的逻辑判断;
与syslog配置文件相兼容。
确定服务启动
[root@localhost ~]# ps aux | grep rsyslogd
#查看服务是否启动
chkconfig –list | grep rsyslog
systemctl list-unit-files | grep rsyslog ** [Centos7]**
#查看服务是否自启动
- 常见日志的作用
- 除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由rsyslogd服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志。
14.2 rsyslogd日志服务
- 日志文件格式
- 基本日志格式包含以下四列:
事件产生的时间;
发生事件的服务器的主机名;
产生事件的服务名或程序名;
事件的具体信息。
2、/etc/rsyslog.conf配置文件
authpriv.* /var/log/secure
#服务名称[连接符号]日志等级 日志记录位置
#认证相关服务.所有日志等级 记录在/var/log/secure日志中
服务名称
连接符号
- 连接符号可以识别为:
“*”代表所有日志等级,比如:“authpriv.*”代表authpriv认证信息服务产生的日志,所有的日志等级都记录
“.”代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:“cron.info”代表cron服务产生的日志,只要日志等级大于等于info级别,就记录
“.=”代表只记录所需等级的日志,其他等级的都不记录。比如:“*.=emerg”代表人和日志服务产生的日志,只要等级是emerg等级就记录。这种用法及少见,了解就好
“.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。
日志等级
日志记录位置
日志文件的绝对路径,如“/var/log/secure”
系统设备文件,如“/dev/lp0”
转发给远程主机,如“@192.168.0.210:514”
用户名,如“root”
忽略或丢弃日志,如“~”
14.3 日志轮替
- 日志文件的命名规则
如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20130605”。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
- logrotate配置文件
- **把apache日志加入轮替 **
[root@localhost ~]# vi /etc/logrotate.conf
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}
- logrotate命令
[root@localhost ~]# logrotate [选项] 配置文件名
选项:
如果此命令没有选项,则会按照配置文件中的条件进行日志轮替
-v: 显示日志轮替过程。加了-v选项,会显示日志的轮 替的过程
-f: 强制进行日志轮替。不管日志轮替的条件是否已经 符合,强制配置文件中所有的日志进行轮替
第十五章 启动管理
15.1 CentOS 6.x启动管理
(1) 系统运行级别
- 运行级别
- 运行级别命令
[root@localhost ~]# runlevel
#查看运行级别命令
[root@localhost ~]# init 运行级别
#改变运行级别命令
- 系统默认运行级别
[root@localhost ~]# vim /etc/inittab id:3:initdefault: #系统开机后直接进入哪个运行级别
(2) 系统启动过程
启动流程图
initramfs内存文件系统
- CentOS 6.x中使用initramfs内存文件系统取代了CentOS 5.x中的initrd RAM Disk。
他们的作用类似,可以通过启动引导程序加载到内存中,然后加载启动过程中所需要的内核模块,比如USB、SATA、SCSI 硬盘的驱动和LVM、RAID文件系统的驱动
mkdir /tmp/initramfs
#建立测试目录
cp /boot/initramfs-2.6.32-279.el6.i686.img /tmp/initramfs/
#复制initramfs文件
cd /tmp/initramfs/
file initramfs-2.6.32-279.el6.i686.img
mv initramfs-2.6.32-279.el6.i686.img initramfs-2.6.32-279.el6.i686.img.gz
#修改文件的后缀名为.gz
gunzip initramfs-2.6.32-279.el6.i686.img.gz
#解压缩
file initramfs-2.6.32-279.el6.i686.img
cpio -ivcdu < initramfs-2.6.32-279.el6.i686.img
#解压缩
调用/etc/init/rcS.conf配置文件
- 主要功能是两个:
先调用/etc/rc.d/rc.sysinit,然后由/etc/rc.d/rc.sysinit配置文件进行Linux系统初始化。
然后再调用/etc/inittab,然后由/etc/inittab配置文件确定系统的默认运行级别。
由/etc/rc.d/rc.sysinit初始化
获得网络环境
挂载设备
开机启动画面Plymouth(取替了过往的 RHGB)
判断是否启用SELinux
显示于开机过程中的欢迎画面
初始化硬件
用户自定义模块的加载
配置内核的参数
设置主机名
同步存储器
设备映射器及相关的初始化
初始化软件磁盘阵列(RAID)
初始化 LVM 的文件系统功能
检验磁盘文件系统(fsck)
设置磁盘配额(quota)
重新以可读写模式挂载系统磁盘
更新quota(非必要)
启动系统虚拟随机数生成器
配置机器(非必要)
清除开机过程当中的临时文件
创建ICE目录
启动交换分区(swap)
将开机信息写入/var/log/dmesg文件中
调用/etc/rc.d/rc文件
- 运行级别参数传入/etc/rc.d/rc这个脚本之后,由这个脚本文件按照不同的运行级别启动/etc/rc[0-6].d/目录中的相应的程序
/etc/rc3.d/k??开头的文件(??是数字),会按照数字顺序依次关闭
/etc/rc3.d/S??开头的文件(??是数字),会按照数字顺序依次启动
15.2 启动引导程序grub
(1) Grub配置文件
- grub中分区表示
- grub配置文件
vi /boot/grub/grub.conf
default=0 默认启动第一个系统
timeout=5 等待时间,默认是5秒
splashimage=(hd0,0)/grub/splash.xpm.gz 这里是指定grub启动时的背景图像文件的保存位置的
hiddenmenu 隐藏菜单
title CentOS (2.6.32-279.el6.i686) title就是标题的意思
root (hd0,0) 是指启动程序的保存分区
kernel /vmlinuz-2.6.32-279.el6.i686 ro root=UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9
rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us
rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8
rd_NO_LVM rd_NO_DM rhgb quiet
定义内核加载时的选项
- initrd /initramfs-2.6.32-279.el6.i686.img
指定了initramfs内存文件系统镜像文件的所在位置
15.3 系统修复模式
- 单用户模式
**单用户模式常见的错误修复 **
遗忘root密码
修改系统默认运行级别
- 光盘修复模式
重要系统文件丢失,导致系统无法启动
bash-4.1# chroot /mnt/sysimage
#改变主目录
sh-4.1# cd /root
sh-4.1# rpm -qf /etc/inittab
#查询下/etc/inittab文件属于哪个包。
sh-4.1# mkdir /mnt/cdrom
#建立挂载点
sh-4.1# mount /dev/sr0 /mnt/cdrom
#挂载光盘
sh-4.1# rpm2cpio/mnt/cdrom/Packages/initscripts-8.45.3-1.i386.rpm
| cpio -idv ./etc/inittab
#提取inittab文件到当前目录
sh-4.1# cp etc/inittab /etc/inittab
#复制inittab文件到指定位置
3、Linux的安全性
**
第十六章 备份与恢复
16.1 备份概述
- Linux系统需要备份的数据
/root/目录:
/home/目录:
/var/spool/mail/目录:
/etc/目录:
其他目录:
安装服务的数据
- apache需要备份的数据
配置文件
网页主目录
日志文件
mysql需要备份的数据
源码包安装的mysql:/usr/local/mysql/data/
RPM包安装的mysql:/var/lib/mysql/
- 备份策略
- 完全备份:完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录
增量备份
差异备份
16.2 dump和restore命令
- dump命令
[root@localhost ~]# dump [选项] 备份之后的文件名 原文件或目录
选项:
-level: 就是我们说的0-9十个备份级别
-f 文件名: 指定备份之后的文件名
-u: 备份成功之后,把备份时间记录在/etc/dumpdates文件
-v: 显示备份过程中更多的输出信息
-j: 调用bzlib库压缩备份文件,其实就是把备份文件压缩 为.bz2格式,默认压缩等级是2
-W: 显示允许被dump的分区的备份等级及备份时间
备份分区
dump -0uj -f /root/boot.bak.bz2 /boot/
#备份命令。先执行一次完全备份,并压缩和更新备份时间
cat /etc/dumpdates
#查看备份时间文件
cp install.log /boot/
#复制日志文件到/boot分区
dump -1uj -f /root/boot.bak1.bz2 /boot/
#增量备份/boot分区,并压缩
dump –W
#查询分区的备份时间及备份级别的
备份文件或目录
dump -0j -f /root/etc.dump.bz2 /etc/
#完全备份/etc/目录,只能使用0级别进行完全备份,而不再支持增量备份
- restore命令
[root@localhost ~]# restore [模式选项] [选项]
模式选项:restore命令常用的模式有以下四种,这四个模式不能混用。
-C:比较备份数据和实际数据的变化
-i: 进入交互模式,手工选择需要恢复的文件。
-t: 查看模式,用于查看备份文件中拥有哪些数据。
-r: 还原模式,用于数据还原。
选项:
-f: 指定备份文件的文件名
附一章
**
0.0 微信二维码
**
1.1 su 命令报错
或者提示 su: Permission denied
原因:解开了/etc/pam.d/su中的
auth required pam_wheel.so use_uid 行注释
解决方法:
注释本行
将需要的用户加入到wheel组
命令:
1 | usermod -G wheel username |
示例:
roo用户:
zookeeper 用户:
tips:箭头前面,root用户进行usermod -G wheel username操作。
将用户移出用户组:
1 | gpasswd -d userName groupName |
1.2 连接sftp服务器命令
linux sftp远程连接命令
1 | sftp -oPort=60001 root@192.168.0.254 |
使用-o选项来指定端口号。
-oPort=远程端口号
1 | sftp> get /var/www/fuyatao/index.php /home/fuyatao/ |
这条语句将从远程主机的 /var/www/fuyatao/目录下将 index.php
下载到本地 /home/fuyatao/目录下。
1 | sftp> put /home/fuyatao/downloads/Linuxgl.pdf |
这条语句将把本地 /home/fuyatao/downloads/目录下的 linuxgl.pdf文件上传至远程主机/var/www/fuyatao/ 目录下
1.3 Linux下Shell日期的格式
常用的时间域如下:
1 | % Y 年(例如:1970,2018等) |
使用不带参数的date命令获取当前时间日期。这样得到的一般是CST标准格式的时间。
1 | [alvin@VM_0_16_centos ~]$ date |
获取特定以特定格式,命令为:date + ‘format’,注意这里大小写敏感。
1 | [alvin@VM_0_16_centos ~]$ date +'%Y-%m-%d' |
获取昨天的日期。可在上述的命令里再加上-d选项。
1 | [alvin@VM_0_16_centos ~]$ date -d 'yesterday' +'%Y/%m/%d %H:%M:%S' |
获取当前时间的前一个小时
1 | [alvin@VM_0_16_centos ~]$ date -d 'today -1 hour' +'%Y%m%d%H' |
获取指定日期前一天。这其实就是求相对时间。比如下面求国庆的前一天日期:
1 | [alvin@VM_0_16_centos ~]$ date -d '20181001 -1 day' +'%Y%m%d' |
将日期转换为时间戳时间戳
1 | [alvin@VM_0_16_centos ~]$ date -d "Nov 4 15:49:41 CST 2018" +%s |
将时间戳转换回日期
1 | [alvin@VM_0_16_centos ~]$ date -d @1541317781 |
将时间戳转换为日期,并按特定格式显示
1 | [alvin@VM_0_16_centos ~]$ date -d @1541317781 +'%Y%m%d %H:%M:%S' |
1.4 VM 中Linux时间恢复
https://www.cnblogs.com/luchuangao/p/7795293.html