Linux
学习流程
- linux环境下基本操作命令
- 文件操作命令rm mkdir chmod chown
- 编辑工具使用 vi vim
- linux用户管理 useradd userdel usermod
- linux各种配置
- 环境变量配置
- 网络配置
- 服务配置
- linux下如何搭建对应语言的开发环境
- 能编写shell脚本, 对linux服务器进行维护
- 能进行安全设置,防止攻击,保障服务器正常运行,能对系统调优
- 深入理解linux系统,对内核有研究,熟练掌握大型网站应用架构组成,并熟悉各个环节的部署和维护方法
学习方法
- 不需要掌握所有的Linux指令,要学会,要学会查询手册和百度
- 先 know how, 再 know why
- 计算机是一门”做中学”的学科
- 适当囫囵吞枣
- 重点是实操
Linux 基础
总结
- 目录中有且只有一个根目录
- 各个目录存放的内容规划好的,不要乱放文件
- linux以文件形式管理设备,在linux中,一切皆为文件
- 脑海中应该有一个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 | shutdown |
用户登录&注销
- 登录时尽量不使用root用户登录.使用普通用户登录,需要权限时使用
su - username
来切换为管理员身份 - 提示符下输入logout即可注销
- 图形界面无效,运行级别3有效
用户管理
用户
添加用户
1 | useradd username |
指定密码
1 | passwd username |
删除用户
1 | userdel 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]
帮助指令
对某个指令不熟悉时候,使用帮助指令来了解这个指令的使用
- man [命令]
- 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 文件
- 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
等于
- -name<查询方式> 按照指定的文件名查找模式查找文件
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
权限管理
文件基本属性
在 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
- 给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任务
步骤
cron -e
- */1 * * * * ls -l /etc >> /tmp/to.txt
- 保存后退出
- 在每一分钟都会调用
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
- 每隔一分钟,将当前的日期信息,追加到/tmp/mydate文件中
磁盘分区和挂载
分区方式
mbr分区
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB,但具有最好的兼容性
gtp分区
- 支持无限多个主分区(但操作系统可能限制,如windows下最多128个)
- 最大支持18EB的最大容量 (EB=1024PB, PB=1024TB)
- Windows7 64位之后支持gtp
Linux分区
- Linux 无论有几个分区,分给哪一个目录使用,它归根到底就只有一个跟目录,一个独立且唯一的文件结构. Linux中每个分区都是用来组成整个文件系统的一部分
- Linux 采用了一种叫”载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来. 这时要载入的一个分区将使它的存储空间在一个目录下获得
如何增加磁盘
- 虚拟机添加磁盘
- 分区
fdish /dev/sdb
- 格式化
mkfs -t ext4 /dev/sdb1
- ext4是分区类型
- 挂载(指令:
mount 设备名 挂载目录
)(卸载:umount 设备名或者挂载目录
)- 先创建一个目录 /home/newdisk
- 挂载
mount /dev/sdb1 /home/newdisk
(卸载umount /dev/sdb1 或者 umount /newdisk
)
- 设置自动挂载(重启系统,仍然挂载)
vim etc/fstab
- 写入 /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
- 查询opt目录占用情况,深度为1
树状结构显示
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列表:
卸载
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