Linux常用操作
- CentOS7服务配置 - systemctl
- 修改DNS服务器配置
- sudo权限配置
- 磁盘分区&挂载
- 直接对磁盘进行分区挂载:标准分区
- 查看分区
- 创建分区
- 逻辑卷管理方式:LVM
- 查看逻辑卷
- 创建逻辑卷
- 磁盘挂载
- 直接对磁盘进行分区挂载:标准分区
- split
- sed
- grep
- awk
- chattr
- named
- timedatectl
- ntp
- tree
- dd
- 磁盘性能指标--IOPS 理论
- hdparm
- fio
- iptables
- 四表五链示意图:
- RPM 与 YUM 区别和联系
- RPM
- YUM
- swap
- 启用swap
- 关闭swap
本文仅记录简单常用的操作
CentOS7服务配置 - systemctl
# 查看全部服务命令
systemctl list-unit-files --type service
# 查看服务命令
systemctl status name.service
# 启动服务
systemctl start name.service
# 停止服务
systemctl stop name.service
# 重启服务
systemctl restart name.service
# 增加开机启动
systemctl enable name.service
# 删除开机启动
systemctl disable name.service
配置目录:/usr/lib/systemd/system
一个简单的配置模板
$ cat mongod.service
Description=MongoDB Database Server
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
详细说明可以参考
修改DNS服务器配置
在/etc/resolv.conf
中修改(chattr -i /etc/resolv.conf
)
格式:nameserver 192.168.106.133
sudo权限配置
编辑/etc/sudoers
找到root ALL=(ALL) ALL
在下面添加
# 允许用户youruser执行sudo命令(需要输入密码)。
youruser ALL=(ALL) ALL
# 允许用户组yourgroup里面的用户执行sudo命令(需要输入密码)。
%yourgroup ALL=(ALL) ALL
# 允许用户youruser执行sudo命令,并且在执行的时候不输入密码。
youruser ALL=(ALL) NOPASSWD: ALL
# 允许用户组yourgroup里面的用户执行sudo命令,并且在执行的时候不输入密码。
%yourgroup ALL=(ALL) NOPASSWD: ALL
可能需要使用
# 修改sudo文件的写权限
chmod u+w /etc/sudoers
chmod u-w /etc/sudoers
磁盘分区&挂载
直接对磁盘进行分区挂载:标准分区
查看分区
[root@TEST1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 500G 0 disk
└─vdb1 253:17 0 500G 0 part /home/data
创建分区
逻辑卷管理方式:LVM
查看逻辑卷
[root@TEST2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 499G 0 part
├─centos_centos7--6-root 253:0 0 50G 0 lvm /
├─centos_centos7--6-swap 253:1 0 2G 0 lvm [SWAP]
└─centos_centos7--6-home 253:2 0 447G 0 lvm /home
sdb 8:16 0 2T 0 disk
sr0 11:0 1 4M 0 rom
sr1 11:1 1 1024M 0 rom
创建逻辑卷
磁盘挂载
# 格式化
mkfs.ext3 /dev/xvde
# 创建路径
mkdir -p /opt/data
# 挂载磁盘到路径下
mount /dev/xvde /opt/data
# 设置开机自动挂载
echo '/dev/xvde /opt/huawei ext3 defaults 0 0' >> /etc/fstab
split
# -b 支持K, M, G, T, P, E, Z, Y
split -b 10k data.file
# -d 使用数字作为后缀, 作为输出文件名的后缀
# -a 指定后缀长度为3
split -b 10k data.file -d -a 3
# 还可以指定前缀‘split_file’
split -b 10k data.file -d -a 3 split_file
sed
sed -i 's\111\aaa\g' file
grep
grep -rn "text" path
awk
tail -f nohup.out | grep mongo查询时间 | awk '{match($0,/mongo查询时间:([0-9]*), 本次圈搬运小哥数量:([0-9]*)/,a)}{print a[1],a[2]}'
chattr
- A:即Atime,告诉系统不要修改对这个文件的最后访问时间。
- S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
- a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:当dump程序执行时,该文件或目录不会被dump备份。
- D:检查压缩文件中的错误。
- i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
- s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
- u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
- t:文件系统支持尾部合并(tail-merging)。
- X:可以直接访问压缩文件的内容。
// 只能给文件添加内容,但是删除不了
chattr +a /etc/passwd
// 文件不能删除,不能更改,不能移动
chattr +i /etc/passwd
named
todo
timedatectl
timedatectl
设置硬件时间默认为UTCtimedatectl set-local-rtc 1
启用时间同步timedatectl set-ntp 1
ntp
强制同步:
systemctl stop ntpd
ntpd -gq
systemctl start ntpd
tree
tree --charset ASCII /proc/sys/fs/
加上--charset ASCII
可以防止乱码
dd
用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
(这里用它简单测试磁盘读写性能)
dd应用实例
# 测试当前位置磁盘写入性能
dd if=/dev/zero of=kwxgd bs=64k count=4k oflag=dsync
# 测试当前位置磁盘读取性能
dd if=kwxgd of=/dev/zero bs=64k count=4k iflag=direct
磁盘性能指标--IOPS 理论
# 常见磁盘平均物理寻道时间为:
7200转/分的STAT硬盘平均物理寻道时间是9ms
10000转/分的STAT硬盘平均物理寻道时间是6ms
15000转/分的STAT硬盘平均物理寻道时间是4ms
# 常见硬盘的平均旋转延迟时间为(平均情况下为磁盘旋转半圈的时间):
7200 rpm 60*1000/7200/2 = 4.17ms
10000rpm 60*1000/10000/2 = 3ms
15000rpm 60*1000/15000/2 = 2ms
# 最大IOPS的理论计算方法:IOPS = 1000 ms/(寻道时间 + 旋转延迟) 可以忽略数据传输时间
7200 rpm的磁盘 IOPS = 1000 / (9 + 4.17) = 76 IOPS
10000 rpm的磁盘 IOPS = 1000 / (6+ 3) = 111 IOPS
15000 rpm的磁盘 IOPS = 1000 / (4 + 2) = 166 IOPS
实际会受到数据传输和写入速度影响,应该低于理论值
hdparm
Linux hdparm 命令用法详解-Linux命令大全(手册)
yum install hdparm -y
# 显示硬盘的相关设置
[root@VM_0_4_centos ~]# hdparm /dev/vda
/dev/vda:
HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
readonly = 0 (off)
readahead = 8192 (on)
geometry = 104025/16/63, sectors = 104857600, start = 0
# 显示硬盘的柱面、磁头、扇区数
[root@VM_0_4_centos ~]# hdparm -g /dev/vda
/dev/vda:
geometry = 104025[柱面数]/16[磁头]/63[扇区], sectors = 104857600[总扇区数], start = 0[起始扇区数]
# 测试硬盘的读取速度
[root@VM_0_4_centos ~]# hdparm -t /dev/vda
/dev/vda:
Timing buffered disk reads: 622 MB in 3.00 seconds = 207.33 MB/sec
# 测试硬盘缓存的读取速度
[root@VM_0_4_centos ~]# hdparm -T /dev/vda
/dev/vda:
Timing cached reads: 19234 MB in 1.99 seconds = 9654.65 MB/sec
fio
yum install fio -y
# 测试随机写IOPS,运行以下命令:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
# 测试随机读IOPS,运行以下命令:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
# 测试顺序写吞吐量,运行以下命令:
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
# 测试顺序读吞吐量,运行以下命令:
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing
以测试随机写IOPS的命令为例,说明命令中各种参数的含义:
-direct=1 表示测试时忽略I/O缓存,数据直写。
-iodepth=128 表示使用AIO时,同时发出I/O数的上限为128。
-rw=randwrite 表示测试时的读写策略为随机写(random writes)。作其它测试时可以设置为:
randread(随机读random reads)
read(顺序读sequential reads)
write(顺序写sequential writes)
randrw(混合随机读写mixed random reads and writes)
-ioengine=libaio 表示测试方式为libaio(Linux AIO,异步I/O)。应用程序使用I/O通常有两种方式:
同步:同步的I/O一次只能发出一个I/O请求,等待内核完成才返回。这样对于单个线程iodepth总是小于1,但是可以透过多个线程并发执行来解决。通常会用16?32根线程同时工作将iodepth塞满。
异步:异步的I/O通常使用libaio这样的方式一次提交一批I/O请求,然后等待一批的完成,减少交互的次数,会更有效率。
-bs=4k 表示单次I/O的块文件大小为4KB。未指定该参数时的默认大小也是4KB。
测试IOPS时,建议将bs设置为一个比较小的值,如本示例中的4k。
测试吞吐量时,建议将bs设置为一个较大的值,如本示例中的1024k。
-size=1G 表示测试文件大小为1 GiB。
-numjobs=1 表示测试线程数为1。
-runtime=1000 表示测试时间为1000秒。如果未配置,则持续将前述-size指定大小的文件,以每次-bs值为分块大小写完。
-group_reporting 表示测试结果里汇总每个进程的统计信息,而非以不同job汇总展示信息。
-filename=iotest 指定测试文件的名称,比如iotest。测试裸盘可以获得真实的硬盘性能,但直接测试裸盘会破坏文件系统结构,请在测试前提前做好数据备份。
-name=Rand_Write_Testing 表示测试任务名称为Rand_Write_Testing,可以随意设定。
iptables
iptables [ -t 表名 ] 管理选项 [ 链名 ] 条件匹配 -j 目标动作或跳转
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
四表五链示意图:
四表 | 说明 |
---|---|
filter | 确定是否放行改数据包(过滤) |
nat | 修改数据包中的源/目标的IP或者端口 |
mangle | 为数据包设置标记 |
raw | 确定是否对改数据包进行状态跟踪 |
security | 是否定义强制访问控制规则(MAC) |
RPM 与 YUM 区别和联系
RPM 是软件包管理器,YUM是软件包管理器的前端工具
RPM
# 安装命令
rpm -i /PATH/TO/RPM_FILE
# 一般组合起来使用:-ivh
rpm -ivh PATH/TO/RPM_FILE
# 升级
# 存在则更新,不存在则安装
rpm -Uvh rpm包
# 存在则更新
rpm -Fvh rpm包
# 效验文件(可以用来检测软件相关文件是否被修改过,如果没有输出说明没有任何文件被修改)
rpm -V 包名
# 卸载命令
rpm -e 包名
# 查询命令
# 查询所有已安装的包
rpm -qa
# 查询指定包的信息
rpm -q 包名
# 查询指定包的摘要信息
rpm -qi 包名
# 查询指定包安装生成的文件清单
rpm -ql 包名
# 查询某个文件是由那个rpm包安装生成的
rpm -qf /path/to/some_file
# 查询包安装生成的配置文件
rpm -qc 包名
# 查询包安装生成的帮助文档
rpm -qd 包名
# 查看包安装文件状态
rpm -qs 包名
# 对未安装的RPM包查询信息,使用"-p",可以与其他查询相关的其他选项组合使用
rpm -qpi /path/to/rpm_file
YUM
# 配置文件
/etc/yum.conf
/etc/yum.repos.d/*.repo
yum list all
yum list all mysql*
yum list installed
yum list available
yum list updates
# 显示不属于任何仓库的,额外的包
yum list extras
# 显示被废弃的包
yum list obsoletes
yum list recent
yum search 查询名
yum repolist all
yum repolist enabled
yum repolist disabled
# 显示软件包的摘要信息(没有rpm -qi详细)
yum info zip.x86_64
# 查询某个文件是由哪个软件包生成的(类似rpm -qf),效果好像一样
yum provides /etc/my.cnf
yum whatprovides /etc/my.cnf
# 清空缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
# 手动在本地建立缓存
yum makecache
# 安装
yum [-y] install wget
yum [-y] reinstall wget
yum update wget
yum update-to wget
yum check-update
# 本地安装
yum localinstall [--nogpgcheck] rpmname.rpm
# 卸载
yum remove
swap
启用swap
# 新建一个专门的文件用于swap分区
$ dd if=/dev/zero of=/data/swap bs=1024 count=8388616
# 通过mkswap命令将上面新建出的文件做成swap分区
$ mkswap /data/swap
# 查看内核参数vm.swappiness(若vm.swappiness为0则根据实际需要调整成30或者60)
$ cat /proc/sys/vm/swappiness
# 该文件是无法直接编辑的
# 临时修改
$ sysctl -w vm.swappiness=60
$ sysctl -a | grep swappiness
# 永久修改:编辑/etc/sysctl.conf文件
# 启用此交换分区的交换功能
$ swapon /data/swap
$ echo "/data/swap swap swap defaults 0 0" >> /etc/fstab
关闭swap
$ swapoff /data/swap
$ swapoff -a >/dev/null