Linux由浅入深
1. 互联网企业服务器品牌
1. 大多数都是DELL
当前:2U R730 以前:1850 2850 R900
2. HP
当前:HP DL 380 G5 G6 G7 HP DL 580 G6
3. IBM
2. 电源
核心业务用双电,特别是单个服务器,双路电(AB),如果是集群的话,可以例外。服务器电源支持热插拔。
3. CPU:
一般的企业服务器:CPU颗数2-4颗,单颗CPU是四核,内存32-64G。
做虚拟化的宿主机:CPU颗数4-8颗,内存总量一般是48-128G,6-10虚拟机。
4. 内存:
进程:正在运行的程序
守护进程:持续保持运行着的程序
程序:调用的程序代码,静态的
5. 大企业高并发案例
高并发,大数据量写数据:会把数据先写到内存,为了减少磁盘IO,然后再写到磁盘中。
优点:写数据到内存,性能高速快(微博,微信,SNS,秒杀)
缺点:可能会丢失一部分内存中的数据
解决方法:
1. 服务器主板上安装蓄电池,断电瞬间把内存数据回写到磁盘。
2. UPS,不间断供电。
3. 选双电路的机房,使用双电源。
6. 大中小企业案例
对于并发不是很大,数据不是特别大的网站,读多写少的业务,先把磁盘的数据读入到内存,然后对外通过读内存提供访问服务。
7. 磁盘
常用磁盘3.5英寸。
磁盘接口:IDE,SCSI,SAS,SATA,SSD
性能与价格:SSD>SAS>SATA
企业级服务器应用:
1. 常规正式工作场景主选SAS硬盘(转速15000转/分,机械磁盘转速高性能好)
2. 不对外提供访问的服务器,SATA(7200-10000转/分),容量大,价格便宜,速度比较慢。
3. 高并发访问,小数据量,可以选择SSD。
几乎企业运维和架构师的网站优化,服务器优化核心,都是磁盘和内存的使用比例优化。
8. RAID卡
1. 基本作用:网站数据量很大,单块盘装不下,就需要工具把所有硬盘整合一个大磁盘,再在这个大磁盘上分区放数据。
2. RAID整合方式:RAID 01 5 10
RAID0:读写速度最快,可以是N块。缺点:没有冗余
RAID1:只能两块盘,有冗余,缺点:成本高
RAID5:至少三块盘,容量是n-1,读写性能基于1和0之间
RAID10:至少四块盘,容量也是一半,特点与RAID0一样,读写速度快,缺点:成本高
冗余从好到坏:raid1,raid10,raid5,raid0
性能从好到坏:raid0,raid10,raid5,raid1
成本从高到低:raid10,raid1,raid5,raid0
3. 互联网公司:
单台服务器,重要,盘不多,RAID1,特别是系统盘RAID1,数据量大就选择RAID10。
数据库服务器,主库raid10,从库raid5,raid10
web服务器,如果没有太多数据raid5,raid0
9. 光驱
装系统,建议淘汰光驱,为老板省钱。
U盘安装,网络安装。
10. 安装系统(略)
11. 配置系统的IP地址
/etc/sysconfig/network-scripts/ifcfg-ens32
centos6: setup配置也可以,
centos7: 默认没有安装setup命令,可以安装一下(没有测试过)
12. 常用命令
1. 创建目录
mkdir /data
mkdir -p /data/mysql/: 如果父目录不存在,也会创建父目录和子目录,如果不带-p,会有报错。
mkdir -m 755 /data/mysql:创建目录并且为目录设置权限
2. 显示
ls /data 显示/data下的所有内容
ls -l 显示长格式
ls -R 显示目录下的所有内容,包含子目录
ls -F 给文件或者名称后面添加符号,/,*,@
ls -p 只给目录后面添加一个/
ls -t 按修改时间排序
ls -r 倒序排列
ls --color=auto 显示颜色
3. 切换目录
cd
4. 显示当前工作路径
pwd
5. 创建文件
touch /data/yangjianbo.txt
如果文件存在,修改文件的时间戳。
6. 编辑文件
vi
vim 高亮显示,写脚本用这个
7. 查看文件内容
cat /yangjianbo/yangjianbo.txt
cat >/yangjianbo/yangjianbo.txt
然后输入内容,按ctrl+c退出,就能写入内容了。
cat >>/yangjianbo/yangjianbo.txt<< EOF 用这种方式可以追加多行,这个文件要提前写好。
sfsdfsdfd
EOF
这个EOF可以换成任意的字符,但是最好用这个就行了。
8. echo命令
echo 'yangjianbo' > yangjianbo.txt
如果文件已经存在,会清空原来的内容,所以要注意备份原文件。
如果没有,会创建,并且添加内容。
如果不想覆盖,需要是用追加的方式。echo 'yiding' >> yangjianbo.txt 追加到文件内容的最后一行。
9. 特殊符号
>或1> 输出重定向,会清除原有内容
>>或1>> 追加输出重定向到文件尾部,不会清除原有内容
0< 输入重定向 grep 'a' <yangjianbo.txt 注意:后面一般为文件
0<< 追加输入重定向 前面已经有例子了
2> 错误重定向 把错误信息输入到后面文件中,会删除文件原有内容
2>> 错误追加重定向 不会删除文件原有内容
总结:箭头的流向就是数据的流向
生产常用方法:
1. echo yangjianbo 1>a.txt 2>a.txt 把正确错误的信息都输出到a.txt中
2. echo yangjianbo 1>a.txt 2>&1 把正确错误的信息都输出到a.txt中 推荐方法
3. echo yangjianbo &>a.txt 把正确错误的信息都输出到a.txt中
10. xargs命令
从标准输入获取内容创建和执行命令
[root@yangjianboinbeijing yangjianbo]# echo 1 2 3 4 5 6 7 8 >yang.txt
[root@yangjianboinbeijing yangjianbo]# cat yang.txt
1 2 3 4 5 6 7 8
[root@yangjianboinbeijing yangjianbo]# xargs -n 4 <yang.txt
1 2 3 4
5 6 7 8
11. cp命令
cp yang.txt /home 默认只能拷贝文件,不能是目录
-r: 拷贝目录和文件,递归
-a: 相当于pdr
-p: 保持属性
12. mv命令 移动文件命令
mv /yangjianbo /wangyanhe 第一个目录最好不用是/yangjianbo/
13. rm命令
默认删除文件,不能删除目录
-r: 递归,删除目录
-f: 强制删除目录
删除不提示,\rm -rf /yangjianbo
删除命令一定要慎用,删除之前一定要备份。
14. find命令(很重要) 查找命令
find /etc -type f -name "my.cnf" 查找/etc下的类型为file的名字叫做my.cnf的文件
find /home -type f -name "yang.txt" -exec rm {} \; 查找/home目录下的文件为yang.txt,然后执行rm命令。
-type:类型 f为文件,d为目录,c为字符类型,b为block类型
-name 文件名
-mtime +7 7天之前 7 第七天 -7 最近七天
find /home -type f -name "*.log" -mtime +15 | xargs rm -f 查找并删除/home目录下的文件,后缀为log的,15天之前的文件。
-maxdepth 1 查找目录的一级目录
15. 管道命令
|
16. grep命令
-v: 排除
grep yangjianbo 88.txt
grep -v yangjianbo 88.txt
-B: 过滤出某行和之前多少行
grep 30 -B 10 yang.txt 过滤出第30行之前10行的内容
grep 20 -A 10 yang.txt 过滤出第20行之后10行的内容
grep 25 -C 5 yang.txt 过滤出第25行之前之后的5行的内容
-i: 忽略大小写
-n: 打印行号
-E: 使用扩展正则表达式 与egrep功能一样
-o: 只显示匹配的字符串,而不是整行
17. head命令 默认读取从头开始10行
读取文件内容,从第一行开始读取.
head -2 yang.txt
-n
18. tail命令 默认从最后一行开始10行
从最后一行开始读取。
tail -2 yang.txt
-n 3 查看倒数3行的内容
-f 查看日志尾部的实时变化
-F 查看日志尾部的实时变化,它有重试的功能,即使文件删除,重新创建它还能继续跟踪日志。
tailf命令
可以实时查看日志文件尾部
19. tree命令
yum install tree -y
安装tree工具
如果目录下出现乱码,因为字符集的问题,修改LANG=en
tree -L 1 / 查看根目录的第一级目录
20. alias命令
查看别名
取消别名:unalias cp 取消cp的别名
别名的作用:给危险命令加一些保护参数,防止人为误操作
简化操作:
alias net='cat /etc/sysconfig/network-scripts/ifcfg-ens32'
以后直接执行命令net,就显示内容了。
这个别名重启以后,就没有了,所以要保存到文件中。在用户目录的/root/./bashrc
在这个文件中,添加别名就好了。
21. seq命令
22. sed命令 流编辑器,实现文件的增删改查
-n: 取消默认输出,输出过滤出来的行
p: 打印的意思
sed -n '20,30'p yang.txt 打印第20行到第30行
sed -n '5'p yang.txt 打印第5行
sed -n '$'p yang.txt 打印最后一行
替换
sed 's#yangjianbo#liudehu#g' ceshi.txt s替换 g全局 #分隔符 第一个#和第二个#(查找的内容) 第二个#和第三个#(替换的内容)
-i: 要修改内容,默认只是输出一下
-e: 允许多项编辑
23. awk命令
awk 'NR>19 && NR<31' yang.txt NR代表行号 打印20行到30行之间的内容
awk 'NR==5' yang.txt 打印第5行 一定要注意等号是两个
24. df命令
显示各个分区文件系统的硬盘使用情况,有多个参数。
-h: 以人类可读的方式显示内容
-i: 查看节点的使用情况
13. Linux常用快捷键
1. tab键
补全命令
补全路径
2. ctrl+l
清屏相当于clear命令
3. ctrl+shift+c
复制命令
4. ctrl+shift+v
粘贴命令
5. ctrl+a
到开头
6. ctrl+e
到结尾
7. ctrl+r
搜索命令
14. linux系统32wei和64位的区别
1. 当初设计的定位不同:64位满足机械设计和分析,32位给普通用户
2. 安装要求配置不同:64位只能安装到64位电脑,32位可以安装64位电脑上
3. 运算速度不同:64位数据指令,
4. 寻址能力不同:32位只能支持4G,64位支持更多
15. 如何查看系统是32位还是64位
uname -m
ll -d /lib64
16. 如何查看操作系统版本
cat /etc/redhat-release
17. linux安装知识软raid和lvm分区
lvm:逻辑卷管理,分区标号为8e,一般不用LVM分区。
18. Vmware网络模式
1. 桥接模式 最接近真机的模式
2. NAT模式 不对等的
3. Host-only 只能与宿主机通信
19. Linux分区
1. 硬盘使用前要进行分区,分区完成后,要格式化,创建文件系统,存放数据
2. 分区:
1. 主分区
2. 扩展分区
3. 逻辑分区
4. 主分区+扩展分区<=4
5. 扩展分区不能直接使用,还需要在上面创建逻辑分区,逻辑分区可以有多个。
6. 主分区+扩展分区:sda1-4
7. 逻辑分区只能从5开始
8. /boot 引导分区 200m
swap 内存的1.5倍,内存大于8G,给8G-16G就可以了。
/ 根分区 剩余所有空间
这种分区方式适用于:不是很重要的业务,例如集群的某个节点
9. 其他分区方案:数据重要(数据库,存储服务器)
/boot 引导分区
swap: 交换分区
/: 指定大小 100G-200G
/data: 数据分区 剩余所有空间
10. 其他分区方案:特大网站,门户网站
/boot 引导分区
swap: 交换分区
/: 指定大小 100G-200G
剩余空间不分配,哪个部门领到了服务器,根据需求再进行分区
20. 挂载点
新加一块硬盘,需要设置挂载点
21. 文件系统
常用的:ext2/3/4,一般为ext4
xfs:centos7用的文件系统
22. 安装Linux系统后基本调优
1. 关闭SELinux功能
sed -i 's#enforcing#disabled#g' /etc/selinux/config
修改完以后,要使它生效,需要重启啊。
getenforce 获取selinux的配置
setenforce 0 禁用selinux
2. linux运行级别
0 关机
1 单用户模式
2
3 命令行模式
4 未使用
5 图形
6 重启
3. 查看当前运行级别
runlevel
init 5 切换运行级别
/etc/inittab 修改配置文件的运行级别
4. 关闭防火墙
centos6: /etc/init.d/iptables stop 开机也关闭 chkconfig iptables off
centos7: systemctl stop firewalled systemctl disabled firewalled
5. 中文显示
centos6: /etc/sysconfig/i18n,修改里面的变量LANG="zh_CN.UTF-8"
centos7: /etc/locale.conf,修改里面的变量LANG="zh_CN.UTF-8"
6. linux时间同步
调整时区:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
同步时间:ntpdate ntp1.aliyun.com
7. 设置帐号超时时间
export TMOUT=10
8. 历史命令
history -c 清空所有命令历史
history -d 5 删除指定的命令行
export HISTSIZE=5 设置记录历史命令的大小
对应文件的记录数: /root/.bash_history
要想永久生效,就要使用追加到/etc/profile文件中。
echo 'export TMOUT=300' >>/etc/profile
echo 'export HISTSIZE=5' >>/etc/profile
echo 'export HISTFILESIZE=5' >>/etc/profile
执行完以后,执行:source /etc/profile
9. 隐藏Linux版本信息
清空/etc/issue
> /etc/issue
10. centos7要注意修改网卡名称
11. centos的sshd配置文件修改,安全优化
12. centos采用sudo控制用户对系统的使用
23. Linux目录结构介绍及目录和磁盘分离原理
特点:
1. /根目录是所有目录的顶点
2. 目录结构是倒树结构
3. 目录和磁盘分区是没有关联的
4. /下不同的目录可能会有不同的分区或磁盘
5. 如果设备不挂载是看不到的,挂载点的实质是一个目录
挂载命令:
mount /dev/cdrom /mnt
各个目录:
目录层次标准FHS
/bin 二进制命令所在的目录
/boot 系统内核和引导程序所在的目录
/dev 硬件设备
/etc 配置文件
/usr 用户安装程序
/var 日志所在目录
/home 普通用户家目录
/root root用户家目录
常用子目录:
/etc/inittab 开机运行级别
/etc/fstab 开机自动挂载目录的配置文件
/etc/sysconfig/network-script/ifcfg-eth0 第一块网卡配置文件
/etc/init.d/ 程序开机启动脚本所在目录,使用yum/rpm安装的程序所在目录
/etc/rc.local 开机执行命令的配置文件
/etc/issue 登录之前信息显示文件
/etc/motd 登录之后显示信息配置文件
/etc/hosts 本地解析文件
/etc/resolv.conf 设置DNS文件
/etc/passwd 用户账户保存目录
/etc/group 用户组保存目录
/etc/shadow 用户密码文件
/etc/services 程序端口文件
/etc/profile 全局环境变量配置文件(所有用户)
/etc/bashrc 全局环境变量配置文件(所有用户)
~/.bashrc 局部环境变量配置文件 当前用户
/usr/local 默认软件安装目录
/usr/src 源码安装目录
/var/log/messages 系统日志
/var/log/secure 安全日志
/proc/cpuinfo 查看cpu
/proc/meminfo 查看内存
/proc/loadavg 查看负载
/proc/mounts 查看挂载
24. Linux通配符
|
符号 |
作用 |
|
Linux通配符 |
|
|
* |
匹配任意(0个或多个)字符或字符串,包括空字符串 |
|
? |
匹配任意1个字符,有且只有一个字符 |
|
[abcd] |
匹配abcd中任何一个字符,abcd也可是其他任意不连续字符 |
|
[a-z] |
匹配中a到z之间的任意一个字符, a到z表示范围,字符前后要连续,-表示范围的意思,也可以用连续数字[1-9] |
|
[!abcd] |
同[^abcd],表示不匹配括号里面的任何一个字符,也可为[!a-d] |
|
Linux特殊符号:路径和位置相关 |
|
|
~ |
用户的家目录,超级用户为/root,普通用户为/home |
|
- |
代表上一次(相对于当前路径)用户所在的路径 |
|
. |
代表当前目录(点号还有很多其它含义,暂且不表) |
|
.. |
代表上一级目录 |
|
Linux特殊符号:引用字符串命令相关 |
|
|
'' |
单引号,所见即所得,即输出单引号内容时会将单引号内的所有内容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,被称之为强引用 |
|
"" |
双引号,输出双引号内的所有内容时;如果内容中有命令(要反引下)、变量、特殊转义符等,会先把变量、命令、转义字符解析出结果,然后在输出最终内容来,推荐使用,被称为弱引用 |
|
空 |
赋值时,如果变量内容又空格会赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体输出,如果内容中有命令(要反引下)、变量等,会先把变量、命令解析出结果,然后输出最终内容,如果字符串中带有空格等特殊字符,则有可能无法完整的输出,因此需要改加双引号,一般连续的字符串、数字、路径等可以不加任何引号赋值和输出,不过无引号的情况最好用双引号替代之,特别是变量赋值时 |
|
`` |
反引号,一般用于引用命令,执行的时候命令会被执行,相当于$(),赋值和输出都要将命令用``引起来 |
|
Linux特殊符号:其它 |
|
|
; |
表示一个命令的结束,也是命令间的分隔符 |
|
# |
1)表示是注释内容,给管理员看的注释部分,系统不会执行井号开头的内容2)root用户的命令提示符 |
|
| |
表示管道,将一个命令处理后的中间内容输出给下一个命令继续处理 |
|
$ |
1)字符串前加$符号,代表字符串变量内容2)普通用户命令提示符 |
|
\ |
逃脱符,即将有特殊含义的字符还原成字符本意,例如\$仅代表美元符 |
|
{} |
1)生成序列2)引用变量作为变量与普通字符分隔 |
|
& |
将程序放入后台运行符,例如:/bin/sh /scripts/oldboy.sh &(后文会讲) |
|
Linux特殊符号:重定向系列特殊字符 |
|
|
0 |
表示标准输入(stdin),配合<或<<使用,数据流从右向左 |
|
1 |
表示标准输出(stdou),配合>或>>使用,数据流从左向右 |
|
2 |
标准错误(stderr),配合>或>>使用,数据流从左向右 |
|
0<或< |
标准输入重定向,清空已有内容,数据从文件流向处理的命令 |
|
0<<或<< |
追加输入重定向,追加内容到底部,数据从文件流向处理命令 |
|
1>或> |
标准输出重定向,正常输出重定向到文件,会清空已有内容 |
|
1>>或>> |
标准输出追加重定向,将内容追加到文件底部,不清空已有内容 |
|
2> |
错误输出重定向,将标准错误内容重定向到文件,如文件存在内容则清空 |
|
2>> |
错误输出追加重定向,将标准错误内容追加到文件底部,不会清空已有内容 |
25. Linux三剑客正则表达式
1. * 匹配0个或多个前一个字符
2. + 匹配1个或多个前一个字符
3. . 匹配任意一个单个字符,除了\n
4. ? 匹配0个或1个前一个字符
5. ^ 匹配以什么为首
6. $ 匹配以什么结尾
7. {n} 匹配前一个字符n次
例子:
[root@nginx-server-proxy tmp]# egrep -n "o{2}" test.txt
2:olldboooy
[root@nginx-server-proxy tmp]# egrep -n "o{1,}" test.txt
1:oldboy
2:olldboooy
[root@nginx-server-proxy tmp]# egrep -n "o{,1}" test.txt
1:oldboy
2:olldboooy
3:test
[root@nginx-server-proxy tmp]# egrep -n "o{1,6}" test.txt
1:oldboy
2:olldboooy
[root@nginx-server-proxy tmp]# egrep -n "o{2,6}" test.txt
2:olldboooy
8. [abc] 匹配abc其中一个字符
9. [^abc] 匹配非abc其中一个字符
10. (aaa|bbb) 匹配aaa或者bbb
11. 利用正则取得服务器的IP地址
ifconfig eno16777736 | sed -n '2p' | sed 's#^.*net ##g'| sed 's# net.*$##g'
ifconfig eno16777736 | sed -n '2s#^.*net ##gp'|sed 's# net.*$##g'
26. Linux用户和组管理
1. Linux用户分类
1. 超级用户: UID=0,root
2. 普通用户: UID500-65535
3. 虚拟用户: UID1-499,一般不能登录,只是傀儡
每个文件和进程,都需要对应一个用户和组
4. 和用户关联的四个文件
/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow
2. 用户管理
1. useradd 添加用户,修改4个文件
2. userdel 删除用户,修改4个文件
3. passwd 设置用户密码,修改/etc/shadow
4. usermod 修改用户的命令,修改用户名和家目录
5. change 修改用户密码有效期
6. id 查看用户UID,GID
7. su 切换用户
8. sudo
9. vim sudo
3. 用户组管理
1. groupadd 添加组
2. groupdel 删除组
4. 用户登录的时候,出现下面的情况:
-bash-4.2$
解决方法: cp -a /etc/skel/.bash* /home/用户
/etc/skel目录的作用:
1. 可以把通知的内容放到skel目录下,让登录的人去看
2. 统一初始化新用户的环境变量
可以编辑/etc/skel/.bash_profile
5. /etc/login.defs配置文件
1. 创建用户的时候,执行创建家目录,邮件,密码有效期。
6. /etc/default/useradd
1. 添加用户的时候,用户属性默认的配置文件
[root@nfs-server ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
7. useradd命令详解
-c 注释
-d 设置家目录
-e expire_date 过期时间
-g 指定属组
-G 指定属多个组
-M 不创建家目录
-s 指定shell
-u 指定UID
例子:添加用户oldboy6,并设置用户注释信息为HandsomeBoy,指定uid 806 ,归属组root,oldboy,sa,指定shell类型为/bin/sh,设置家目录为/oldboy6
useradd -c "HandsomeBoy" -u 806 -G root,oldboy,sa -s /bin/sh -d /oldboy6 oldboy6
查看/etc/passwd,内容如下:
oldboy6:!!:806:1012:HandsomeBoy:/oldboy6:/bin/sh
例子:创建用户并设置过期时间
[root@nfs-server home]# useradd oldboy7 -g 1006 -e "2018/08/18" -M
useradd:-e 参数需要有影子密码
因为我的/etc/shadow,名为不知道为什么是/etc/shadow-,所以一直添加不成功。
修改名称以后,就正常了。
8. groupadd详解
-g 指定gid
9. passwd详解
普通用户只能改自己的密码
root可以修改其他用户的密码 passwd 用户名
--stdin 非交互式修改密码
[root@nfs-server etc]# echo "123456" | passwd --stdin oldboy
例子:要求oldboy用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知oldboy用户,过期后30天禁止用户登录。
passwd -n 7 -x 60 -w 10 -i 30 oldboy7
[root@nfs-server etc]# chage -l oldboy7 最近一次密码修改时间 :7月 23, 2018 密码过期时间 :9月 21, 2018 密码失效时间 :10月 21, 2018 帐户过期时间 :8月 18, 2018 两次改变密码之间相距的最小天数 :7 两次改变密码之间相距的最大天数 :60 在密码过期之前警告的天数 :10
10. chage命令详解
1. 修改用户密码有效期限
2. -l 列表
chage -l oldboy7
查看的就是/etc/shadow的oldboy7的有效期限
3. -E 修改账户过期日期
[root@nfs-server etc]# chage -E "2018/08/30" oldboy7 [root@nfs-server etc]# chage -l oldboy7 最近一次密码修改时间 :7月 23, 2018 密码过期时间 :9月 21, 2018 密码失效时间 :10月 21, 2018 帐户过期时间 :8月 30, 2018 两次改变密码之间相距的最小天数 :7 两次改变密码之间相距的最大天数 :60 在密码过期之前警告的天数 :10

浙公网安备 33010602011771号