1.1 基础命令
[TOC]
修改主机名
hostnamectl set-hostname test.cn
环境变量
永久生效
vim /etc/profile source /etc/profile暂时生效
export PATH=$PATH:/usr/local/MATLAB/R2013a/bin只对当前用户永久生效
vim ~/.bash_profile source ~/.bash_profile
压缩命令
unzip
# 解压到当前目录 unzip *.zip # 解压到指定目录,不覆盖 unzip -n *.zip -d /tmp # 解压到指定目录,覆盖 unzip -o *.zip -d /tmptar
# 解压 tar -zxvf *.tar.gz # 压缩 tar -zcvf *.tar.gz # 查看 tar -ztvf *.tar.gz
安装fpm
yum -y install ruby rubygems ruby-devel
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove https://rubygems.org/
gem install fpm
打包时出现报错Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}。
安装rpm工具
yum install -y rpm-build
分区操作
lvm相关操作1
# 查看pv
pvs
pvscan
pvdisplay
# 查看vg
vgs
vgscan
vgdisplay
# 查看lvm分区
lvs
lvscan
lvdisplay
查看磁盘使用
df -h
查看分区使用
fdisk -l
lvm分区及挂载
# 查看块设备信息
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 2T 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 512M 0 part /boot
├─sda3 8:3 0 200M 0 part /boot/efi
└─sda4 8:4 0 2T 0 part
├─vg_cobbler-lv_root 253:0 0 512G 0 lvm /
└─vg_cobbler-lv_swap 253:1 0 16G 0 lvm [SWAP]
# 查看vgs的空余大小
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_cobbler 1 3 0 wz--n- <2.00t <1.5t
# 创建lvm分区并挂载到data01
# 1. 根据vg:vg_cobbler的空闲大小创建lvm
[root@localhost /]# lvcreate -L 1.48t -n lv_data01 vg_cobbler
Logical volume "lv_data01" created.
# 2. 格式化lvm分区
[root@localhost /]# mkfs.ext4 /dev/vg_cobbler/lv_data01
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1245184 inodes, 4980736 blocks
249036 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
152 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
# 3. 挂载lvm分区到/data01
[root@localhost /]# mount /dev/vg_cobbler/lv_data01 /data01
# 4. 添加开机自动挂载配置
[root@localhost /]# vim /etc/fstab
/dev/vg_cobbler/lv_data01 /data01 ext4 defaults 0 0
# 再次查看块设备信息
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 2T 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 512M 0 part /boot
├─sda3 8:3 0 200M 0 part /boot/efi
└─sda4 8:4 0 2T 0 part
├─vg_cobbler-lv_root 253:0 0 512G 0 lvm /
├─vg_cobbler-lv_swap 253:1 0 16G 0 lvm [SWAP]
└─vg_cobbler-lv_data01 253:2 0 1.5T 0 lvm
# 查看文件系统
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_cobbler-lv_root 504G 59G 420G 13% /
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 28K 63G 1% /dev/shm
tmpfs 63G 178M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sda2 488M 114M 339M 26% /boot
/dev/sda3 200M 8.0K 200M 1% /boot/efi
/dev/mapper/vg_cobbler-lv_data01 1.5T 9.2G 1.4T 1% /data01
tmpfs 13G 0 13G 0% /run/user/0
硬盘格式化并挂载
# 查看块设备信息
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
# 可以看到sdb和sdc为未挂载的硬盘
# 格式化sdb并挂载到/data01
# 1. 创建/data01目录
[root@localhost /]# mkdir /data01
# 2. 快速格式化sdb
[root@localhost /]# mkfs.ext4 /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
# 3. 挂载到/data01
[root@localhost /]# mount /dev/sdb /data01
# 4. 添加开机自动挂载配置
[root@localhost /]# vim /etc/fstab
/dev/sdb /data01 ext4 defaults 0 0
# 再次查看块设备信息
[root@localhost /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk /data01
sdc 8:32 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
# 查看文件系统
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 15G 2.4G 87% /
/dev/sda1 1014M 234M 781M 23% /boot
/dev/sdb 20G 45M 19G 1% /data01
分区调整
首先确认系统在安装时, 根和/home是否做的是lvm, 如果做了lvm, 那就可以在线进行根分区的扩容3: 1) 先用vgdisplay 查看系统是否有空间空间, 如果还有, 就扩容到根分区. 2) 如果系统没有空闲空间, 就只能从其他lvm分区上缩减出一定的空间, 然后扩容到根分区. 3) 你的/home分区是xfs格式的,缩容之前, 需要先关闭该分区上部署的应用, 把有用数据拷贝到别的分区上, 接着进行缩容, 缩容后重新挂载, 然后再把数据拷贝回来, 重启应用.最后再将/home分区缩容出来的空间在线扩容到根分区上.
使用lvresize调整分区大小后,务必使用xfs_growfs应用分区调整(用词不一定准确,待修改)。
# 压缩home lvm分区30G大小空间,调整后必须对home重新格式化才能使用,不然会报错
lvresize -L -30G /dev/mapper/centos-home
# 增加root lvm分区30G大小空间
lvresize -L +30G /dev/mapper/centos-root
# 或
lvextend -L +30G /dev/mapper/centos-root
# 此时使用lvs命令可以看到lvm分区的大小实现了调整,但是df查看文件系统块的大小却没有发现变化
# 调整xfs格式的root lvm分区文件块,xfs_growfs只支持分区增加容量
xfs_growfs /dev/mapper/centos-root
# 如果xfs使用resize2f调整分区文件块会报错
resize2fs /dev/mapper/centos-root
> resize2fs 1.42.9 (28-Dec-2013)
> resize2fs: Bad magic number in super-block while trying to open /dev/mapper/centos-root
> Couldn't find valid filesystem superblock.
删除lvm分区
# 卸载文件系统
umount /dev/centos/home
lvremove /dev/centos/home
强制取消挂载
# 查看目录占用
fuser -m /home
# 解除占用
fuser -kvm /home
# 强制取消挂载
umount -l /home
非LVM分区转化为LVM分区
https://blog.csdn.net/it_is_a_world/article/details/101081754
多个硬盘扩展为一个LVM
# 使用整个磁盘创建VG,设置PE大小为64M
[root@localhost /]# vgcreate vg_data /dev/vdb /dev/vdc -s 64M
# 查看PV
[root@localhost /]# pvs
# 查看VG
[root@localhost /]# vgs
# 查看VG详情
[root@localhost /]# vgdisplay vg_data
# 使用vg_data创建LV,大小为20T
[root@localhost /]# lvcreate -L 20T -n lv_data01 vg_data
[root@localhost /]# vgs
[root@localhost /]# lvs
[root@localhost /]# lvdisplay
# 格式化lv_data01
[root@localhost /]# mkfs.ext4 /dev/vg_data/lv_data01
# 创建data01
[root@localhost /]# mkdir /data01
# 挂载lv_data01到/data01
[root@localhost /]# mount /dev/vg_data/lv_data01 /data01
# 添加开机自动挂载配置
[root@localhost /]# vim /etc/fstab
> /dev/vg_cobbler/lv_data01 /data01 ext4 defaults 0 0
# 再次查看块设备信息
[root@localhost /]# lsblk
# 查看文件系统
[root@localhost /]# df -h
硬盘剩余空间扩展lvm
# 1.创建新分区
shell> fdisk /dev/xvdb #### 选择磁盘
Command (m for help): m #### 帮助
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n #### 创建新的分区
Command action
e extended
p primary partition (1-4)
p #### 创建主分区
Partition number (1-4):1 #### 分区ID
First cylinder (1-65270, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-65270, default 65270):
Using default value 65270
Command (m for help):t #### 修改分区类型
Command (m for help):8e #### Linux lvm
Command (m for help):w #### 保存修改
# 2. 创建新的pv卷
shell> pvcreate /dev/xvdb1/ #### 创建新的pv卷
shell> pvs
# 3. 扩展vgs
shell> vgextend vg0 /dev/xvdb1
# 4. 扩展lvm
shell> lvextend -L +3G /dev/vg0/lv1
partprobe
su 与 sudo2
su
su [-lm] [-c 命令] [username]
参数:
-: 单纯使用-如su -,代表使用login-shell的变量文件读取方式来登录系统;不加用户名,则代表切换为root的身份。
-l: 与-类似,但后面需要加欲切换的用户账号。也是login-shell的方式。
-m: -m与-p是一样的,表示使用目前的环境设置,而不读取新用户的配置文件。
-c: 仅进行一次命令,所以-c后面可以加上命令。
sudo
仅需要自己的密码。
sudo [-b] [-u 新用户密码]
参数:
-b: 将后续的命令让系统自行执行,而不与目前的shell产生影响。
-u: 后面接欲切换的用户,若无则默认切换root。
可执行sudo的用户与文件/etc/sudoers有关,编辑该文件需用visudo命令。
添加sudo权限
chmod u+w /etc/sudoers
vim /etc/sudoers
xxx ALL=(ALL) ALL
chmod u-w /etc/sudoers
Login与non-login shell2
login shell: 取得bash时需要完整的登录流程。比如,要由tty1~tty6登录,需要输入用户的账号与密码,此时取得的bash就称为“login shell”。
non-login shell: 取得bash接口的方法不需要重复登录的举动。比如,以X Window登录Linux后,再以X的图形界面启动终端机,此时那个终端接口并没有需要再次输入账号与密码,那个bash的环境就称为non-login shell。在原本的bash环境下再次执行bash这个命令,同样也没有输入账号密码,那第二个bash(子进程)也是non-login shell。
端口
查看端口占用
lsof -i
lsof -i:22
netstat -tunlp | grep 8080
netstat –anp | grep 8080
netstat -nltp | grep 28293
开放端口
# firewall
# 开放tcp 端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 开放udp端口
firewall-cmd --zone=public --add-port=49999/udp --permanent
# 刷新加载端口配置
firewall-cmd --reload
# 查看开放端口
iptables -L -n
# iptables
iptables -t filter -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
关闭端口
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
RPM
# 导出目前安装的rpm
rpm -qa > list.txt
RPM假死
rm -f /var/lib/rpm/__db.00* #删除rpm数据文件
rpm --rebuilddb #重新rpm数据文件
查看网卡配置
# 看网关
netstat -rn
# 看netmask,dns
ifconfig -a
ip addr
查看网络流量
sar -n DEV 1 4
查看JDK安装
rpm -qa | grep jdk
Yum配置
查看源
yum repolist all
配置阿里源
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
配置光盘Yum源
# 挂载光盘
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cd /etc/yum.repos.d
# 备份原始源
mkdir backup
mv CentOS* backup
tar zcvf repos.backup.tar.gz backup
mv backup/CentOS-Media.repo .
# 修改源地址
vim CentOS-Media.repo
> file:///mnt/cdrom/
> enable=1
# 清除包缓存
yum clean all
# 生成缓存
yum makecache
Yum下载
yum upgrade --downloadonly --downloaddir=/opt/systemd systemd
yumdownloader 默认只下载指定的包,不下载其依赖,--resolve参数可以使其下载依赖,--destdir可以指定下载的目录。
yumdownloader --destdir ./ --resolve wget
yumdownloader --resolve --destdir ./ --resolve wget
下载RPM及依赖(不安装)
yum install --downloadonly
创建自定义YUM源
yum -y install createrepo
createrepo -u -d <rpm path>
LN
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
硬链接相当于对文件进行了备份,防止误删。
软链接相当于Windows的快捷方式。
touch f1
# 创建f1的一个硬链接文件f2
ln f1 f2
# 创建f1的一个软链接文件f3
ln -s f1 f3
时区
# 查看时区
date -R
# 修改时区为上海
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 停止同步
timedatectl set-ntp no
# 设置时间
timedatectl set-time "YYYY-MM-DD HH:MM:SS"
# 将硬件时钟调整为与本地时钟一致
timedatectl set-local-rtc 1
hwclock --systohc --localtime
# 开启/关闭 ntp
timedatectl set-ntp true/false
SSH
linux生成密钥
# 生成 rsa 密钥
# 新版本会生成
# -----BEGIN OPENSSH PRIVATE KEY-----
ssh-keygen -t rsa
# 推荐,生成 rsa 密钥
# -----BEGIN RSA PRIVATE KEY-----
ssh-keygen -m PEM -t rsa -b 4096
参考
现在使用命令 ssh-keygen -t rsa 生成ssh,默认是以新的格式生成,id_rsa的第一行变成了“BEGIN OPENSSH PRIVATE KEY” 而不在是“BEGIN RSA PRIVATE KEY”,此时用来msyql、MongoDB,配置ssh登陆的话,可能会报 “Resource temporarily unavailable. Authentication by key (/Users/youname/.ssh/id_rsa) failed (Error -16). (Error #35)” 提示资源不可用,这就是id_rsa 格式不对造成的
解决方法(一)
使用 ssh-keygen -m PEM -t rsa -b 4096 来生成
-m 参数指定密钥的格式,PEM(也就是RSA格式)是之前使用的旧格式
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型
解决方法(二)
将密钥转换为PuTTy ppk格式并返回来解决
tempkey的内容:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAA...
-----END OPENSSH PRIVATE KEY-----
转换为ppk格式:
puttygen tempkey -o tempkey.ppk
转换回openssh格式:
puttygen tempkey.ppk -O private-openssh -o tempkey.oldformat
tempkey.oldformat的内容:
-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEAzmmS5aA0....
-----END RSA PRIVATE KEY-----
组操作
# 强行设置某个用户所在组
usermod -g 用户组 用户名
# 把某个用户改为 group(s)
usermod -G 用户组 用户名
# 把用户添加进入某个组(s)
usermod -a -G 用户组 用户名
# 将用户从组中删除
gpasswd -d 用户名 用户组
Crontab
crontab [-u username] [-l|-e|-r]
# -u 只有 root 才能进行这个任务
# -l 查看工作内容
crontab -l
# -e 编辑工作内容
crontab -e
# -r 删除所有的工作内容
crontab -r
# 启动服务
systemctl start crond.service
# 关闭服务
systemctl stop crond.service
# 重启服务
systemctl restart crond.service
# 重新载入配置
systemctl reload crond.service
# 查看状态
systemctl status crond.service
# 查看日志
tail -1000f /var/log/cron
将crontab文件放在/etc/cron.d下,然后执行systemctl restart crond.service重启crontab服务。
crontab 不执行的原因
- 未重启
crond服务/未重载(reload)crond配置 - 文件换行不是
unix crontab文件末尾没有空行
系统版本
cat /etc/redhat-release
uname -a
# centos < 7
cat /etc/issue
# 内核相关
cat /proc/version
统计文件/目录
# 1、 统计当前文件夹下文件的个数
ls -l |grep "^-"|wc -l
# 2、 统计当前文件夹下目录的个数
ls -l |grep "^d"|wc -l
# 3、统计当前文件夹下文件的个数,包括子文件夹里的
ls -lR|grep "^-"|wc -l
# 4、统计文件夹下目录的个数,包括子文件夹里的
ls -lR|grep "^d"|wc -l
grep "^-"
# 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l
Jfrog 的Artifactory 命令的使用
预先设置
jfrog rt config --user= --password=<password,,可以是加密的也可以是明文> --url=https://xxx.xx.xx/artifactory --interactive=false
api与url
如果不预先设置,需要在命令后面添加--url=和--apikey=
目录的下载
jfrog.exe rt dl <在artifactory中的路径> --url=“https://xxx.xxx.xx/artifactory” --threads=1 --split-count=0
目录上传
jfrog rt u <本地路径> <服务器路径> --flat=false
# 上传后,在服务器上的路径将是 <服务器路径>+<本地路径>
# 如果想上传目录层次比较少,可以先在本地进入需要上传的目录下,在执行jfrog命令
目录删除
jfrog rt del <服务器路径,不包含https://xxx.xx.xx/artifactory > --quiet=true
查看MD5
md5sum 文件名
SYSLOG
<14>Mar 20 12:28:48 TAC
systemd系统服务4
下面的命令用来启动服务。
sudo /etc/init.d/apache2 start
# 或者
service apache2 start
这种方法有两个缺点。
一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。
使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
# 查看 Systemd 的版本
systemctl --version
Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix 哲学。

(上图为 Systemd 架构图)
init5
init是Linux系统操作中不可缺少的程序之一。
所谓的init进程,它是一个由内核启动的用户级进程。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。
所以,init始终是第一个进程(其进程编号始终为1)。 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
init一共分为7个级别,这7个级别的所代表的含义如下**
0:停机或者关机(千万不能将initdefault设置为0)
1:单用户模式,只root用户进行维护
2:多用户模式,不能使用NFS(Net File System)
3:完全多用户模式(标准的运行级别)
4:安全模式
5:图形化(即图形界面)
6:重启(千万不要把initdefault设置为6)
CP
参数详解
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-r :递归持续复制,用于目录的复制行为;
cp命令,其实是cp -i命令,也就是不管我们怎么输入 cp -rf,其实执行的是cp -i -rf , 也无怪乎总是提问是否覆盖了。
覆盖与不覆盖
其实还有一种更简单的方法可以解决这个问题,就是在cp前加一个反斜杠,如:
\cp name.text /usr/home/
rsync删除文件
针对上面的问题,我们可以通过以下方法清空该目录:
先创建一个空目录 mkdir /tmp/empty/ 清空目标目录
rsync --delete-before -avH --progress --stats /tmp/empty/ /var/spool/postfix/maildrop
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/
选项说明:
-delete-before 接收者在传输之前进行删除操作 –progress 在传输时显示传输过程 -a 归档模式,表示以递归方式传输文件,并保持所有文件属性 -H 保持硬连接的文件 -v 详细输出模式 –stats 给出某些文件的传输状态
不过在使用上面的命令进行清理时,存在一个问题,清空后,目标目录的权限会和源目录的权限一样。如:/tmp/empty是root:root,而maildrop之前是postfix:postdrop ,执行之后也会maildrop目录的权限也会变成root:root 。由于-a权限是-rlptogD几个参数的集合,所以可以将og(owner:group)两个参数去掉。清空时自动保持之前的目录权限,如下:
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/
rsync与rm 删除速度比较
为什么rsync这么快呢? rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销
开机启动
查看
systemctl get-default
命令界面
systemctl set-default multi-user.target
图形界面
systemctl set-default graphical.target
Curl
curl -i -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
-i: 显示头信息
被 < > 标记的部件:
VERB
适当的HTTP 方法 或 谓词 : GET、 POST、 PUT、 HEAD 或者DELETE。
PROTOCOL
http或者 https
HOST
主机名,或者用 localhost 代表本地机器上的节点。
PORT
端口号
PATH
API 的终端路径
QUERY_STRING
任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)
BODY
一个 JSON 格式的请求体 (如果请求需要的话)
https报错
curl -k --tlsv1 https://xxx
Locale区域语言设置
区域语言
Language $LANG value Englist(US) en_US.utf8 Assamese as_IN.utf8 Bengali bn_IN.utf8 Chinese(Simplified) zh_CN.utf8 chinese(Traditional) zh_TW.utf8 French fr_FR.utf8 German de_DE.utf8 Gujarati gu_IN.utf8 Hindi hi_IN.utf8 Italian it_IT.utf8 Japanese ja_JP.utf8 Kannada kn_IN.utf8 Korean ko_KR.utf8 Malayalam ml_IN.utf8 Marathi mr_IN.utf8 Odia or_IN.utf8 Portuguese(Brazilian) pt_BR.utf8 Punjabi pa_IN.utf8 Russian ru_RU.utf8 Spanish es_ES.utf8 Tamil ta_IN.utf8
Telugu te_IN.utf8
# 系统默认的语言设置
locale
# 查看当前
localectl status
# 设置区域语言
localectl set-locale LANG=zh_CN.utf8
# 编辑/root/.bashrc
# 增加
export LC_ALL="en_US.UTF-8"
linux设置库文件加载包含路径
第一种方式 vim /etc/ld.so.conf
将要包含的路径添加到此文件中 退出重新登录使配置生效或者执行命令 source /etc/ld.so.conf 另一种方式 利用LIBRARY_PATH和LD_LIBRARY_PATH环境变量,两者的区别在于:
LIBRARY_PATH用于在程序编译期间查找共享库的路径,例如指定gcc/g++编译期间需要用到的动态链接库的目录,设置方法示例: 在用户目录的.bash_profile文件中设置和导出环境变量 export LIBRARY_PATH=MY_LIBRARY_PATH1:MY_LIBRARYPATH2:$LIBRARY_PATH
LD_LIBRARY_PATH环境变量用于在程序运行期间查找动态链接库,指定动态链接库的加载路径,设置示例: 在用户根目录下的.bash_profile文件中设置和导出环境变量 export LD_LIBRARY_PATH=MY_LIBRARY_PATH1:MY_LIBRARYPATH2:$LD_LIBRARY_PATH
导出后,为了使配置生效,需要重新加载.bash_profie文件 执行如下命令: source .bash_profile
增加SWAP空间
#!/bin/bash
BASE_DIR=$(readlink -f $(dirname $0))
dd if=/dev/zero of=/tmp/swap bs=1M count=4096
ll -h /tmp/swap
df -h
# 使用格式化为swap的文件格式
mkswap /tmp/swap
free -h
# 启用swap
swapon /tmp/swap
# 查看内存
free -h
swapon -s
echo "add 4G swap finished."
重启
# 普通重启
reboot
# 强制重启
reboot -nf
RSyslog6
日志级别
debug –有调式信息的,日志信息最多
info –一般信息的日志,最常用
notice –最具有重要性的普通条件的信息
warning –警告级别
err –错误级别,阻止某个功能或者模块不能正常工作的信息
crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert –需要立刻修改的信息
emerg –内核崩溃等严重信息
none –什么都不记录
从上到下,级别从低到高,记录的信息越来越少
修改日志级别
修改配置文件,日志级别修改为error。
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.error;mail.none;authpriv.none;cron.none /var/log/messages
重启rsyslog服务
service rsyslog status
service rsyslog restart
service rsyslog status
vim /ssl/confd/templates/rsyslog.conf.tmpl
1. centos7下修改分区大小(LVM) ↩
2. 鸟哥的Linux私房菜·基础学习篇(第三版),P428-433 ↩
3. Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统) ↩
4. Systemd 入门教程:命令篇 ↩
5. linux 下的init 0,1,2,3,4,5,6知识介绍 ↩
6. Rsyslog配置文件详解 - zengkefu - 博客园 (cnblogs.com) ↩