Linux常用操作

本文仅记录简单常用的操作

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 's111aaag' 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

强制同步:

  1. systemctl stop ntpd
  2. ntpd -gq
  3. systemctl start ntpd

tree

tree --charset ASCII /proc/sys/fs/加上--charset ASCII可以防止乱码

dd

用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
(这里用它简单测试磁盘读写性能)
Linux-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

Centos 检查磁盘读写性能
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
原文地址:https://www.cnblogs.com/CSunShine/p/11479467.html