edit

Linux

第四章:快速入门

uname

uname -a --all (Linux yx-centos 2.6.32-573.7.1.el6.x86_64 #1 SMP Tue Sep 22 22:00:00 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux)
uname -s --kernel-name (Linux)
uname -n --nodename (hostname)
uname -r --kernel-release (2.6.32-573.7.1.el6.x86_64)
uname -v --kernel-version (#1 SMP Tue Sep 22 22:00:00 UTC 2015)
uname -m --machine (x86_64)
uname -p --processor (x86_64)
uname -i --hardware-platform (x86_64)
uname -o --operating-system (GNU/Linux)
https://www.kernel.org

引导修复

CentOS启动盘-> Troubleshooting->Rescue a CentOS system
chroot /mnt/sysimage
grub2-install /dev/vda
exit
reboot

Grub引导Win7

vim /etc/grub.d/40_custom添加:

menuentry "Windows 7"  
{  
    set root='(hd0,3)'  
    chainloader +1  
}  
grub2-mkconfig -o /boot/grub2/grub.cfg  

修改Grub参数启动等待时间

/etc/default/grub

CentOS7网卡命名

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Understanding_the_Predictable_Network_Interface_Device_Names.html

重新启动X Window

alt + ctrl + backspace

切换终端tty

[Ctrl] + [Alt] + [F2]~[F6]
[Ctrl] + [Alt] + [F1] # 图形界面

Linux下文件名、命令区分大小写

语言语系

locale # 显示语言语系
/etc/locale.conf # 语系配置文件

修改语言语系

LANG=en_US.utf8 (输出信息语言语系)
export LC_ALL=en_US.utf8
中文:zh_CN.UTF8

date 日期时间

date MMDDhhmm[[CC]YY][.ss] # 设置日期
date -u --utc --universal # UTC时间
date +%s # UTC秒

format

date +FORMAT
%Y 长年份
%y 短年份
%m 数字月
%b 缩写月字
%B 完整月字
%d 日期
%H 数字小时
%M 数字分钟
%S 分钟内秒数
%s 1970-01-01 00:00:00 起的秒数
%a 缩写星期字
%A 完整星期字
%w 一周中的第几天
%W 一年中的第几周
%z 时区 +0800
%:z 时区 +08:00
%Z 时区 字符缩写

cal # calendar 月历

cal # 本月月历
cal [year] # 全年月历
cal [month] [year] # 指定月历

bc # 交互式计算器

bc

> quit # 退出  
> scale=3 # 小数点设置,默认整数计算  

bc运算符号

      • / ^ %

Tab 命令补全

命令中第一组字符 + [Tab] # 命令补全
命令中第二组字符 + [Tab] # 文件补全
yum install bash-completion # 参数补全(影响文件补全)
yum erase bash-completion
yum install bash-completion-extras # 参数补全(影响文件补全)
yum install python-django-bash-completion # django命令补全

快捷键

[ctrl] + [c] # 中断
[ctrl] + [d] # EOF, End Of File, End Of Input, exit
[shift]+{ [Page Up] | [Page Down] } # bash terminal 翻页

man # manual

相关信息

centos6构建索引:makewhatis
centos7构建索引:mandb
按命令搜索:man -f xxx = whatis xxx
按关键词搜索:man -k xxx = apropos xxx
man默认路径:/usr/share/man
man搜索路径:/etc/man_db.conf

man文档类型

man xxx [n]
1、命令
8、管理员命令
6、游戏
2、系统核心函数工具
3、函数,库,libc
4、/dev文件 # man urandom 4
5、设置文件
7、Linux惯例、协定
9、kernel相关文件

info

info文件路径

/usr/share/info

顶部提示

File # 归属文件
Node # 节点,TOP为顶层
Next # 下一章节
Up # 上一层
Prev # 前一章节

操作

N # 下一节
P # 上一节
U # 上一层
h # 帮助
Enter # 进入带 * 超链接
Tab # 在带*超链接中移动
Space # 下一节

软件文档

/usr/share/doc

显示登录用户

whoami # 信息少
who # 信息中
w # 当前登录用户,信息多
lslogins #查看全部用户登录情况
last | head # 查看登录记录

shutdown

shutdown [-option] [time] [message]
time type 1 : now
time type 2 : 20:25
time type 3 : +10 (minute)

shutdown centos6

shutdown -k 警告内容
shutdown -r = reboot
shutdown -h = halt
shutdown -c = cancel
shutdown -P = poweroff = init 0

shutdown centos7

systemctl halt = halt
systemctl reboot = reboot
systemctl poweroff = poweroff
systemctl suspend

CentOS(GDM)开机自动登录

配置 /etc/gdm/custom.conf

[daemon]  
AutomaticLoginEnable=true  
AutomaticLogin=jiangwx  
TimedLoginEnable=true  
TimedLogin=jiangwx  
TimedLoginDelay=7  
[security]  
AllowRoot=false  
[xdmcp]  
[greeter]  
DefalutWelcome=false  
Welcome=Wait seconds...  
[chooser]  

Shell命令符号

'#' # root用户
'$' # 普通用户

配置login欢迎信息

/etc/issue
自定义说明:man agetty 搜索关键词:escape

第五章:文件权限与目录配置

权限配置文件

/etc/passwd # 用户信息
/etc/shadow # 用户密码
/etc/group # 用户组信息

切换用户ID组ID为USER

su # 默认切换为root
su root # 切换为用户
sudo su #ubuntu下切换为root用户
su - = su -l = su --login #使用shell登录

用户/组

用户ID,32位,0-60000
用户ID = 0,root
用户ID = 1~499,系统用户,没有shell,为服务创建的用户
用户ID = 500+,普通用户

useradd

不指定-g会自动创建同名用户组
-g groupname username #增加用户配置
-d #家目录
-s #登录shell
-u #userid
-g #主组
-G #附属组

userdel

userdel [username] # 删除用户
-r # 同时删除家目录

usermod

修改用户信息
-l #新用户名
-u #新userid
-d #修改用户家目录位置
-g #主组
-G #附属组
-L #锁定
-U #解锁

gpasswd

管理/etc/group 和/etc/gshadow
gpasswd groupname #设置组密码
gpasswd -r groupname #取消用户组密码
gpasswd -d user group #将用户从用户组删除
gpasswd -a user wheel #添加到用户组
gpasswd -A user1 user2 user3 wheel #添加用户组管理员
gpasswd -M user1 user2 user3 wheel #添加用户组成员

password # 修改密码

passwd # 修改当前用户密码
passwd username # 修改指定用户密码
sudo passwd # 设置root默认密码

chpasswd # 批量修改密码

echo "user:pwd" | chpasswd

groupadd [groupname]

添加组

groupmod

-n #修改组名
-g #修改组id

groupdel

groupdel [groupname] # 删除组

文件权限

用户继承组的权限
字符|含义|用在文件含义|用在目录含义
-|-|-|-
r | 读取 | 可读取文件内容 | 可列出目录内容
w | 写入 | 可修改文件内容 | 可在目录中创建、删除文件
x | 执行 | 可以作为命令执行 | 可访问目录内容 (目录必须有执行权限才能读取)

chown # 修改文件目录所属用户

chown [user] [file|dir] # 只修改所属用户
chown [user:group] [file|dir] # 同时修改用户和组
chown [.group] [file|dir] # 只修改组
-R #递归目录
-h #改变link的属性

chgrp # 修改文件、目录所属组

chgrp [group] [file]
-R #递归目录

chmod # 修改权限

格式

chmod u[+|-|=][r|w|x] g[+|-|=][r|w|x] o[+|-|=][r|w|x] a[+|-|=][r|w|x]
chmod [4+2+1][4+2+1][4+2+1]

参数

-R #递归目录

特殊权限

suid

suid # 占用Ux位为s
1、只对可执行文件有效
2、同时需要执行者具有可执行权限
3、仅在运行过程中有效
4、执行时执行者具有拥有权限

sgid

sgid #占用Gx位为s

用在文件上时

1、仅对二进制程序有效
2、执行者需要对文件具备可执行权限
3、执行者在执行过程中将会获得组权限

用在目录上时

1、使用者若对此目录有rx权限时,使用者能够进入此目录
2、使用者在目录下的有效群组将会变成该目录的群组
3、用途:使用者在此目录下具有w的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与目录群组相同

sgid

stick #占用Ox位为t
仅可以删除自己的文件,不可以删除其他用户文件
1、只对目录有效
2、当使用者对此目录有wx权限时,使用者在此目录下简历的文件或目录只有自己与root有权删除

设置

chmod u+s filename 4
chmod g+s filename 2
chmod o+t filename 1

FHS

FHS(Filesystem Hierarchy Standard 文件系统层次标准)目录命名标准
http://www.pathname.com/fhs/
/bin #所有用户可执行文件 #binary
/sbin #root用户可执行的命令
/boot #引导目录
/dev #device 设备
/etc #配置
/home #除root用户外的其他用户文件
/lib #库 *.so
/lib/modules/ #核心驱动
/media #自动挂载cdrom
/mnt #正常挂载目录
/opt #通常用来装第三方大型软件
/run #/var/run内存虚拟硬盘
/srv #service /srv/www
/proc #系统实时信息 内存接口
/sys #底层硬件信息
/tmp #临时信息 自动删除
/usr #应用软件 Unix Software Resource
/var #经常变化的信息
/lost+found #ext错误片段

/proc

/proc/cpuinfo
/proc/meminfo
/proc/partitions #分区信息
/proc/interrupts
/proc/ioports #硬件端口(地址)
/proc/net/*
/proc/swaps #交换分区
/proc/filesystems #已经加载的文件系统

获取启动时间

cat /proc/uptime
== uptime
== w first line

/usr

/usr/bin = /bin
/usr/lib = /lib
/usr/local #覆盖/usr下的bin etc include lib
/usr/sbin = /sbin
/usr/share /usr/share/man /usr/share/doc /usr/share/zoneinfo
/usr/include
/usr/games
/usr/libexec #XWindow操作指令等
/usr/libxx = /libxx
/usr/src /usr/src/linux

/var

/var/cache
/var/lib /var/lib/mysql /var/lib/rpm
/var/lock = /run/lock
/var/log /var/log/wtmp #登录日志 /var/log/message #系统日志
/var/mail = /var/spool/mail
/var/run = /run
/var/spool #队列数据 /var/spool/mqueue /var/spool/cron

/etc

/etc/fstab #自动挂载配置
/etc/yum.repos.d/
/etc/samba
/etc/sysconfig/network-scripts/
/etc/sysconfig/network-scripts/ifcfg-* #网卡配置文件
/etc/sysconfig/network #主机名配置文件
/etc/resolv.conf #DNS配置
/etc/hosts #静态主机名配置
/etc/bashrc
/etc/rc.local #开机执行命令 chmod +x /etc/rc.d/rc.local

/dev

/dev/null #丢弃
/dev/sdx #磁盘
/dev/vdx #虚拟机磁盘
/dev/mdx #软RAID
/dev/VGNAME/LVNAME #LVM
device命名标准

查询LSB标准

yum install -y redhat-lsb
lsb_release -a

第六章:文件与目录管理

当前工作目录

pwd
pwd -P 显示链接真实路径

建立目录

mkdir -m 775 dir #建立目录时设置权限
mkdir -p /dir/dir/dir/dir #建立多级目录

删除目录

rmdir -p #连同上层空目录一起删除

查看环境变量

env
echo $PATH

添加PATH变量

PATH="${PATH}:/ADDPATH"

ls 默认按文件名排序

ls -R #递归显示子目录
ls -a #all 显示隐藏文件
ls -d #dir 显示目录本身
ls -h #human readable
ls -i #列出inode号码
ls -l #long
ls -r #逆序
ls -S #按文件大小排序
ls -t #按时间按排序
ls --full-time #完整时间
ls --time={atime,ctime} 默认mtime
atime access time #访问时间
mtime modify time #内容修改时间
ctime status time #权限属性修改时间
ls --color=auto #默认写进alias

cp # 复制

权限

cp默认使用执行者的权限

参数

cp -d #将软连接任然复制为软链接,默认复制原文件
cp -r #递归复制目录
cp -p #连同权限,用户,时间一起复制,而非使用预设属性
cp --preserve=all #除了cp -p外的属性还保留SELinux属性、links,xattr等
cp -a # =cp -dr --preserve=all #全备份
cp -f #强制覆盖无法打开的文件
cp -l #硬链接
cp -s #软连接
cp -u #update,更新,比备份新才覆盖
cp -i #存在时询问
cp -n #存在时不覆盖,默认覆盖

rm

rm -f #强制
rm -i #删除前询问
rm -r #递归删除

mv

mv -f #强制
mv -i #询问是否覆盖
mv -u #update

rename

用于批量改名
rename .htm .html *.htm

临时取消alias

\alias 反斜杠

取得文件名

basename path

取得目录名

dirname path

cat(Concatenate)

cat -v #显示不可见字符
cat -E #显示结尾换行字符$
cat -T #显示TAB为^|
cat -A # = cat -vET
cat -n #显示行号,空白行有行号
cat -b #显示行号,空白行无行号

tac

逆向cat

nl(numbering line)

-b --body-numbering=正文编号样式
-d --section-delimiter=分割页行数
-n --number-format=行号格式 ln rn rz
-w --number-width=行号宽度
nl -b a == cat -n
nl -b t == cat -b #default
nl -n ln #靠左显示,不加零
nl -n rn #靠右显示,不加零
nl -n rz #靠右显示,不加零
nl -w num#固定补零位数

more

不能向前翻页

less

space #向下翻页
pagedown #向下翻页
pageup #向上翻页
/ #向下搜索
? #向上搜索
n #重复前一个搜索,/向下,?向上
N #逆向重复搜索
j #向下一行
k #向上一行
g #首行
G #末行
q #退出
h #help

default 10行
head -n num file #显示前n行
head -n -num file #显示直到倒数n行

tail

default 10行
tail -n num file #显示后n行
tail -n +num file #显示直到正数n行
tail -f #持续检测

od(octal dump)

od [OPTION] [FILE] [[+|-]OFFSET[.][b]]
-A --address-radix=[doxn] #地址(行号)显示方式
-Ad #decimal
-Ao #octal
-Ax #hex
-An #none
-w[BYTES] --width=BYTES #每行宽度(字节数)
-t --format=[acdfoux]
-t a #named character, ignoring hight-order bit
-t c #printable character or bachslash escape
-t dn #每n个字节用有符号十进制显示
-t un #每n个字节用无符号十进制显示
-t fn #每n个字节用浮点数显示
-t on #每n个字节用八进制显示
-t xn #每n个字节用十六进制显示
n=C for sizeof(char)
n=S for sizeof(short)
n=I for sizeof(int)
n=L for sizeof(long)
n=F for sizeof(float)
n=D for sizeof(double)
n=L for sizeof(long double)

touch

默认修改modify和access
touch -a #修改accesstime
touch -m #修改modifytime
touch -c #只修改时间,不创建
touch -d #--date="时间或者日期"
touch -t YYYYMMDDhhmm #修改为指定时间

umask

各用户分别配置
umask #获取新建文件及文件夹默认权限
umask -S #字符显示
umask xxxx #umask临时设置
目录默认权限 = rwxrwxrwx - umask
文件默认权限 = rw-rw-rw- - umask
普通用户默认umask:002 #rw-rw-r--
root用户默认umask:022 #rw-r--r--
/etc/bashrc

chattr

改变文件系统属性
+ #增加参数
- #删除参数
= #设定参数
A #存取不修改atime(mount时修改更为合理)
S #不缓存,同步写入磁盘
a #只能增加数据,不能删除修改资料
c #自动压缩
i #禁止删除,改名,软连接,写入,新增
s #完全删除,无法恢复
u #假删除,可恢复

lsattr

-a #显示隐藏文件的属性
-d #显示目录的属性,默认显示目录内的文件
-R #递归

file

检测文件类型
检测压缩类型
解析mbr、gpt分区备份

which

which command #查找命令位置
which -a command #查找所有命令位置
type command #查找bash指令

whereis

只查找bin man src
whereis -l #列出whereis查找的目录
whereis -b #只查找binary格式文件
whereis -m #只查找manual文件
whereis -s #只查找srouce文件
whereis -u #搜索除bin man src之外的其他特殊文件

locate

默认匹配全路径中包含关键字
locate keyword #从索引中查找文件,索引每天更新一次
locate -b keyword #只搜索basename文件名
locate -i keyword #忽略大小写差异
locate -c keyword #只计算找到的数量
locate -l n keyword #只输出n行
locate -S #输出locate数据库相关信息
locate -r regexp #正则表达式查询(注意:正则表达式匹配整个路径,只匹配文件名需要加-b)
updatedb #更新文件数据库
/var/lib/mlocate/mlocate.db

find

find path1 path2 ... option -exec ls -l {} \; #查找并执行

find path -[mtime|atime|ctime] n #第前n天的文件
find path -[mtime|atime|ctime] +n #第前n天之前的文件,不含前第n天
find path -[mtime|atime|ctime] -n #第前n天之内的文件,含前第n天
find path -newer file #列出比file还要新的文件
find path -mtime 0 #24小时之内修改过的文件

find path -uid n #使用id查找 /etc/passwd
find path -user name == find path -uid id -u name #使用用户名查找
find path -gid n #使用gid查找 /etc/group
find path -group name #使用用户组查找
find path -nouser #查找passwd不存在的用户文件
find path -nogroup #查找group不存在的用户组的文件

find path -name filename #使用文件名查找
find path -size +-num{c|k|m} #使用文件大小查找
find path -type {b|c|d|p|f|l|s|D} #按文件类型查找
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link
s socket
D door(Solaris)

find path -perm mode #按权限查找
find path -perm -mode #按必须包含的权限查找
find path -perm /mode #按包含任意的权限查找

多个后缀名查询

find /mnt/f ( -name *.mp4 -o -name ) -exec ./ffprobe {} \;

第七章:磁盘与文件系统

dumpe2fs 显示分区格式信息

dump ext2/3/4 filesystem information
dumpe2fs /dev/sda1 #列出文件系统信息
dumpe2fs -h /dev/sda1 #只列出superblock

blkid

blkid #列出目前挂载的已经格式化的设备的UUID

系统支持的文件系统

cat /proc/filesystems
ls -l /lib/modules/$(uname -r)/kernel/fs

df

df -option path
df -a #列出全部文件系统,包括虚拟文件系统
df -{k|m} # == df -B{K|M|G|T|P|E|Z|Y} --block-size=SIZE
df -h #humanreadable
df -T #列出文件系统格式
df -i #列出inode数量信息,默认列出容量信息

du

du -option path
du -a #列出目录与文件大小,默认不显示文件
du -h #humanreadabe
du -s --summarize
du -S --separate-dirs #不统计子目录

lsblk # list block device

lsblk -option path
lsblk -d #disk only
lsblk -f #列出文件系统类型及UUID
lsblk -i #使用ASCII输出关系符号
lsblk -m #输出设备权限信息
lsblk -p #列出设备完整名称
lsblk -t #列出设备详细资料

parted 命令式分区工具

parted -l #显示所有分区
mkpart [primary|logical|extended] [ext4|vfat|xfs] startMB endMB
parted rm [partition] #删除
parted device print #显示
parted device mklabel gpt|msdos|loop #修改分区类型

gpt交互式分区工具

gdisk /dev/device
? #help
d #delete
n #new
p #print
q #quit
o #重建GPT分区表
w #write

mbr交互式分区工具

fdisk /dev/device
fdisk -l #列出已经安装的硬盘及其信息
fdisk /dev/sdb #分区模式
m #help
p #print
n #new
n->p # new primary partition
n->e->l # new extend ->logic partition
t #change id
g #重建GPT分区表
o #重建MSDOS分区表
w #write

立即更新分区表

partprobe
partprobe -s #打印信息

查看分区信息

cat /proc/partitions

备份还原MBR

备份硬盘主引导记录

dd if=/dev/hda of=/disk.mbr bs=512 count=1  

还原硬盘主引导记录

dd if=/disk.mbr of=/dev/hda bs=512 count=1  

mkfs.xfs

mkfs.xfs -option /dev/device
mkfs.xfs -b blocksize #512 - 4K
mkfs.xfs -d parms #data section高级参数
mkfs.xfs -f #强制格式化已经被格式化的分区
mkfs.xfs -i parms #inode相关高级参数
mkfs.xfs -L labelname
mkfs.xfs -r parms #realtime section相关参数

mke2fs

创建分区系统/格式化
mke2fs -t ext4 /dev/sdb1
-b #blocksize 块大小
-c #check badblocks 坏块
-L #label 指定卷标
-j #journal 建立文件系统日志

格式化相关默认值

/etc/mke2fs.conf

其他

mkfs.ext3 /dev/sdb1
mkfs.ext4 -b size -L label /dev/sdb1
mkfs.vfat /dev/sdb1

显示/修改lable标签

e2label /dev/sdb1 NEWNAME

xfs_repair

xfs_repair /dev/device
xfs_repair -f file #检查文件
xfs_repair -n #只检查而不修复
xfs_repair -d #在单人维护模式下修复根目录

xfs_growfs

expands an existing xfs filesystem

fsck.ext4

fsck.ext4 -pf -b superblock /dev/device
fsck.ext4 -p /dev/device #自动确认修复
fsck.ext4 -f /dev/device #强制检查

fsck

fsck -t ext4 /dev/sdb1 #检查分区 -t指定文件系统格式,损坏严重时使用
fsck -y /dev/sdb1 #自动修复

mount

mount #显示所有挂载
mount -a #按/etc/fstab挂载
mount -t type device mountpoint #指定挂载文件系统类型
mount UUID=uuid dstdir
mount LABEL=label dstdir
mount -o option #指定挂载选项
async, sync #非同步,同步
atime, noatime #是否更新访问时间
ro, rw #readonly readwrite
auto, noauto #是否允许mount -a 自动挂载
dev, nodev #是否允许建立dev设备
suid, nosuid #是否允许suid sgid
exec, noexec #是否允许执行binary
user, nouser #是否允许一般用户执行mount
defaults #默认值rw,suid,dev,exec,auto,nouser,async
remount #出错后是否重新挂载
username=Everyone
password=''

mount替硬连接

硬链接不能连接目录,不能跨文件系统
mount --bind oldfile new file
mount --bind olddir newdir
umount卸载时必须使用挂载点

mount samba

mount.cifs //192.168.1.5/d /mnt/d -o username=yx,password=H
mount -t cifs //192.168.1.5/e /mnt/e -o username=yx,password=H,iocharset=utf8

umount

umount -f #强制卸载
umount -l #立即卸载
unmount device
unmount dir

fuser

yum install psmisc
identify processes using files or sockets
fuser -m /dev/sdb1 #列出文件打开的用户

lsof

yum install lsof
lsof /mnt/testsdb #list open file 列出打开文件

mknod

mknod device [bcp] [Major] [Minor]
修改设备类型、设备代码
b block
c char
p fifo

xfs_admin

xfs_admin [-lu] [-L label] [-U uuid] device
修改xfs系列文件系统信息
修改xfs Label UUID等配置
xfs_admin -l #显示设备Label
xfs_admin -u #显示设备uuid

uuidgen

生成uuid

tune2fs

tune2fs [-l] [-L label] [-U uuid] device
修改ext系列文件系统信息
tune2fs -l device#dumpe2fs -h 显示superblock信息
tune2fs -L label #修改label
tune2fs -U uuid #修改uuid

/etc/fstab

限制:

1、根目录必须挂载,且必须首先挂载
2、挂载点必须已经建立目录
3、一个挂载点只能挂载一次
4、一个设备只能挂载一次

格式

设备/uuid/label 挂载点 文件系统类型 选项 dump是否归档 fsck
/dev/sdb /mnt ext4 default 0 0

fstab带帐号密码格式

//server/share /mount/point smbfs username=[username],password=[password] 0 0

重新挂载root

单人模式中根目录是readonly模式使用以下命令修改文件
mount -o remount,rw,auto /

挂载光盘镜像

mount -o loop isofile dstdir

文件虚拟磁盘

dd if=/dev/zero of=filepath bs=1M count=512
mkfs.xfs -f filepath
mount -o loop filepath mountpoint

swap

分区ID设置为8200
mkswap device
mkswap file #文件做swap
swapon device
swapon -s #show
swapon -a #加载swap
swapoff file|device

/etc/fstab

device swap swap defaults 0 0

第八章:压缩打包备份

后缀名

.Z #compress(淘汰)
.zip #zip
.gz #gzip
.bz2 #bzip2
.xz #xz
.tar #tar
.tar.gz #tar gzip
.tar.bz2 #tar bzip2
*.tar.xz #tar xz

gzip

支持.Z .gz 对目录内的内容分别压缩
gzip file #压缩并替换原文件
gzip -c file > file.gz #输出压缩后的数据流
gzip -d file #decompress
gzip -t file #测试gz文件格式是否正确
gzip -v file #verbose
gzip -1 file #压缩等级,-1最快,压缩比最差,-9最慢,压缩比最好,default -6

gzip压缩相关命令

zcat
zmore
zless
zgrep
egrep # 支持.gz
znew # .Z 转 .gz

bzip2

bzip2 -c file > file.bz2 #输出压缩后的数据流
bzip2 -d file.bz2 #decompress
bzip2 -k file #keep original file
bzip2 -z option file #option
bzip2 -v file #verbose
bzip2 -1 file #-1 --fast -9 --best

bzip相关命令

bzcat
bzmore
bzless
bzgrep

xz

xz -c file > file.xz
xz -d file.xz #decompress
xz -t file.xz #test
xz -l file.xz #list
xz -k file #keep original file
xz -1

xz相关命令

xzcat
xzmore
xzless
xzgrep

tar

tar -cv[z|j|J] -f tarname.tar. file #create
tar -xv[z|j|J] -f tarname.tar.
[仅解压包中的某个文件] -C dir #extract
tar -t #test
-z #gzip .tar.gz
-j #bzip2
.tar.bz2
-J #xz *.tar.xz
-v #verbose
-f filename
-f /dev/st0 #备份到磁带机
-f - #输出到管道,从管道输入tarball
-C dstdir #解压路径
-p #保留权限与属性(解压时必须有备份文件的用户权限)
-P #保留完整路径
--exclude=File #排除文件
--newer [file|2015/01/01] #仅打包mtime ctime更加新的文件
--newer-mtime

xfsdump

1、不支持没有挂载的文件系统备份
2、必须使用root权限
3、只能备份xfs文件系统
4、只能用xfsrestore还原
5、使用UUID作为标识
xfsdump [-L session_label] [-M media_label] [-l 0-9] [-f file] filesystem
-l 0-9 # increamental backup level
xfsdump -I #i info /var/lib/xfsdump/inventory
* 注意增量备份时label务必不同 *

xfsrestore

xfsrestore -I #i info == xfsdump -I
xfsrestore -f dumpfile -L session_label -s spesific_file_or_dir restoredir
依次恢复level0到level9
xfsresotre -f dumpfile -i restoredir #互动模式

mkisofs

光盘镜像
mkisofs [-o file.iso] [-Jrv] [-V vol] [-m file] file and dir
默认将目录下的内容放在光盘的根目录下
-graft-point /要制作的目录 = /光盘下的目录
相当于将所有文件复制到零时目录,将零时目录制作成光碟
-o #outpust
-J #兼容windows
-r #兼容Linux权限
-v #verbose
-V vol #Volume
-m file #exclude
mkisofs -o /custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -V 'CentOS 7 x86_64' -boot-load-size 4 -boot-info-table -R -J -v -T . #可启动光碟

isoinfo

显示iso信息
isoinfo -d -i file.iso
-d #discription
-i #image

CentOS7 wodim 光盘刻录

CentOS6 cdrecord 光盘刻录

dd

dd if="input_file" of="output_file" bs="blocksize" count="number"
bs #default 512bytes
dd if=file1 of=file2 #复制文件
dd if=/dev/sr0 of=file.iso #制作镜像(镜像大小等于设备容量)
dd if=file.iso of=/dev/sda #制作usb启动盘
dd if=/dev/urandom of=filepath bs=1M count=1 # 创建随机文件
dd if=/dev/zero of=filepath bs=1M count=1 # 创建空文件

cpio

cpio -ovcB > [file|device] #备份
cpio -ivcdu < [file|device] #还原
cpio -ivct < [file|device] #查看
-o #output
-B #default:512bytes B:5120bytes
-i #input
-d #自动简历新目录
-u #自动覆盖旧文件
-t #配合-i查看
-v #verbose
-c #使用portable formate方式存储
输入的路径中,不能含有根目录,否则恢复时会覆盖根目录
* /boot/initramfs-xxxx 是cpio文件 *

第九章:vim

注意

root没有alias vi=vim
使用软连接共享配置文件:

ln -s /home/yingxuanxuan/.vimrc /root/.

模式切换状态机

一般模式->i, o, a, r, I, O, A, R->编辑模式
一般模式->:,/,?->命令行模式
一般模式<-ESC<-编辑模式
一般模式<-ESC<-指令模式

一般模式

h j k l # 方向键
n 方向 # 移动n

ctrl + f # forward 下一页
ctrl + b # back 上一页
ctrl + d # down 下半页
ctrl + u # up 上半页

n space # 向右移动n个字符
0 # Home
$ # End

H # head 最上行首字符
M # middle 中间行首字符
L # last 最下行首字符
G # 文件末
gg #文件头
nG #移动到第n行 gg=1G
n enter #向下移动n行

/key # 向下查询
?key # 向上查询
n # 查询下一个
N # 查询上一个
:n1,n2s/key1/key2/g # 替换n1到n2间的key1为key2
:1,$s/key1/key2/g # 替换全文的key1为key2
:1,$s/key1/key2/gc # confirm 互动模式

x # 向后删除 == del
X # 向前删除 == backspace
nx # 向后删除n个字符
dd # 删除行
ndd # 向下删除n行
d1G # 从本行删到文章首
dG # 从本行删到文件末
d0 # 从行首删到本字符
d$ # 从本字符删到行末

yy # 复制行
nyy # 复制n行
p # 粘贴到下一行
P # 粘贴到上一行
J # 下一行合并到本行
u # undo
ctrl + r # redo
. # 重复前一个动作

切换到编辑模式

i #insert 插入到光标前
I #Insert 插入到行首
a #append 插入到光标后
A #Append 插入到行尾
o #插入下一行
O #插入上一行
r #replace 替换单个字符
R #replace 替换

命令行

:w! #write
:q! #quit
ZZ #变更才存储
:w filename #另存为
:r filename #append文件内容到光标后
:n1,n2 w file #部分另存为
:! command #bash
:set nu/nonu #显示行号
:e! #恢复原始状态

区块模式

v # 进入字符选择模式
V # 进入行选择模式
ctrl + v # 进入列编辑模式
y # 复制
d # 删除
p # 粘贴

多文档编辑

vim file1 file2 file3
:n # next
:N # prev
:files # list

多窗口

:sp #同文件分割窗口
:sp file #不同文件分割窗口
ctrl + w, w # tab
ctrl + w, j # ctrl + w, down
ctrl + w, k # ctrl + w, up
ctrl + w, q # quit

命令补全

ctrl + x, ctrl + n # 以上文的内容进行补齐
ctrl + x, ctrl + f # 以当前目录下的文件名补齐
ctrl + x, ctrl + o # 以后缀名相关的内建语法进行补齐

配置文件

~/.viminfo # 使用记录,上次编辑位置,搜索关键字

:set # 显示与default不同的设置
:set all # 查看当前设置

~/.vimrc # 配置文件

  • 注意:配置文件无需冒号,单个双引号注释 *
    :set nu/nohu # 显示行号
    :set hlsearch/nohlsearch # 高亮搜索关键词
    :set backup # default nobackup filename~
    :set ruler # 状态栏行列标尺
    :set showmode # 显示当前模式
    :set backspace=(012) #2:删除原本的字符 01:只能删除刚刚输入的字符
    :syntax on/off #开启关闭语法颜色
    :set bg=dark/light #default light

换行符转换

dos2unix
unix2dos
dos2unix -k file #保留文件mtime
dos2unix -n oldfile newfile #另存为

编码转换

iconv

iconv --list
iconv -f fromcodec -t tocodec -o outputfile inputfile

繁简互转

iconv -f big5 -t gb2312

utf8繁简互转

iconv -f utf8 -t big5 vi.utf8 |iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8

修复ubuntu小键盘乱码

apt-get remove vim-common
apt-get install vim

第十章:shell

.bash_history

记录这次登录之前的command

wildcard 通配符

type

type command #显示是内建指令or外部指令
type -t command #测试命令类型是file alias builtin?
type -p command #显示外部指令path
type -a command #显示命令搜索顺序,显示所有command命令和alias

命令换行,转译Enter

\Enter

快捷键

ctrl + a = home
ctrl + e = end
ctrl + u = backspace增强,删除光标前所有内容
ctrl + k = del增强,删除光标后所有内容

声明变量

=
等号两边不能有空格
等号右边内容有空格时,需要使用' or "
""内的$var会被调用
''内的$var会保留$
可以使用\转译Enter,$,\,space,\,'等

调用变量

$var
${var}

获取命令执行结果

command
$(command)

变量内容累加

"$var"append
${var}append

unset

取消变量
unset var

变量跨进程引用

export #显示所有环境变量

env 环境变量

HOME #家目录~
SHELL #shell类型
HISTSIZE #history size
MAIL # /var/spool/mail/whoami
PATH
LANG
RANDOM #随机数 declare -i number=$RANDOM*10/32768 ; echo $number

set

显示所有变量包括env
BASH #当前使用bash路径
COLUMNS #列数
HISTFILE #历史文件
HISTFILESIZE #文件中最大记录数
HISTSIZE #内存中最大记录数
IFS=$'\t\n' #预设分隔符号
LINES #目前终端最大行数
PS1 #命令提示字符格式
PS2 #续行命令提示符
$ #当前shell所有的PID
? #上一条命令的返回值

locale

locale -a #显示所有支持语言
locale #显示当前语言配置
LANG与LC_ALL两个变量会被其他locale变量使用

read

read var #读取输入到变量
read -p "xx" var #提示字符
read -t second var #等待n秒

declare / typeset # 默认bash变量都是字符串,不会进行计算

declare #读取所有变量和值 ==set
declare -a var #array ${var[n]}
declare -i #integer #只能进行整数运算
declare -x # ==export
declare -r #readonly #必须重新进入bash才能改变

ulimit # user limit 用户限制

ulimit -a #显示所有限制值

core file size                      (blocks, -c)                       0 #core dump file size, 0 is unlimit  
data seg size                     (kbytes, -d)         unlimited #最大内存分段  
scheduling priority            (-e)                                  0  
file size                               (blocks, -f)         unlimited #单一文件大小限制,一次登录中只能减小不能增加  
pending signals                 (-i)                             3911  
max locked memory         (kbytes, -l)                      64 #最大锁定内存量  
max memory size              (kbytes, -m)       unlimited  
open files                           (-n)                             1024 #开启文件数量限制  
pipe size                             (512 bytes, -p)                8  
POSIX message queues     (bytes, -q)             819200  
real-time priority                (-r)                                  0  
stack size                            (kbytes, -s)                8192  
cpu time                             (seconds, -t)      unlimited #最大CPU时间  
max user processes            (-u)                            3911 #最大进程数量  
virtual memory                   (kbytes, -v)        unlimited  
file locks                              (-x)                    unlimited  

ulimit -H #hard limit限制值
ulimit -S #soft limit警告值

变量内容删除

${var#key} #从左向右删除,删除最短匹配
${var##key} #从左向右删除,删除最长匹配
${var%key} #从右向左删除,删除最短匹配
${var%%key} #从右向左删除,删除最长匹配
${var/key1/key2} #将首个匹配的key1替换为key2
${var//key1/key2} #将所有匹配的key1替换为key2
表达式 str没有定义 str="" str已经定义且不等于""
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr
var=expr str不变
var= str不变
var=$str
var=${str:=expr} str=expr
var=expr str=expr
var=expr str不变
var=$str
var=${str?expr} expr输出至stderr var= var=$str
var=${str:?expr} expr输出至stderr expr输出至stderr var=$str

alias unalias

使用\转译还原alias

history

history n # 列出最近n条命令
history -c # clean
history -r # read histfile
history -w # write histfile
history -a # append write
!n # 执行第n条指令
!key # 搜索开头为key的指令执行
!! # 执行上一条指令
ctrl + r

bash欢迎信息

/etc/issue #bash欢迎信息
/etc/issue.net #telnet欢迎信息
/etc/motd #登录后显示的欢迎信息

/etc/profile # login shell 配置文件

执行过程

决定PATH MAIL USER HOSTNAME HISTSIZE umask
执行/etc/profile.d.sh
执行/etc/profile.d/lang.sh -> /etc/locale.conf
执行/usr/share/bash-completion/completions/

执行顺序

  • login shell按顺序读取第一个存在的配置文件 *
    ~/.bash_profile # 读取~/.bashrc/bashrc->读取/etc/bashrc
    ~/.bash_login
    ~/.profile

source # 读取环境设置文件

source ~/.bashrc
. ~/.bashrc #小数点读取环境设置文件

~/.bashrc # non-login shell读取配置文件

读取/etc/bashrc 为CentOS特有,目的是执行login shell的profile和profild.d

~/.bash_logout # 退出后执行的命令

stty #s etting tty 快捷键配置

stty -a # list all
stty keyword keyboard #^是ctrl

intr # interrupt
quit # quit signal
erase # 向后删除
kill # 删除在目前指令上的所有文字
eof # End of file
start # 重新启动输出
stop # 停止输出
susp # terminal stop

set # bash tty设置

set -u #default no #未定义的变量显示错误信息
set -v #default no #信息输出前,会先显示信息的原始内容
set -x #default no #指令执行前,会显示指令内容,++指令内容
set -h #default yes #history
set -H #default yes #history
set -m #default yes #manage
set -B #default yes #设置[]
set -C #default no #使用>输出到文件时,文件存在则不覆盖
echo $- #显示所有set设定

其他terminal设置

/etc/inputrc
/etc/DIR_COLORS
/usr/share/terminfo/

通配符

星号* #任意n个字符
? #任意1个字符
[a,b] #括号内某个字符
[a-b] #编码顺序内任意字符
[^a] #排除字符

特殊符号

'#' # 注释
\ # 转义字符
| # pipo管道
; # 命令分隔符
~ # 家目录
$ # 取变量
& # 后台运行
! # not
/ # 路径分割
大于号> # 替换
两个大于号>> # 累加
< << #
'' # 不能置换变量
"" # 置换变量
`` # 先执行指令,再显示 ==$(cmd)
() # 子shell起止
{} # 命令区块

标准输入输出

stdin 0 < << #<<设置结束字符
stdout 1 > >>
stderr 2 2> 2>>
两条流不能同时写入一个文件,所以 cmd >file 2>file是错误的
正确的写法是 cmd >file 2>&1 或者 &>file
2>/dev/null #丢弃错误输出

组合命令

cmd;cmd #顺序执行
cmd1&&cmd2 #cmd1返回0则执行cmd2
cmd1||cmd2 #cmd1返回1则执行cmd2

cut

cut -d 'deviceby' -f fieldnum #取分段,从1开始计数
cut -c n1-n2 #截取字符n1到n2
cut -c n1- #截取字符n1到最末尾
cut无法处理多个空白字符,使用awk

sort

sort [-fbMnrtuk] file
-f #忽略大小写
-b #忽略行首空白
-M #以英文月份排序
-n #以数字排序
-r #reverse
-u #uniq 合并相同行
-t #分隔符,default=tab
-k #key field,以特定列排序

uniq # 合并重复

-i # ignore case
-c # count

wc

-l # line count
-w # English word count
-m # 字符个数

tee # 带显示的重定向 >
-a # append >>

tr

tr [a-z] [A-Z] # 按字符替换
tr key1 key2 # 按词组替换
tr -d key # delete

col

col -x # 将tab替换为对等的space
col -A # 显示所有空白字符

join # 按行拼接两个文本。默认以空白分隔,比较每行首列,一样则合并

-t # 设置分隔符号
-i # ignore case
-1 # 设置第一个文件用第几列比较
-2 # 设置第二个文件用第几列比较

paste

paste -d ' ' file1 file2 #按行拼接,默认两行以tab分割,-d设置devide

expand

expand -t n file #将一个tab以n个空格替换

split

split -b [b|k|m] file newname #按大小分割文件
split -l num file newname #按行分割文件

xargs # 给不支持管道的命令提供参数

cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id #-n 设置每次读取n个参数
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -p -n 1 id #-p 互动模式,每次询问是否使用参数
cut -d ':' -f 1 /etc/passwd | xargs -e'sync' -n 1 id #-eEOF 设置结束字符
find /usr/sbin -perm /7000 | xargs ls -l == ls -l $(find /usr/sbin -perm /7000)

减号- # stdout stdin替代符

tar -cvf - /home | tar -xvf - -C /tmp/homeback #-f - 将打包结果输出到stdout #-f - 从stdin输入tarball

第十一章:正则表达式与文件格式化

通配符

需要注意特殊语系,例如LANG=zh_TW.big语系字幕顺序是aAbB,使用[a-z]会出现错误。
[:alnum:] #0-9,A-Z,a-z
[:alpha:] #A-Z,a-z
[:blank:] #Space Tab
[:cntrl:] #CR, LF, Tab, Del 等
[:digit:] #0-9
[:graph:] #除了Space Tab以外的其他按键
[:lower:] #a-z
[:upper:] #A-Z
[:print:] #可打印的字符
[:punct:] #标点符号," ' ? ! ; : # $ 等
[:space:] #Space Tab CR 等
[:xdigit:] #0-9, a-f, A-F, 十六进制digit
^word #行首
word$ #行尾
^$ #空行
char. #1-n个任意字符
\ #转译bash字符及特殊字符
char* #0-n个字符
[list] #list当中的任意一个字符
[n1-n2] #顺序编码范围内的任意字符
[^list] #不在list当中的任意字符
{n,m} #连续n到m个字符
{n} #连续n个字符
{n,} #连续n到无限个字符

egrep # 扩展正则表达式

grep -E

char+ #1到n个字符
char? #0到1个字符
reg|reg #或
(reg) #组合
(reg)+ #1到n个模式

grep

grep [-acinv] [--color=auto] 'key' filename
-a #将binary以text文件的方式搜索
-c #count
-i #ignore
-n #line num
-v #反选
--color=auto #上色
grep [-Aafterline] [-Bbeforeline] 'keyregex' filename

sed

格式、参数

sed [-nefr] [n1[,n2]]function
-n #仅显示经过sed处理的行,默认stdin都打印到屏幕
-e #sed后面默认只支持一个function,若要支持多个,则-e fuc -e fuc
-f #从文件内读取sed指令
-r #增强正则表达式,默认基本正则表达式
-i #直接修改文件内容,默认输出到屏幕 , -i不可以用于软连接,会将软连接替换为文件
n1,n2 #选择需要处理的行范围,$可以代表最后一行

function 方法

a # append,在n1的下一行插入内容
i # insert,在n1的上一行插入内容
c # replace,替换n1,n2之间的内容
d # delete,删除n1,n2之间的内容
p # print,打印n1,n2之间的内容,需要配合-n
s # replace,正则表达式替换内容

printf

格式

printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt) # printf无管道功能,需要cat输入内容

参数

\a # alert声音
\b # backspace
\f # 清空屏幕
\n # 换行
\r # Enter
\t # Tab
\v # 垂直Tab
\xNN # 十六进制字符编码
%ns # 格式化输出string
%ni # 格式化输出integer
%N.nf # 格式化输出floating

awk

awk 'condition1{action1} condition1{action2} ...' filename
last -n 5 | awk '{print $1 "\t" $3}'
默认以Space Tab分割
$0 # 一整行
$1 # 第一列
NF # 每行列数
NR # 当前处理行
FS # 分隔字符 'BEGIN {FS=":"}' 设置分割符号
多条命令(action)分隔符 ; \Enter
if关键字 {if(condition)action}

使用变量

last -n 5| awk '{print $1 "\t lines: " NR "\t columns: " NF}'

条件使用加运算操作

cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total" } NR>=2{total = $2 + $3 + $4; printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'

diff

diff [-bBi] old new
-b # 忽略仅有空白的差异
-B # 忽略空白行的差异
-i # 忽略大小写差异

cmp

cmp -l old new #list 列出所有不同点,默认值列出第一个

patch

制作patch

diff -Naur passwd.old passwd.new > passwd.patch

更新patch

patch -pN < patch_file

还原patch

patch -R -pN < patch_file

第十二章:Shell Scripts

执行shell script的方法

  1. 绝对路径:/home/user/script.sh
  2. 相对路径:./script.sh
  3. 放在PATH路径:script.sh
  4. bash script.sh
  5. sh shell.sh #sh -n -x 可以用来检查语法

格式

#!/bin/bash  

声明环境变量

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
LANG=
export PATH

返回值

exit 0

获得输入

read -p "Please input: " input

整数运算

declare -i total=${num1}${num2}
total=$((${num1}
${num2}))
+
-
*
/
%

浮点数运算

echo "1.1*2.2" | bc

如果输入为空则使用默认值

read input
var=${input:-"default"}

不同执行方式的区别

默认:在新bash中执行,变量不能共享
source:在本bash中执行,source ~/.bashrc

test

test -e file && echo "exist" || echo "not exist"

文件测试

-e #exist
-f #file
-d #directory
-b #block device
-c #character device
-S #Socket
-p #pipe fifo
-L #link

权限测试

-r #read
-w #write
-x #execute
-u #SUID
-g #SGID
-k #Sticky bit
-s #非空白文档

文件比较

-nt #newer than
-ot #older than
-ef #equal(hard link)

数值比较

-eq #equal
-ne #not equal
-gt #greater than
-lt #less than
-ge #greater than or equal
-le #less than or equal

字符串

test -z string #zero 空字符串
test -n string #not 非空字符串 #可以省略 test string
test str1 == str2
test str1 != str2

多重条件

-a #and
-o #or
test ! option object #非

判断符号[]

[ -z "${HOME}" ]
[ "$HOME" == "$MAIL" ] #注意全部加空格以和正则表达式区分
变量还原注意两边加双引号"$HOME"避免还原后有空格

与或非

[] && [] #AND
[] || [] #or
[ -o ]
[ -a ]

系统变量

$0 文件名/程序名
$1 第一个参数
$2 第二个参数
$# 参数个数
$@ "$1" "$2" #使用双引号引起来的所有参数
$* "$1c$2" #使用分隔符c分隔的参数,默认为空格

参数偏移

shift #偏移一个参数,删除第一个参数
shift n #再偏移n个参数,删除前n个参数

if

if condition; then
fi

if condition; then
else
fi

if condition; then
elif condition; then
else
fi

case

case $var in
"casevar1")
;;
"casevar2")
;;
*)
;;
esac

函数 function

必须放在最前面

函数定义

function fname() {
}

函数使用

fname;

函数参数

$0,$1,$2

函数参数输入

fname var1 var2

while

while [condition]
do
done

until

until [condition]
do
done

for in

for var in con1 con2 con3
do
done

1到100

$(seq 1 100)

for

for (( i=1; i<=100; i=i+1))
do
done

数组

var[1]
var[2]
var[3]
varnu=3

随机数

check=$((${RANDOM}*${varnum}/32767+1))

sh

-n #不执行,仅检查语法
-v #执行前将script打印到屏幕上
-x #将使用到的script内容显示出来

判断命令是否存在

command -v foo >/dev/null 2>&1 #POSIX script
type foo > /dev/null 2>&1 #consider built-ins & keywords
hash foo 2 > /dev/null #for bash
which不是bash自带,不一定存在

第十三章:用户与ACL权限

重要

第十四章:Quota(磁盘配额), RAID, LVM

重要

第十五章:crontab、at

at

简介

需要服务atd,centos默认启动
at产生执行文本存入/var/spool/at/等待atd调用

执行优先级

优先级1、/etc/at.allow使用权限白名单
优先级2、/etc/at.deny使用权限黑名单,默认预留空at.deny允许所有用户执行at
优先级3、没有执行文件则只有root可以执行at

at -l == atq # list all at
at -v # list verbose
at -m # 执行完成后mail通知用户,默认有输出时才发送mail到mailbox
at -d jobid == atrm jobid #delete
at -c jobid # 列出jobid实际执行代码
at time # 进入任务编辑交互模式
HH:MM # 04:00
HH:MM YYYY-MM-DD #04:00 2015-07-30
HH:MM[am|pm] [Month] Date #04pm July 30
time + n [minutes|hours|days|weeks] #now +5 minutes #04 +3days

batch # 使用方法同at

uptime load average低于1时执行

crontab

简介

需要crond服务

优先级

优先级1、/etc/cron.allow使用权限白名单
优先级2、/etc/cron.deny使用权限黑名单,默认预留空cron.deny允许所有用户执行

相关位置

crontab命令建立的任务存入/var/spool/cron/username
执行日志 /var/log/cron

格式、参数

crontab [-u username] [-l|-e|-r]
-u # 给指定用户色画质
crontab -e #vi edit
crontab -l #list
crontab -r #remove all, 删除其中一项用-e编辑

格式

分钟 小时 日期 月份 周 command
0-59 0-23 1-31 1-12 0-7(0和7都代表星期天,周与日月不能并存)

通配符

星号 # 忽略这个参数,符合其他参数就执行
, # 列举
减号- # 范围
/n # 每隔n时间单位执行一次

示例

59 23 1 5 * command #每年五月一号23点59分执行
*/5 * * * * command #每隔5分钟执行
30 16 * * 5 command #每周五16点30分执行

系统crontab

/etc/crontab
/etc/cron.d/
某些系统会把crontab加载到内存,需要重启crond重新读取crontab *
/etc/cron.d/0hourly每小时定时执行/etc/cron.hourly里的脚本
/etc/cron.hourly/0anacron定时执行daily weekly monthly任务
/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly 里直接放执行脚本

各种cron区别

个人用户使用crontab -e其他用户看不到
系统维护使用/etc/crontab方便管理追踪
自己开发使用/etc/cron.d/file方便升级修改时直接替换文件
每小时/每日/每周/每天/每月固定执行使用/etc/cron.hourly|daily|weekly|monthly,系统会从目录中随机抽取任务执行,避免同时执行

anacron

简介

检查cron.daily及以上的任务是否因关机而未执行,为执行则定期执行
/etc/cron.hourly/0anacron #每小时定时检查程序是否定时执行anacron -s

anacron -s [job] # 根据/var/spool/anacron/*判断是否已经执行,未执行则执行
anacron -f [job] # 不判断执行情况,强制执行
anacron -n [job] # now,立即检查执行情况,未执行的立即执行,而不按配置延迟
anacron -u [job] # update,只更新执行时间记录而不执行任何任务

配置文件

/etc/anacrontab
RANDOM_DELAY=45 #随机给与最大延迟时间,单位分钟
START_HOURS_RANGE=3-12 #延迟多少个小时执行

格式:天数 延迟时间(分钟) 工作名称定义 实际要执行的command(利用cron的run-parts)
天数:与/var/spool/anacron/*记录的时间差,超过则执行
延迟时间:按天数判断超时后,延迟START_HOURS_RANGE+延迟时间 执行,避免同时执行

第十六章:程序管理与SELinux

基础知识

子程序会继承父程序权限
程序 program
进程 process
fork and exec # Linux进程会先fork复制一份进程作为临时程序,然后再exec执行子程序。

工作管理

限制登录个数

/etc/security/limits.conf

在后台执行任务

job control只能管理一个bash下的工作
工作状态有stop和running
使用&符号启动后台任务
立即返回值为[JobID]ProcessID,JobID只跟当前bash有关
执行完成后返回在bash中返回执行结果
执行过程中会将信息打印在bash,可以使用 > output.txt 2>&1 &,将输出、错误导出到文件

在后台暂停任务

[ctrl]+[z]

恢复后台暂停任务

bg
bg %jobid

查看后台任务状态

jobs [-lrs]
-l # 列出所有后台任务的JobID Job状态 命令 PID
-r # running 列出正在运行状态的工作
-s # stop 列出正在暂停的工作
加号+代表最近的一个任务,使用fg即可恢复
减号-代表倒数第二个任务

恢复后台任务

fg
fg %jobid

停止后台任务

kill -signalid %jobid # 对job发出信号,使用man 7 signal查询信号
kill -l # 列出所有signal信号

信号:
-1 # 重新读取一次参数设定,类似reload
-2 # 与[ctrl]+[c]相同
-9 # 强制立即停止
-15 # 信号默认值,以正常方式终止程序
例如使用-9,vi会来不及删除swp文件,使用-15,vi会以正常流程结束
使用signal名称与使用signal数字相同

bash后台与Linux系统后台

仅以&结尾的命令在bash后台运行,bash退出则命令停止运行
使用at可以使命令在系统后台运行与bash无关
使用nohup可以使命令在系统运行与bash无关

nohup command # 在bash前台运行,会打印到前台
nohup command & # 在bash后台运行
输出会存储在~/nohup.out

程序管理

ps

参数(带-不带-有区别):
-A # 显示所有进程,等于-e
-a # 显示与terminal无关的进程
-u # 显示有效使用者(effective user)相关进程
x # 显示完整信息
l # 显示较长,较详细的信息
J # 工作的格式(jobs format)
-f # 更加完整的信息

常用指令:

特殊文件与权限

SELinux

第十七章:systemd # service daemon 服务 守护进程

基础知识

daemon = service
daemon进程通常以d结尾

init管理方式(CentOS6)

/etc/rc.d/init.d # System V控制脚本
systemd不使用/etc/inittab文件。

服务管理方式:
/etc/init.d/daemon start # 启动
/etc/init.d/daemon stop # 关闭
/etc/init.d/daemon restart # 重启
/etc/init.d/daemon status # 状态
service daemon start
service daemon stop
service daemon restart
service daemon status
service --status-all

服务类型:
独立启动模式,stand alone
总管模式,super daemon,由xinetd或inetd管理socket和port,有socket连接请求则启动服务进程

服务依赖管理:
无,人工控制,固化在脚本中

有执行等级的分类:
/etc/rc/d/rc[0-6]/SXXdaemon -> /etc/init.d/daemon # XX为启动顺序,通过软连接控制等级所包含的服务器

修改启动配置:
chkconfig --list # 查看所有服务
chkconfig --list daemon # 查看状态
chkconfig daemon on # 设置为开机启动服务
chkconfig daemon off # 关闭开机启动服务

切换启动等级:
init 0 # 关机
init 1 # 单人模式
init 3 # 文字模式
init 5 # 图形界面
init 6 # 重启

systemd管理方式(CentOS7)

优点:
并行启动所有服务
自动检查依赖,递归启动
按功能分为不同unit,如service、socket、target、path、snapshot、timer
多个daemon合成target组,相当于systemv的启动等级
向下兼容init脚本

配置文件:
/usr/lib/systemd/system/ # 系统启动脚本
/run/systemd/system/ # 执行过程中产生的服务脚本,优先级高
/etc/systemd/system/ # 管理员配置的脚本,优先级最高,软链接到/usr/lib/systemd/system/
/etc/sysconfig/* # 服务相关配置
/etc/sysconfig/network-scripts # 网络配置
/var/lib # 服务数据库
/run # 服务临时文件,如lock file,PID file
/etc/services # 服务对应tcp/udp端口

服务类型:
.service # 一般服务
.socket # IPC socket,内部数据交换等
.target # 执行环境类型,服务集合
.mount / .automount # 自动挂在,NFS
.path # 文件侦测,打印机
.timer # 循环执行服务

systemctl

控制命令

systemctl start postfix.service # 启动
systemctl stop postfix.service # 停止
systemctl restart postfix.service # 重启
systemctl reload postfix.service # 动态加载配置
systemctl enable postfix.service # 开机启动
systemctl disable postfix.service # 开机不启动
systemctl status postfix.service # 获取当前状态
systemctl is-active postfix.service;echo $?; # 判断当前是否运行
systemctl is-enabled postfix.service;echo $?; # 判断当前是否开机启动
systemctl mask postfix.service # 注销,无论如何也不会启动,不会被其他服务启动
systemctl unmask postfix.service # 取消注销

服务状态

active(running) # 正在活动、正在执行
active(exited) # 正在活动,之行结束
active(waiting) # 正在活动,等待触发
inactive # 服务当前没有活动
enabled # 开机时被执行
disabled # 开机时不执行
static # 只能被其他服务唤醒,不能开机执行
mask # 设置为无法被启动,注销。

查询服务

参数:
--all # 列出未启动的
--type=service,socket,target # 列出指定类型

命令:
systemctl == systemctl list-units # 列出所有启动(loaded)的unit
systemctl list-unit-files # 列出/usr/lib/systemd/system/ 下所有服务
systemctl list-unit-files | grep enabled # 查看已启动的服务列表

target管理

系统target类型:
graphical.target # 包含了multi-user.target
multi-user.target # 纯文字模式
rescue.target # 救援模式,独立系统
emergency.target # 紧急模式,救援模式失败
shutdown.target # 关机
getty.target # 管理tty,配置文件修改tty个数

systemctl get-default # 获取默认target
systemctl set-defualt x.target # 设置默认target
systemctl isolate multi-user.target == systemctl isolate runlevel3.target # 切换到命令行模式, 相当于“运行级别3”
systemctl isolate graphical.target == systemctl isolate runlevel5.target # 切换到图形界面模式, 相当于“运行级别5”

target切换原理

systemd使用链接来指向默认的运行级别。在创建新的链接前,可以通过下面命令删除存在的链接
rm /etc/systemd/system/default.target
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target # 默认启动运行级别3
ln -sf /lib/systemd/system/graphical.target/etc/systemd/system/default.target # 默认启动运行级别5

target快捷命令

systemctl poweroff
systemctl reboot
systemctl suspend # 暂停模式
systemctl hibernate # 休眠模式
systemctl rescue # 救援模式
systemctl emergency # 紧急救援模式

依赖分析

systemctl list-dependencies x.target # 显示依赖
systemctl list-dependencies --reverse x.target # 递归显示依赖

配置服务

配置目录

/usr/lib/systemd/system/vsftpd.service # 官方配置
/etc/systemd/system/vsftpd.service.d/custom.conf # 建立同名目录放置修改配置.conf
/etc/systemd/system/vsftpd.service.requires/ # 启动依赖,启动前调用
/etc/systemd/system/vsftpd.service.wants/
# 建议依赖,启动后调用

配置说明

After=xxx # 赋值
1, yes, true, on # 真
0, no, false, off # 假
#, ; # 注释

配置项

[Unit] # 设置unit说明
[Services], [Socket], [Timer], [Mount], [Path] # 设置类型相关配置
[Install] # 设置归属target

Unit配置项

Description # 服务说明
Documentation # 文档资料
Documentation=http://
Documentation=man:sshd(8)
Documentation=file:/etc/ssh/sshd_config
After # 启动后建议启动的服务
Before # 启动前建议启动
Requires # 依赖的服务
Wants # 建议启动
Conflicts # 冲突服务

Service配置项

Type # 启动方式
Type=simple # 默认,由ExecStart指令启动,持续运行
Type=forking # 由ExecStart启动后通过spawns启动新的进程
Type=onshot # 由ExecStart指令启动,执行完则退出
Type=dbus # 需要一个D-Bus名称才会运行,依赖BusName配置
Type=idle # 限制服务,系统启动完成之后才启动
EnvironmentFile # 配置文件,也可以使用Shell变量配置
ExecStart # ststemctl start执行命令,可以接受参数,不接受管道
ExecStartPre # 启动前执行
ExecStartPost # 启动后执行
ExecStop # systemctl stop执行指令
ExecReload # systemctl reload
Restart=1 # 服务终止后再次启动,如tty
RemainAfterExit=1 # 所有服务程序都终止之后再次尝试启动,一般用于Type=oneshot
TimeoutSec # 无法启动或无法结束时,强制执行时间
KillMode=process # 只终止ExecStart启动的进程
KillMode=control-group # 终止服务启动的所有进程
KillMode=none # 没有程序会被终止
RestartSec # 重启时间间隔,默认100ms毫秒

Install配置项

WantedBy # 归属target,如multi-user.target
Also # 开启依赖服务,开启时自动enable的服务
Alias # 别名,例如default.target是multi-user.target

自定义服务配置示例

示例1:/usr/lib/systemd/system/sshd.service

[Unit]  
Description=OpenSSH server daemon
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

示例2:backup.service

[Unit]
Description=backup my server
Requires=atd.service

[Service]
Type=simple
ExecStart=/bin/bash -c "echo /backups/backup.sh | at now"

[Install]
WantedBy=multi-user.target

getty及相同服务多实例通配

(使用@通配文件中数字,使用%I在脚本中获取通配)
http://linux.vbird.org/linux_basic/0560daemons.php#systemd_cfg_repeat

timer相关服务配置

http://linux.vbird.org/linux_basic/0560daemons.php#systemctl_timer

CentOS7预设服务配置

预设服务

abrtd # 异常日志服务
accounts-daemon # D-Bus接口的账户查询服务,如useradd,usermod,userdel
alsa-X # 声音相关服务
atd # 定时服务
auditd # SELinux检查日志
avahi-daemon # Zeroconf自动管理网络
brandbot / rhel- # 开机环境检测,网络启动关闭等
chronyd / ntpd / ntpdate # 时间校对服务
cpupower # cpu运行规范,/etc/sysconfig/cpupower
crond # 定期服务
cpus # 打印机服务
dbus # D-Bus通讯服务
dm-event / multipathd # 设备监听服务,外设存储等
dmraid-activation / mdmonitor # 软raid服务
dracut-shutdown # 处理initramfs相关行为
ebtables # 桥接方式防火墙
emergency / rescue # 紧急模式服务
firewalld # 防火墙服务
gdm # GNOME登录服务
getty@ # tty登录服务
hyper
ksm libvirt vmtoolsd # 虚拟化相关服务
irqbalance # IRQ中断负载均衡服务
iscsi # SAN网络磁盘服务
kdump # Kernel dump服务
lvm2-
# LVM服务
microcode # Intel CPU微指令服务
ModemManager / network / NetworkManager # 调制解调器、网络相关服务
quotaon # Quota磁盘使用配额服务
rc-local # /etc/rc.d/rc.local调用服务
rsyslog # 日志记录服务,如/var/log/messages
smartd # 硬盘S.M.A.R.T监控服务
sysstat # 系统监视服务,CPU/流量/输入输出,记录在日志中
systemd-
# 系统运行所需服务
plymount* / upower # 图形界面相关服务

常用server服务

dovecot # POP3/IMAP服务
httpd # web server
named # 域名服务
nfs / nfs-server # Network Filesystem,NFS网络文件服务
smb / nmb # Windows文件共享,网络邻居服务
vsftpd # FTP服务
sshd # ssh服务
rpcbind # RPC服务,NFS、NIS依赖RPC
postfix # 邮件服务

第十八章:日志分析

重要

第十九章:开机流程、模块管理、Loader

重要

第二十章:系统基本设置与备份

nmcli

列出所有连接/连接配置

nmcli connection show
nmcli connection enp0s3

配置固定文件

nmcli connection modify eth0 connection.autoconnect yes
nmcli connection modify eth0 ipv4.method manual
nmcli connection modify eth0 ipv4.addresses 192.168.1.33/24
nmcli connection modify eth0 ipv4.gateway 192.168.1.1
nmcli connection modify eth0 ipv4.dns 192.168.1.1

自动获取IP

nmcli connection modify eth0 connection.autoconnect yes
nmcli connection modify eth0 ipv4.method auto

配置文件生效

nmcli connection up eth0

hostnamectl

hostnamectl # 显示hostname
hostnamectl set-hostname yx-centos7 # 设置hostname
cat /etc/hostname # 验证

timedatectl

timedatectl # 列出时间日期信息

修改时区

timedatectl list-timezones
timedatectl set-timezone "Asia/Shanghai"

修改时间

timedatectl set-time "2012-10-30 18:17:16"
date/hwclock #timedatectl包含修改主板时间动作

自动ntp对时

timedatectl set-ntp true/false
systemctl status chronyd.service

手动ntp对时

ntpdate tock.stdtime.gov.tw
hwclock -w

localectl

localectl # 显示系统语系设定
localectl set-locale LANG=en_US.utf8
local #显示bash语系设定
export LC_ALL=en_US.utf8 #设置bash语系设定

dmidecode

dmidecode -t system
dmidecode -t processor
dmidecode -t memory

lspci

lspci
lspci -v # 详细
lspci -vv # 细节
lspci -n # 直接显示ID不解析厂商名称
lspci -s 00:00.0 [-vvn] # 显示某一设备的信息

/usr/share/hwdata/pci.ids # pci信息对照表
update-pciids # 更新pci信息对照表

lsusb

lsusb
lsusb -t # tree显示
/usr/share/hwdata/pci.ids

iostat

安装

yum install sysstat

参数

iostat # 显示所有信息
iostat -c # 仅显示cpu状态
iostat -d # 仅显示存储设备状态
iostat -k #按K bytes显示存储信息
iostat -m #按M bytes显示存储信息
iostat -t #显示时间日期
iostat -d 2 3 vda #间隔2秒 检测3次 vda

硬盘SMART

smartctl -a /dev/sda
smartctl -t testtype /dev/sda

备份

/etc #配置
/home #用户文件
/var/spool/mail #邮件
/var/spool/at #定时任务
/var/spool/cron #周期任务
/boot #内核更新
/root #管理员文件
/usr/local #第三方软件及配置
/opt #第三方软件及配置
/var/www #httpd
/srv/www #httpd
/var/lib/mysql #db

dd备份整盘

dd if=/dev/sda of=/dev/sdb

cpio备份整盘

find / -print | cpio -covB > /dev/st0
cpio -iduv < /dev/st0

xfsdump差异备份

xfsdump -l 0 -L 'full -M 'full' -f /backupdata/home.dump /home
xfsdump -l 1 -L 'full-1' -M 'full-1' -f /backupdata/home.dump /home

tar排除备份

tar --exclude /proc --exclude /mnt --exclude /tmp --exclude /backupdata -jvcp -f /backupdata/system.tar.bz2 /

tar差异备份

tar -N '2015-09-01' -jpcv -f /backupdata/home.tar.bz2 /home

rsync本地同步备份

rsync -av srcdir dstdir

rsync网络同步文件夹

rsync . root@192.168.1.1:/root/
rsync -av -e ssh srcdir root@192.168.1.1:/dstdir

第二十一章:代码、tarball安装软件

重要

第二十二章:rpm, srpm, yum

基础知识

两大包管理器

dpkg # Debian,B2D,Ubuntu包管理器
RPM # RedHat Package Manager,Fedora,CentOS,SuSE

依赖管理器

yum # RPM依赖管理器
APT # dpdk依赖管理器

相关命令

rpm, rpmbuild, yum
dpdk, apt-get

rpm与srpm

rpm是已经编译好的特定平台的包,文件名.rpm
srpm是未编译的源代码包,文件名
.src.rpm

srpm与tar包区别

srpm含有依赖性说明,tar包没有

包名称及硬件平台

rp-pppoe-3.11-5.el7.x86_64.rpm
软件名称-版本号-编译版本次数(bug修复)-硬件平台

i386 # 适用于所有386平台
i586 # 针对586编译优化,如奔1 Intel MMX,AMD K5/K6
i686 # 针对686编译优化,如奔2,AMD K7
x86_64 # 针对64位CPU编译优化,如Intel Core2,AMD Athlon64
noarch # 没有硬件限制,无二进制文件,如shell script

二进制版本与开发用途版本

pam-x.x.rpm
pam-devel-x.x.rpm # 开发用途版本

rpm包保存位置

/var/cache/yum

rpm

参数

-i # install,安装
-e # erase
-U # update
-h # horizon,横向显示更新进度
-v # verbose,显示详细信息

安装

rpm -ivh nginx # 从本地安装
rpm -ivh http://xxx.xx.x./x.rpm # 从网络安装,并显示进度及详细信息

--nodeps # 强制忽略依赖性
--replacefile # 强制覆盖已经安装的旧版本
--replacepkgs # 强制重新安装已经安装的版本
--force # --replacefile + -- replacepkgs
--test # 测试而不安装
--justdb # 更新rpm数据库
--nosignature # 忽略数字签名
--prefix path # 指定安装路径
--noscripts # 不自动执行初始指令

更新

rpm -Uvh nginx # 升级x,未安装则安装
rpm -Fvh nginx # 升级x,但从未安装过时则不执行

查询

rpm -qa # 查询所有已安装的包
rpm -qa | grep java # 不支持通配,需要配合grep
rpm -q[licdR] nginx # 查询是否安装
rpm -qf /etc/yum.conf # 查询文件属于哪个软件
rpm -qp[licdR] 未安装的rpm # 查看rpm信息

-qi # information,列出详细信息
-ql # list,列出包含所有文件
-qc # config,列出所有配置文件,/etc
-qd # 列出所有说明文件,man文件
-qR # Required,列出所有依赖
-qf # 查询文件所属的包
-q --scripts # 列出安装后执行的脚本,一般用于debug

签名与验证

rpm -Va # 列出所有被改动过的文件
rpm -V name # 验证软件是否被改动过
rpm -Vp # 验证rpm包中某个文件
rpm -Vf # 验证系统中某个文件

标志位含义:
S # file Size differs,文件大小变化
M # Mode differs,文件读写权限变化
5 # MD5 sum differs,MD5校验码变化
D # Device major/minor number mis-match,设备主/次代码变化
L # readLink(2) path mis-patch,Link路径变化
U # User ownership differs,文件所有权变化
G # Group ownership differs,文件归属组变化
T # mTime differs,文件创建时间变化
P # caPabilities differ,功能被改变

文件类型标识:
c # config file,设置
d # documentation,文档
g # ghost file,文件不被软件包含
l # license file,授权文件
r # read me,ReadMe文件

数字签名位置:
/etc/pki/rpm-gpg/

数字签名类型:
GnuPG, GNU Privacy Guard, GPG

导入数字签名:
rpm --import gpg-key

使用rpm查询pubkey:
rpm -qa | grep pubkey
rpm -qi gpg-pubkey-ba443ef2-531f0f95

rpm -K x.rpm #验证rpm包

删除

rpm -e nginx # 删除,需要自己递归解除依赖关系

重建数据库

rpm --rebuilddb

rpm数据库

/var/lib/rpm/

yum

参数

-y # 全部同意
--installroot=/some/path # 安装到非默认路径
--enablerepo=epel
--disablerepo=

查询

yum search keyword # 根据软件名和描述搜索
yum list # 列出所有安装包
yum list packagename* # 列出安装包基本信息,可以使用通配符
yum list updates # 列出所有可升级的包
yum list installed # 列出所有已经安装的包
yum info # 列出所有安装包详细信息
yum info packagename # 列出安装包详细信息
yum provides command | file # 根据文件搜索安装包
yum whatprovides command #查找哪个包提供此命令

安装、更新

yum install packagename # 安装
yum update packagename # 更新
yum update # 全部更新
yum update-to package-version # 更新到某版本

删除包

yum remove packagename # 删除
yum erase packagename # 删除

清除缓存

yum clean [packages|headers|metadata|cache|all] # 删除/var/cache/yum缓存

配置文件

/etc/yum.conf
/etc/yum.repos.d/*

yum定时任务

yum install yum-cron

软件库管理

yum repolist
yum repolist all

yum-config-manager

yum-config-manager --enable epel # 开启源
yum-config-manager --add-repo ./repository.repo # 从文件添加源
yum-config-manager --add-repo https://www.example.com/repository.repo # 从网络添加源

yum install from cdrom

createrepo xxx#建立rpm索引
mkdir /media/cdrom
mount /dev/cdrom /media/cdrom
cat >>/etc/yum.repos.d/CentOS-Local.repo<<-EOF
[Local]
name=Local Yum
baseurl=file:///yum/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1
yum --disablerepo=* --enablerepo=Local

下载源代码

yum install yum-utils
yumdownloader --source

yum 建立信息缓存

yum makecache fast # 只验证库
yum makecache # 下载所有开启的软件库的有信息

yum 最快镜像

yum install yum-plugin-fastestmirror
/etc/yum/pluginconf.d/fastestmirror.conf
/var/cache/yum/x86_64/7/timedhosts

组管理

yum grouplist # 列出所有组
yum groupinfo groupname # 列出指定组信息
yum groupinstall groupname # 安装组
yum groupremove groupname # 删除组
yum --setopt=group_package_types=mandatory,default,optional groupinstall "Performance Tools" # 也可以在yum.conf中配置默认选项

CentOS源 # rpmfusion EPEL Remi RPMForge

centos6

sudo yum install epel-release
sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm

centos7

sudo yum install epel-release
sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

srpm

不修改任何设置直接对srpm包操作

rpmbuild --rebuild # 编译、打包、生成rpm包、不安装,生成的安装包存放路径有提示
rpmbuild --recompile # 编译、打包、并且安装

目录

./rpmbuild/SPECS # 软件的设置文件
./rpmbuild/SOURCES # 源码以及config文件
./rpmbuild/BUILD # 编译过程文件
./rpmbuild/RPMS # rpm包
./rpmbuild/SRPMS # SRPM解压

设置文件

./rpmbuild/SPECS/packagename.spce

在srpm解压的包中编译

rpmbuild -ba package.spes # 编译成rpm和srpm
rpmbuild -bb package.spes # 编译成rpm

将自己的程序打包成rpm和srpm

建立spec文件
http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php

CentOS 附加软件库

https://wiki.centos.org/zh/AdditionalResources/Repositories

CentOS Extras

在 CentOS 5 及 6,这些组件提供额外功能,但不损坏 CentOS 与上游的兼容性,也不会更新基本组件,然而上游并未测试这些软件,它们亦不包含在上游产品内。在 CentOS 7 这是上游的软件库,也包含额外的 CentOS 组件。CentOS 的开发小组已经针对这个软件库内的每个程序作出测试,确定它们能在 CentOS 下运作。这个软件库已连同 CentOS 一并安装,并缺省为启用的。

CentOSPlus

这些组件为了提供额外功能,会更改 CentOS 的某些基本组件。这个软件库会导致 CentOS 与上游供应者的内容有异。CentOS 的开发小组已经针对这个软件库内的每个程序作出测试,确定它们能在 CentOS 下运作。上游供应者并未测试这些软件,它们亦不包含在上游产品内。这个软件库已连同 CentOS 一并安装,但缺省为停用的。由这个软件库提供的受欢迎组件包括:支持 mysql 及 postgresql 数据库的 CentOS 5 postfix,CentOS-Plus 内核(含有额外修正、驱动程序/功能的重建内核),及支持 Xen 的 CentOS 6 内核。
https://wiki.centos.org/zh/AdditionalResources/Repositories/CentOSPlus

CentOS-Fasttrack

这里不时发布错误修正和强化升级,及那些有可能纳入上游供应者的下轮更新发布的组件。配置文件包含在为CentOS-5, CentOS-6, and CentOS-7提供的RPM包中,只是它默认是关闭的。如果你想参与进来并且启用Fasttrack,你可以编辑/etc/yum.repos.d/CentOS-fasttrack.repo,并且把Enabled=0设置为Enabled=1来为CentOS所有的活跃版本开启Fasttrack仓库。

debuginfo

组件载有编译主组件时所产生的侦错符号。这个软件库的配置文件缺省是不被提供的。oprofile、crash 及 systemtap 等工具需要 debuginfo 组件。请留意 debuginfo 组件也许会未被签署,因此它们必须以 --nogpgcheck 来安装,或在软件库定义内采用 gpgcheck=0。这些组件可以在 http://debuginfo.centos.org/ 找到。

CR

持继发行(CR)软件库内藏有下个 CentOS 定点发行本的组件。此软件库只会由上游推出定点发行,直至 CentOS 推出官方发行期间才会有内容。它们应被视为测试性质,不推荐用于生产用的服务器。
https://wiki.centos.org/zh/AdditionalResources/Repositories/CR

软件选集

软件选集(SCL)软件库内收藏了某些程序的较新版本。你可同时安装新旧版的组件。截至本文,该软件库包含 mariadb55、mysql55、nodejs010、perl516、php54、postgres92、python27、python33 及 ruby193 的组件。请留意截至本文,我们仍未能复制上游的 SCL 1.1 组件,并推荐采用 https://www.softwarecollections.org/ 。
https://wiki.centos.org/zh/AdditionalResources/Repositories/SCL

获社群认可的软件库

这些软件库经常获社群推荐,普遍维护得不错,并且为 CentOS 提供为数不少的额外组件。它们同样与 CentOS 没有 关系,是独立个体。上述有关更新及先后次序的警告仍然生效!

Extra Packages for Enterprise Linux (EPEL)

(见 http://fedoraproject.org/wiki/EPEL )提供为 EL5、EL6 及 EL7 重建的 Fedora 组件。组件应该不会取替 base,虽然在过往的定点发行版本曾出现问题。你可以执行 yum install epel-release 来安装 EPEL。epel-release 组件已包含在缺省获启用的 CentOS Extras 软件库内。支持可在 Freenode 的 #epel 频道、邮件列表、及它的 问题追踪库内找到。

The Community Enterprise Linux Repository (ELRepo)

(见 http://elrepo.org/ )集中以 kmod 驱动程序来增强 EL5、EL6 及 EL7 的硬件支持(包括:显示、文件系统、硬件监控、网络、音效、网络摄像镜驱动程序)。也提供较新版的内核。请遵照 ELRepo 主页来安装 elrepo-release 组件并输入它的 GPG 金钥。详情请参阅网站。支持途径包括 Freenode 上的 #elrepo 频道,ELRepo 用户及 ELRepo 开发者的邮件列表,还有它的 问题追踪库。

IUS Community Repo

(见 https://ius.io/ —— http://lists.centos.org/pipermail/centos-docs/2009-November/003730.html )「提供『最新版的上游 PHP、Python、MySQL 』。它获得 Rackspace 的内部工作所赞助(但没有官方支持)。」请参阅它的客户端使用指南来安装 ius-release 组件并设置软件库。请参阅它的常见问题集,当中很坦率地探讨利与弊。

其它第三方软件库

这些软件库的质量参差。他们也许由于某些组件而获推荐,但有些软件库可能会盖过 base 组件。软件库的排位与声誉无关。它们是按英文字母来排列。

agr-free

(见 http://rpm.agresearch.co.nz/ )它只为 x86_64 结构上的 EL6 发行版本提供生物信息学的软件。该软件库由纽西兰的 AgResearch 所管理,内里含有大量生物信息学软件及依赖性组件供选择,它们是 AgResearch 内的科学家所应用的软件。该软件库缺省是与 EPEL 软件库一起应用的。详情请参阅它的 主页。

ATrpms

(见 http://atrpms.net/ )提供大量新鲜出炉的应用程序及媒体工具,例如 myth-tv。备有 atrpms 用户的邮件列表。

GhettoForge

(见 http://GhettoForge.org/ )为 EL5 及 6 提供其它第三方软件库所没有的组件及较新版的组件。会盖过 base 的组件都收藏于 [gf-plus] 软件库。请参阅 GhettoForge wiki 内的应用部份了解如何协调地运用 gf-plus 组件。请加入 freenode IRC 的 #ghettoforge 频道寻求支持。

LinuxTECH.NET

(见 http://pkgrepo.linuxtech.net/el6/ )提供影音的组件,尤其是通过启用组件中可选的功能来提供最广泛的编解码器支持。亦收藏其它组件。启用 backports 软件库有可能取替 base 组件。软件库配置文件已收录于:http://pkgrepo.linuxtech.net/el6/release/linuxtech.repo 。

nux-dextop

(见 http://li.nux.ro/repos.html )为 EL6 及 7 提供以桌面及多媒体为导向的组件。它收录了大量如 Ardour 等图像化软件,亦有 Cone 等文字软件。依赖 EPEL 但不会复盖 base。

RPMfusion Repository

(见 http://rpmfusion.org/ )为 EL5 及 6 提供「Fedora Project 或 Red Hat 所不愿发行的软件」。已知道会取代 base 组件。备有 RPMfusion 用户的邮件列表。

The SerNet Samba Repository

(见 http://www.sernet.de/en/samba/ )一个德国网站,为 CentOS 5 及 6 提供 samba 3 和 4 的组件,及大量其它组件。某些用户汇报能成功地使用这些组件,但推荐小心使用。

Trinity Desktop Environment (TDE)

(见 http://www.TrinityDesktop.org/about.php )为 EL5、6 及 7 提供组件来支持以 KDE 3.5 方式操作的桌面。备有 EL5、6 及 7 的 yum 软件库。他们亦有专用的支持资源可查询有关 Trinity 的问题。

已知的问题软件库

下列软件库会在只提供少量甚至没有警告的情况下大规模地取替 base 组件,导致已知的问题出现。请极度谨慎地选择应否采用这些软件库,并考虑改用上述软件库替换。

Atomic Repo

(见 See https://www.atomicorp.com/channels/ )Atomicorp 拥有商业产品及免费软件库,内中有较新的 PHP、MySQL 和大量其它组件。在其它地方未必可以找到的组件包括 hunspell、snort 及 zabbix。他们亦提供 Plesk。

Jason Litka - Utter Ramblings Repository

(见 http://www.jasonlitka.com/yum-repository/ )更新 EL5 核心组件所提供的 web stack 及其它应用程序。包括 apr、apr-util、freetds、httpd、libmcrypt、mhash、mod_evasive、mod_perl、mod_python、mod_security、mysql、mysqlclient10、mysqlclient14、pcre、perl-BSD-Resource、php、php-apc、php-eaccelerator、php-memcache、php-pear、php-xcache、subversion、tidy。由于这个软件库替换核心组件,推荐谨慎地使用它。

Les RPM de Remi Repository

(见 http://rpms.famillecollet.com/ )Remi Collet 维护最新版的 mysql 及 php(反向移植 Fedora 的 RPM)。由于这个软件库替换核心组件,推荐谨慎地使用它。

RPMForge/RepoForge

虽然一度获推荐,这个软件库已不再被维护,因此不推荐使用。

第二十三章:xwindow

第二十四章:内核编译

服务器四:Internet连接

查看内核网卡加载

dmesg | grep -in eth
eth0: e1000_probe: Intel(R) PRO/1000 Network Connection

查看pci网卡加载

lspci | grep -i ethernet

查看内核模块加载

lsmod | grep e1000_probe

查看模块信息

modinfo e1000

手动加载模块

cp e1000.ko /lib/modules/$(uname-r)/kernel/drivers/net/e1000/e1000.ko
rmmod e1000
modprobe e1000
modinfo e1000

手动设置开机加载模块

echo "alias eth0 e1000" > /etc/modprobe.d/ether.conf
sync; reboot;

手动临时设置ip

ifconfig eth0 192.168.1.1

配置文件

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"  
BOOTPROTO="dhcp/none" #是否使用dhcp  
HWADDR="MAC" #用于区分相同驱动网卡  
IPADDR=ip  
NETMASK=ip  
ONBOOT="yes"  
GATEWAY=ip
NM_CONTROLLED="no" #网管软件
NETWORK=ip #略
BROADCAST=ip #略
MTU=1500 #略

/etc/sysconfig/network

NETWORKING=是否支持网络
NETWORKING_IPV6=是否支持IPV6
HOSTNAME=主机名

/etc/resolv.conf

nameserver dnsip
dig www.baidu.com #检查是否设置成功

/etc/hosts

ip 主机名称 别名

/etc/service

tcp/udp服务端口号定义

/etc/protocols

ip承载协议定义

/etc/init.d/network restart

systemctl restart network.service
网络启动脚本

ADSL

yum install rp-pppoe
pppoe-setup
pppoe-start
pppoe-stop
chkconfig pppoe-server off

GATEWAY

gateway 只能在一个网卡的配置文件中设置,系统共用一个gateway
dhcp时不能设置gateway

服务器五:网络操作

ifconfig

ifconfig
ifconfig eth
ifconfig eth up
ifconfig eth down
ifconfig eth mtu 1500
ifconfig netmask 255.255.255.0
ifconfig broadcast 192.168.1.255
ifconfig eth:0 192.168.1.1 #多IP配置
ifup eth
ifdown eth

arp

arp #列出所有
arp -n #不解析ip
arp -d hostname #删除主机
arp -s hostname/ip mac #设置arp

route

route #显示所有路由
route -n #不解析主机名称

Flags

U:表示有路由可用
G:表示该网域需要经过网关转发
H:表示路由目标是一个主机
R:标记恢复动态路由
D:已经由服务或者port转发功能设定为动态路由
M:路由已经被修改
!:这个路由不会被接受(用于防止接入不安全的网络)
route -ee #显示详细信息
route add -[net|host] netmask [gw|dev]
route del -[net|host] netmask [gw|dev]
route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0
route del -net 192.168.100.0 net mask 255.255.0.0 dev eth0
route add default gw 192.168.1.250

ip

ip link show #显示所有网络接口
ip -s link show #显示所有网络接口及其统计
ip -s link show eth
ip link set eth up
ip link set eth down
ip link set eth address aa:aa:aa:aa:aa:aa
ip link set eth name neweth
ip link set eth mtu 1500

ip address # 网络层配置

ip address show
ip address show eth0
ip address add 192.168.1.1/24 broadcat 192.168.1.255 dev eth0 label eth0:newip
ip address del 192.168.1.1/24 dev eth0

ip route

ip route show
ip route [add|del] [ip|net] [var gatewayip] [dev eth]
ip route add 192.168.1.1/24 dev eth0
ip route add 192.168.1.1/24 var 192.168.1.254 dev eth0
ip route add default var 192.168.1.254 dev eth0
ip route del 192.168.1.1/24

dhcclient # 手动获取ip

dhclient eht0

ping

ping -c count ip
ping -n ip #不解析
ping -s packagelength ip#设置ping包大小
ping -t ttl ip
ping -W waitseconds #等待时间
ping -M do/dont #侦测mtu,do,发送don't fragment标记,dont,不发送don't fragment标记

MTU检测

ping -s 1472 -M do ip #检测MTU是否为1500,ip报头20+icmp报头8+icmp长度1472

检测网络内所有ip

#!/bin/bash  
for siteip in $(seq 1 254)
do
    site = "192.168.1.${siteip}"
    ping -c1 -W1 ${site} &> /dev/null
    if ["$?" == "0"]; then
        echo "$site is UP"
    else
        echo "$site is DOWN"
    fi
done

traceroute

traceroute ip
traceroute -n ip #不解析
traceroute -U ip #使用udp port 33434侦测(默认)
traceroute -I ip #使用ICMP侦测
traceroute -T ip #使用TCP port 80侦测
traceroute -w waitseconds ip #默认5秒
traceroute -p port ip #设置检测端口
traceroute -i interface ip #设置网卡
traceroute -g gateway

netstat

netstat -r #列出路由表
netstat -n #不解析
netstat -a #列出所有连接状态 tcp/udp/unix socket
netstat -t #tcp
netstat -u #udp
netstat -l #listen
netstat -p #列出pid和程序名称(需要root权限)
netstat -c reflashseconds #设置更新时间

host

host www.baidu.com
host -a www.baidu.com #显示详细主机信息
host -a www.baidu.com otherdnsip #使用特定dnsip查询

nslookup

nslookup www.baidu.com
nslookup -query=dnstype hostname/ip

telnet

telnet host
telnet ip
telnet ip port # 检测端口是否启动

ftp

ftp host/ip port

>anonymous #匿名登录  
>help  

lftp # 命令式ftp

lftp -p port -u user,pwd host/ip #交互模式
lftp -f ftpscriptfile #ftp脚本模式
lftp -c "command" #命令模式

wget # 下载

wget --http-user=user --http-password=pwd --quit www.baidu.com
-i file #从文件中按行读取网址
--bind-address=ip/host #指定ip下载
-O name(--output-document=name) #保存为
-c --continue #断点续传
-S --server--response #打印响应头部
--no-proxy #不使用代理
--secure-protocol=auto/SSLv2/SSLv3/TLSv1
-m #下载整站
-r(--recursive)#递归下载
-l depth(--level=depth) #递归层数
-k(--convert-links) #将绝对路径转换为相对路径,方便本地浏览链接
-p #下载网页所需的所有文件图片
-A c, h #指定要下载的文件样式列表
-nc #不下载已经存在的文件
-np #不跟随链接,只下载指定目录及子目录

tcpdump

tcpdump [-AennqX] [-i interface] [-w writefile] [-c count] [-r readfile] [filter]
-A #截取内容以ASCII显示
-e #使用mac层信息显示
nn #不解析,使用ip/port显示
-q #仅列出简短信息
-X #十六进制 ASCII对照显示

filter

'host baidu.com'
'host ip'
'net 192.168'
'src host 127.0.0.1'
'dst net 192.168'
'tcp/udp/arp/ether port 22'
and #且
or #或

nc/netcat # 端口连接器

nc ip port
nc -u ip/host port #udp
nc -l ip/host port #listen
nc -l ip port -e /bin/bash #将本地bash暴露到端口,需要编译参数GAPING_SECURITY_HOLE

服务器七:网络安全

防火墙分类

网络层防火墙:IP Filtering Net Filter
传输层防火墙:/etc/hosts.allow /etc/hosts/hosts.allow
应用层防火墙:应用程序权限
系统级防火墙:SELinux,系统控制的应用程序权限
文件级防火墙:文件权限

nmap

nmap [type] [option] [hosts or nets]

type

-sT #已连接的tcp
-sS #带有SYN的tcp
-sP #以ping方式进行扫描
-sU #以UDP进行扫描
-sO #以IP进行扫描

option

-PT #使用TCP的ping扫描
-PI #使用ICMP的ping扫描
-p portrange #使用特定端口范围扫描

hosts or nets

192.168.1.100
192.168.1.0/24
192.168..
192.168.1.0-50, 60-100, 103, 200

示例

nmap ip #默认,扫描tcp端口
nmap -sTU ip #扫描tcp和udp端口
nmap -sP net #扫描网络内所有开机的机器

selinux

服务器八:路由

查看是否开启转发功能

cat /proc/sys/net/ipv4/ip_forward

临时开启数据转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

永久开启数据转发功能

/etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p # 立即生效

使用linux做路由器

自动路由

arp转发

服务器九:防火墙、NAT转发

服务器十:域名

服务器十一:远程连接

ssh

ssh ip #使用当前用户登录默认端口ip的ssh
ssh -p port user@ip #指定端口用户登录
ssh -f user@ip command #远程执行command不登录
ssh -o option ip #ConnectTimeout=second, StrictHostKeyChecking=[yes|no|ask]

ssh证书登录

ssh -i x.pem ec2-user@ip

创建ssh登录密钥

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

server端密钥存储位置

cat 公钥 >> /user/.ssh/authorized_key or authorized_key2

密钥格式转换

ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub

client端密钥存储位置

cat 私钥 > /user/.ssh/id_rsa

多个client私钥存储

方法一:

eval `ssh-agent -s` #使用eval是因为要执行ssh-agent的结果来加入环境变量  
ssh-add ~/.ssh/new_id_rsa    

方法二:编辑.ssh/config

Host            shortname  
HostName  long.name.com  
IdentityFile  ~/.ssh/new_id_rsa   
User             username   

方法三:
编辑~/.bash_profile

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add ~/.ssh/
fi

方法四:
编辑~/.bash_profile:

eval `keychain --eval id_rsa`

本机公私钥匙存储路径

/etc/ssh/ssh_host_
/etc/ssh/ssh_host_
.pub

本用户已知公钥存储路径

~/.ssh/known_hosts

本用户登录公钥存储路径

~/.ssh/authorized_key2

sshd配置

/etc/ssh/sshd_config
Port 22
Protocol 2,1 #要支持1需要明确指定
LoginGraceTime 2m #登录等待时间
Compression yes/no/delayed #登陆后压缩
PermitRootLogin no
PasswordAuthentication no
AuthorizedKeysFile .ssh/authorized_keys #公钥路径配置
PermitEmptyPasswords no
DenyGroups nossh #禁止nossh登录
DenyUsers testssh #禁止testssh登录

安全配置

/etc/hosts.allow
sshd: ip1 ip2/255.255.255.0
/etc/hosts.deny
sshd:ALL

sftp

sftp user@ip

scp

scp [-pr] [-l limitspeed] file user@ip:/dir/file
scp [-pr] [-l limitspeed] user@ip:/dir/file file
-p # 传输时保留文件权限及时间戳
-r # 递归复制目录
-l # 限制速率为kbps
-C # 传输时数据压缩

xdmcp

组件

X Server负责显示
X Client负责计算
Window Manager (GNOME, KDE, XFCE) 管理一组X Client
Display Manager(DM) 提供登录界面启动Window Manager
xdmcp监听udp 177等待x server连接

1,使用命令 yum install xdm 安装XDM
通过 XDMCP 支持来管理 X 显示器集合
2,修改/etc/X11/xdm/Xaccess文件,找到下面的语句:# * #any host can get a login window,
去掉这一行最前面的#号,成为:* #any host can get a login window
3,修改/etc/gdm/custom.conf文件。
找到下面的语句:[xdmcp],在这句下面加上以下两行:
Enable=true
Port=177
在[security]下面添加
AllowRemoteRoot=true
修改custom.conf后,必须重启gdm才可以生效。具体做法就是kill进程中的gdm,然后重启gdm:
/usr/sbin/gdm-restart
4,开启防火墙UDP 177端口
/etc/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 177 -j ACCEPT
service iptables restart
5,在X Server运行的及其上开启监听端口,:0 6000, :1 6001
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6001 -j ACCEPT

linux下远程连接桌面

runlevel 5 启动图形界面, :0 在 tty1
runlevel 3 启动图形界面, :0 在 tty7,tty8

xhost + 192.168.1.2
iptales -A INPUT -i $EXTIF -s 192.168.1.2/24 -p tcp --dport 6001 -j ACCEPT
iptables-save
X -query 192.168.1.2 :1

xnet

在图形界面中远程x window

xming

windows远程桌面

vnc

不加密

xrdp

加密
windows 远程连接协议

rsync

加密远程同步

服务器十二:DHCP Server

服务器十三:NFS Server 文件服务器

服务器十四:NIS Server 账户管理服务器

服务器十五:NTP Server

服务器十六:SAMBA Server 文件服务器

服务器十七:Proxy Server 代理服务器

服务器十八:iSCSI Server

服务器十九:DNS Server

服务器二十:WWW Server

服务器二十一:vsFTPD Server

服务器二十二:Mail Server

其他

Linux 驱动 硬件

lspci 是显示硬件的。
lsmod 是显示加载内核模块的(内核模块就是驱动)。
用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)
查看CPU信息:cat /proc/cpuinfo
查看板卡信息:cat /proc/pci
查看PCI信息:lspci (相比cat /proc/pci更直观)
查看内存信息:cat /proc/meminfo
查看USB设备:cat /proc/bus/usb/devices
查看键盘和鼠标:cat /proc/bus/input/devices
查看系统硬盘信息和使用情况:fdisk & disk - l & df
查看各设备的中断请求(IRQ):cat /proc/interrupts
dmidecode查看硬件信息,包括bios、cpu、内存等信息
dmesg | more 查看硬件信息

pandoc # markdown转html、pdf

pandoc

pandoc --ascii -f markdown -t html -o demo.html demo.md
pandoc demo.md -o demo.doc

html2markdown # html转markdown

shadowsocks

sudo /usr/bin/python2.7 /usr/local/bin/ssserver -c
/etc/shadowssocks.json -d start
yum install m2crypto #加速加解密

Polipo # socks5 转 http proxy

安装

git clone https://github.com/jech/polipo.git
make
sudo make install

配置

proxyAddress = "0.0.0.0"  
proxyPort = 10080  
socksParentProxy = "127.0.0.1:10085"  
socksProxyType = socks5  
daemonise = true  

运行

polipo
firewall-cmd --zone=public --add-port=10080/tcp --permanent
firewall-cmd --reload

screen

screen #进入screen
screen -ls #列出screen
screen -r 17793 #恢复screen
exit

常用

sync #同步内存中的文件
watch -n 1 command#每1秒刷新命令
Ctrl + r #搜索历史命令
id username#获取用户信息
jobs #正在后台运行的命令
Ctrl + z #挂起
bg #继续后台运行
fg #前台运行
hwclock/clock #硬件时钟
lspci #列出pic设备 -v详细显示
lsusb #列出usb设备 -v详细显示
lsmod #查看加载的模块/驱动
zip/gzip xxx.zip xxx #打包为zip
unzip xxx.zip #解压到当前文件夹

flash

自动安装 flash rpm

sudo yum install epel-release
sudo yum install flash-plugin

手动安装firefox flash module

tar -xvfz .tar.gz
mv
.so /usr/lib64/mozilla/plugins/.

网速监控

iptraf, iftop, slurm

磁盘监控

htop, iotop

系统资源监控 网速 磁盘IO CPU 系统

dstat

文字图片

toilet, figlet

网络

掩码为1的为网络部分,掩码为0的为主机部分
跨网段配置网关或路由
ifconfig -a
ifup eth0
ifdown eth0
setup #Centos6
nmtui #Centos7
systemctl start NetworkManager
ping #测试连通性
host www.baidu.com #测试DNS
dig www.baidu.com #详细测试DNS
ip route #显示路由表
traceroute www.baidu.com #追踪目标地址网络路径
mtr www.baidu.com #网络质量测试
hostname #临时修改网络主机名

Linux启动流程

单用户模式下,不需要密码登录root,可以修改密码
BIOS:检查硬件并查找可启动设备
MBR:512字节,最后两个字节为0x550xaa,前446字节为引导代码
引导程序GRUB # 配置文件/boot/grub/grub.conf
加载内核
执行init # /etc/initt
ab
runlevel # 3:多用户模式 5:带图形化的多用户 0:关机 1:单用户 2:不带网络的多用户 4:未使用 6:重新启动

日志/rSyslog服务

syslog # CentOS 5
rsyslog # CentOS 6
/var/log/secure # 安全相关
/var/log/boot # 启动
/var/log/dmesg # 内核
/var/log/message # 正常日志

/etc/rsyslog.conf配置

Facility # 消息来源设备 kern # 内核消息 user # 用户级
Priority/Severity Level # 优先级
facility.prority location # 格式
-location # 无需等待同步
. @192.168.1.1 # udp发送到日志服务器
. @@192.168.1.1 # tcp发送到日志服务器

DNS

/etc/hosts #主机列表
/etc/nsswitch.conf #DNS查询顺序
/etc/resolv.conf #DNS服务器配置
host www.baidu.com #查询
dig www.baidu.com #详细查询
dig +trace www.baidu.com #详细流程
dig -t mx qq.com #查询邮件服务器
dig -x 8.8.8.8 #逆向解析
dig -t soa #start of authrity

BIND服务器

yum install -y bind bind-chroot bind-utils
端口53#服务 953#远程控制
/etc/named.conf #BIND服务主配置文件
/var/named #zone文件
若安装bind-chroot,封装到伪根目录下,配置文件变为
/var/named/chroot/etc/named.conf
/var/named/chroot/var/named/
BIND安装后没有预制配置文件,从配置文档中copy
cp -rv /usr/share/doc/bind/sample/ /var/named/chroot/. #copy模板
在/var/named/chroot/etc/named.conf添加
zone "yingxuan.com"
{
type master;
file "yingxuan.com.zone";
};
cp named.localhost yingxuan.com.zone #copy模板
named-checkconf /etc/named.conf
/etc/resolv.conf #修改DNS服务器
systemctl reload named

劫持DNS域名

zone "." {
type master;
file "/etc/bind/db.fakeroot";
};
Then, in that db.fakeroot file, you will need something like the following:
@ IN SOA ns.domain.com. hostmaster.domain.com. ( 1 3h 1h 1w 1d )
IN NS
* IN A

NFS|SMB|CIFS 文件共享服务

yum install samba
/etc/samba/smb.conf
yum install samba-client
smbd #文件及打印共享,使用139,445端口
nmbd #提供NetBIOS支持,使用137端口,被DNS替代
yum install samba-winbind
winbindd #提供对Windows Server用户及组信息的解析功能

添加sudo用户

方法一:将用户添加为sudoer
/etc/sudoer
user ALL=(ALL) ALL
方法二:将用户添加到wheel用户组
adduser yingxuanxuan
passwd yingxuanxuan #用户必须有密码才能进行sudo操作
gpasswd -a yingxuanxuan wheel #usermod -G wheel yingxuanxuan

LVM逻辑卷管理

说明:
LVM(Logical volume Manager)通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层习哦他能够

功能:
扩展硬盘空间
合并多硬盘空间
动态调整大小,不会丢失现有数据

基本概念:
PE(physical Extend)逻辑卷空间管理最基本单位,默认4M
PV(physical volue)
VG(volume group)
LV(logical volume)
PE->PV->VG->LV

命令:
查看
pvs #列出所有pv
pvdisplay
vgs #列出所有vg
vgdisplay
lvs #列出所有lv
lvdisplay
删除
umount /mnt/sdnew
lvremove /dev/newvg/sdnew
vgremove newvg
pvremove /dev/sda /dev/sdc

创建LVM
1将物理磁盘设别初始化为物理卷PV
pvcreate /dev/sdb /dev/sdc
2创建卷组,并将PV加入到VG卷组中
vgcreate newvg /dev/sdb /dev/sdc
3基于卷组创建逻辑卷
lvcreate -n newlv -L 2g newdisk #-L large -n name
生成设备/dev/newvg/sdnew->/dev/dm-0
4为创建好的逻辑卷创建文件系统
mkfs.ext4 /dev/newvg/sdnew
5将格式化好的逻辑卷挂载使用
mkdir /mnt/sdnew; mount /dev/newvg/sdnew /mnt/sdnew

拉伸逻辑卷LV
1保证VG中有未使用空间
vgdisplay
2扩充逻辑卷
lvextend -L + 100m /dev/vgnew/lv1
3查看扩充后逻辑卷大小
lvdisplay
4更新文件系统
resize2fs /dev/vgnew/lv1
5查看更新后文件系统
df -h

拉伸卷组PV
1将要添加到VG中的硬盘格式化为PV
pvcreate /dev/sdd
2将新的PV添加到指定卷组VG中
vgextend vgnew /dev/sdd
3查看扩充后大小
vgs/vgdisplay

缩小逻辑卷LV(离线)
1卸载已经挂载的逻辑卷
umount /dev/vgnew/lv1
2缩小文件系统
resize2fs /dev/vgnew/lv1 2G ##2G为新大小
3缩小LV
lvreduce -L -2G /dev/vgnew/lv1 ##2G为减小的大小
4缩小VG
vgreduce vgnew /dev/sdd
5挂载
mount /dev/vgnew/lv1 /mnt/sdnew

Linux高级权限管理ACL

传统权限模型的缺点:
UGO无法满足复杂权限设置需要,只能设置一个文件组

ACL:
ACL(Access Control List)是一种高级权限机制,允许对文件或文件夹进行灵活复杂的权限设置
ACL需要在挂在文件的时候打开#mount -o acl /dev/sda5 /mnt
根分区默认打开ACL功能

命令:
查看一个文件/文件加的ACL设置
getfacl /
针对一个用户对文件进行ACL设置
setfacl -m u:root:rwx / #-m modify u:username:rwx path
正对一个组对文件进行ACL设置
setfacl -m g:root:rw / #-m modify g group
删除 一个acl设置
setfacl -x u:root / #-x delete

高级网卡命令

ifconfig
mii-tool eth0 #查看网卡底层状态
ethtool eth0 #查看网卡物理特征
ethtool -i eth0 #查看网卡驱动信息
ethtool -S eth0 #查看网卡统计状态
nmtui
setup
yum -y install NetworkManager-tui
nmtui-edit eno16777736 #修改网卡配置
nmtui-connect eno16777736
systemctl restart network
systemctl status network
nmcli con reload #重新读取配置
nmcli dev con enp0s3
dhclient wlan0 #DHCP

IP别名 # 一个物理网卡上配置多个IP地址

NetworkManager服务功能简单,需要禁用
systemctl disable NetworkManager.service
systemctl stop NetworkManager.service
service stop NetworkManager
chkconfig NetworkManager off
添加IP地址
ip addr add 192.168.1.77/24 dev eth0 label eth0:0
ip addr add 192.168.1.77/24 dev enp0s3 label enp0s3:0
/etc/sysconfig/network-scripts/ifcfg-enp0s3:0
DEVICE=enp0s3:0
IPADDR=192.168.1.77
PREFIX=24
ONPARENT=yes

多网卡绑定

模式0:平衡轮训 #提高带宽
模式1:主动备份 #热备功能,不能提高带宽
模式3:广播 #发送相同数据
绑定后的逻辑网卡命名为bondn,n为编号,如/dev/bond0 /dev/bond1
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.1.66
PREFIX=24
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=1 mlimon=50"

SELinux # Secure Enhanced Linux

2.6内核后继承,继承在内核中,默认开启

域和上下文:
所有安全机制都是对 进程 和 系统资源(文件,网络套接字,系统调用等)进行限制。
domain #域用来对进程进行限制
content #上下文用来对系统资源进行限制
ps -Z #查看domain信息
ls -Z #查看content信息

策略:
SELinux通过定义策略来控制域可以访问哪些上下文
SELinux有预置策略
CentOS/RHEL使用预知的目标(target)策略
目标(Target)策略定义只有目标进程收到SELinux限制
目标策略只影响网络应用程序

模式:
强制(enforcing) #所有违反策略的行动都被禁止,并作为内核信息记录
允许(permissive) #违反策略的行动都不会被精致,但是会产生报警信息
禁用(disable) #禁用SELinux
/etc/sysconfig/selinux->/etc/selinux/config

命令:
getenforece #查看SELinux工作状态
setenforce 0 #临时关闭SELinux
restorecon -R -v /var/www #恢复文件上下文 con context
chcon --reference=/etc/named.conf.orig /etc/named.conf #改变文件上下文

信息格式:
用户(user):角色(role):类型(type):MLS、MCS
system_u:object_r:httpd_exec-t:s0

IPTables基础 # 网络访问控制

iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

控制内核netfilter模块

数据包控制:
允许
丢弃
修改

数据包分类:
源IP地址
目标IP地址
使用接口
使用协议(TCP,UDP,ICMP...)
端口号
连接状态(new,ESTABLISHED,RELATED,INVALID)

Filtering Point Table(功能划分)
chain #过滤点 filter nat mangle
INPUT x x
FORWARD x x
OUTPUT x x x
PREROUTING x x
POSTROUTING x x

filter#过滤
nat#对源目的进行修改
mangle#高级修改

规则:
一个规则使用一行配置
规则按顺序排列,规则逐条匹配
只按照第一个匹配的规则执行相关动作:丢弃,放行,修改

iptables [table] [chain] [condition] [action]
iptables -t filter -A INPUT -s 192.168.1.1 -j DROP

[table]:filter nat mangle
[chain]:INPUT OUTPUT FORWARD PREROUTING POSTROUTING
[action]:ACCEPT DROP REJECT

命令:
service iptables status
systemctl status iptables
iptables
-L #list
-I #插入
-s #源ip
-d #目标ip
-p #packet
--dport
-j #action
-D # delete
-i #指定接收接口
-o #指定输出接口
iptalbe -D INPUT 3 #删除INPUT表第三条
iptable -F #删除全部
-s '!' 192.168.1.0/24 #取反

通过http流量

iptables -t filter -A INPUT -p tcp -dport http -j ACCEPT

使用NAT进行跳转

iptables-t nat -A PREOUTING -p tcp -dport 80 -j DNAT --to-dest 192.168.1.10

使用NAT对出向数据进行跳转

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-dest 192.168.1.100:8080

通过NAT对数据进行伪装(内网地址伪装为一个外部公网IP地址)

iptalbse -t nat -A POSTROUTING -o eth0 -j MASQUERADE

通过NAT隐藏源IP地址

iptables -t nat -A POSTROUTING -j SNAT --to-sourse 1.2.3.4

service iptables save #保存配置
/etc/sysconfig/iptables #配置文件地址
iptables-save > iptables-script
iptables-restore iptables-script

配置策略:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT 1 -p tcp --sport 53 -j ACCEPT
iptables -I INPUT 1 -p udp --sport 53 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP

firewall-cmd # CentOS7防火墙

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-service=mysql --permanent
firewall-cmd --zone=public--remove-service=ssh --permanent
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --get-service

hdparm

hdparm -Y /dev/hd:使硬盘进入睡眠模式;
hdparm -y /dev/hd
:使硬盘进入省电模式;
hdparm -S[num] /dev/hd*:设置超时值使硬盘进入睡眠模式;

VNC Server

安装:
yum install tigervnc-server
配置:
/etc/sysconfg/vncservers
VNCSERCES="1:root 2:yingxuanxuan"
创建密码:
vncpasswd
启动服务:
service vncserver start
开放防火墙:
iptablse -F

TFTP

安装:
yum install tftp-server.x86_64
配置:
/etc/xinetd.conf
/etc/xinetd.d/service
服务:
chkconfig tftp on
service xinetd start
chkconfig xinetd on
帮助:
man xinetd.conf
man in.tftpd

PXE

Pre-boot Execution Environment

系统监控

net-snmp
net-snmp-devel
net-snmp-libs
net-snmp-utils
服务启动:
service snmpd start
配置:
snmpd.conf
1、设置security name和community
com2sec [notConfigUser] default [public]
2、将设置的security name绑定到一个组中
group [notConfigGroup] [v2c] [notConfigUser]
3、指定组的权限到一个权限示图
access notConfigGroup '' any noauth exact [all] none none
4、指定权限示图权限
view all included [.1] 80

获取命令:
snmpget
snmpwalk -v1 -c public 192.168.1.8 .1
snmpwalk -v 2c -c public 192.168.1.8 .1

Cacti系统监控

1、搭建php环境
yum install -y httpd php php-mysql net-snmp net-snmp-devel net-snmp-libs net-snmp-utils mysql mysql-server mysql-devel
2、启动httpd
service httpd configtest
service httpd graceful
3、启动mysql
4、设置snmp权限
5、设置php支持snmp
wget .../php-snmp-5.3.3-40.el6_6.x86_64.rpm

webmin网页管理界面

linux web 管理界面

Linux安全加固

1、删除不用的账号:lp sync shutdown halt news uucp operator games gopher
2、删除不用的组:lp sync shutdown halt news uucp operator games gopher
3、设置最小密码长度:sed -i '/PASS_MIN_LEN/s/5/8/g' /etc/login.defs
4、设置密码有效期:sed -i '/PASS_MAX_DAYS/s/99999/90/g' /etc/login.defs
5、检查是否存在空口令:awk -F: '($2==""){print $1}' /etc/shadow
6、检查除root外是否有其他用户id为0

mesg=`awk -F: '($3 == 0) { print $1 }' /etc/passwd|grep -v root`  
if [ -z $mesg ]  
then   
echo "There don't have other user uid=0"  
#5、---------------------------------------------------------------------
echo "#确保root用户的系统路径中不包含父目录,在非必要的情况下,不应包含组权限为777的目录"
echo "check the Path set for root,make sure the path for root dont have father directory and 777 rights"
echo "#-------------------------------------"
echo $PATH | egrep '(^|:)(\.|:|$)'
find `echo $PATH | tr ':' ' '` -type d \( -perm -002 -o -perm -020 \) -ls
#6、---------------------------------------------------------------------
echo "#检查操作系统Linux远程连接"
echo "Check if system have remote connection seting"
echo "#-------------------------------------"
find  / -name  .netrc
find  / -name  .rhosts 
echo "检查操作系统Linux用户umask设置"
echo "Check the system users umask setting"
echo "#-------------------------------------"
for i in /etc/profile /etc/csh.login /etc/csh.cshrc /etc/bashrc
do
grep -H umask $i|grep -v "#"
done
###################设置umask为027
#7、---------------------------------------------------------------------
#echo "#检查重要目录和文件的权限"
##echo "Check the important files and directory rights"
echo "#-------------------------------------"
for i in /etc /etc/rc.d/init.d /tmp /etc/inetd.conf /etc/passwd /etc/shadow /etc/group /etc/security /etc/services /etc/rc*.d
do
ls  -ld $i
done
echo -n "Please check if the output is ok ? yes or no :"
read i
case $i in 
y|yes)
break
;;
n|no)
echo "Please recheck the output!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
continue
;;
*)
echo "please input yes or no"
;;
esac
#8、---------------------------------------------------------------------
#echo "#配置rc.d下脚本的权限"
echo "Configure the scripts right(750) in rc.d directory"
echo "#-------------------------------------"
chmod -R 750 /etc/rc.d/init.d/*
chmod 755 /bin/su 改了之后只能root su,没有了s位别的用户无法成功su
chmod 664 /var/log/wtmp
#chattr +a /var/log/messages
#9、---------------------------------------------------------------------
echo "#查找系统中存在的SUID和SGID程序"
echo "Find the files have suid or Sgid"
echo "#-------------------------------------"
for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART \( -perm -04000 -o -perm -02000 \) -type f -xdev -print |xargs ls  -ld
done
echo -n "Please check if the output is ok ? yes or no :"
read i
case $i in 
y|yes)
break
;;
n|no)
echo "Please recheck the output!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
continue
;;
*)
echo "please input yes or no"
;;
esac
#10、---------------------------------------------------------------------  
echo "#查找系统中任何人都有写权限的目录"
echo "Find the directory everyone have the write right"
echo "#-------------------------------------"
for PART in `awk '($3 == "ext2" || $3 == "ext3") \
{ print $2 }' /etc/fstab`; do
find $PART -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print |xargs ls  -ld
done
echo -n "Please check if the output is ok ? yes or no :"
read i
case $i in 
y|yes)
break
;;
n|no)
echo "Please recheck the output!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
continue
;;
*)
echo "please input yes or no"
;;
esac
#11、---------------------------------------------------------------------
#echo "#查找系统中任何人都有写权限的文件"
echo "Find the files everyone have write right"
echo "#-------------------------------------"
for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -print |xargs ls -ld
done
echo -n "Please check if the output is ok ? yes or no :"
read i
case $i in 
y|yes)
break
;;
n|no)
echo "Please recheck the output!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
continue
;;
*)
echo "please input yes or no"
;;
esac
#12、---------------------------------------------------------------------  
echo "#查找系统中没有属主的文件"
echo "Find no owner or no group files in system"
echo "#-------------------------------------"
for PART in `grep -v ^# /etc/fstab |grep -v swap| awk '($6 != "0") {print $2 }'`; do
find $PART -nouser -o -nogroup |grep  -v "vmware"|grep -v "dev"|xargs ls  -ld
done
echo -n "Please check if the output is ok ? yes or no :"
read i
case $i in 
y|yes)
break
;;
n|no)
echo "Please recheck the output!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
continue
;;
*)
echo "please input yes or no"
;;
esac
#13、---------------------------------------------------------------------  
###echo "#查找系统中的隐藏文件"
##echo " Find the hiding file in system"
##echo "#-------------------------------------"
###linux执行报错\排除/dev”目录下的那些文件
####find  / -name \(".. *"  -o "…*"  -o ".xx" -o ".mail" \) -print -xdev
## #find  / -name "…*" -print -xdev | cat -v
##find  /  \( -name ".*"  -o -name  "…*"  -o -name ".xx" -o -name ".mail" \) -xdev
##echo -n "If you have check all the output files if correct yes or no ? :"
##read i
##  case $i in 
##  y|yes)
##  break
##  ;;
##  n|no)
##  echo "Please recheck the output!"
##  echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
##  continue
##  ;;
##  *)
##  echo "please input yes or no"
##  ;;
##  esac
##
#14、---------------------------------------------------------------------    
echo "#判断日志与审计是否合规"
echo "Judge if the syslog audition if follow the rules"
echo "#-------------------------------------"
autmesg=`cat /etc/syslog.conf |egrep ^authpriv`
if [ ! -n "$autmesg" ]
then
echo "there don't have authpriv set in /etc/syslog.conf"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo -n "If you have know this y or n ?"
read i
case $i in 
y|yes)
break
;;
n|no)
echo "there don't have authpriv set in /etc/syslog.conf"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
continue
;;
*)
echo "please input yes or no"
;;
esac
else
#   echo "日志与审计合规"
echo "syslog audition follow the rules"
fi
#15、---------------------------------------------------------------------    
echo "#关闭linux core dump"
echo "Turn off the system core dump"
echo "#-------------------------------------"
mesg1=`grep "* soft core 0" /etc/security/limits.conf`
mesg2=`grep "* hard core 0" /etc/security/limits.conf`
if [ ! -n "$mesg1" -o ! -n "$mesg2" ]
then
cp /etc/security/limits.conf /etc/security/limits.conf_$date
if [ ! -n "$mesg1" ]
then
echo "* soft core 0" >> /etc/security/limits.conf
fi
if [ ! -n "$mesg2" ]
then
echo "* hard core 0" >> /etc/security/limits.conf
fi
fi
#修改login文件使limits限制生效
cp /etc/pam.d/login /etc/pam.d/login_$date
echo "session required /lib/security/pam_limits.so" >> /etc/pam.d/login
#16、---------------------------------------------------------------------   
#登录超时设置
#检查/etc/pam.d/system-auth文件是否存在account required /lib/security/pam_tally.so deny=的相关设置
#建议设置为auth required pam_tally.so onerr=fail deny=6 unlock_time=300
#17、---------------------------------------------------------------------   
#su命令使用,对su命令使用进行限制设置
#检查/etc/pam.d/su文件设置
#文件中包含
#auth sufficient /lib/security/pam_rootok.so debug
#auth required /lib/security/pam_wheel.so group=isd
#20、---------------------------------------------------------------------  
echo "#登录超时自动退出"
echo "set session time out terminal "
echo "#-------------------------------------"
tmout=`grep -i TMOUT /etc/profile`
if [ ! -n "$tmout" ]
then 
echo
echo -n "do you want to set login timeout to 300s? [yes]:"
read i
case $i in 
y|yes)
cp /etc/profile /etc/profile_$date
echo "export TMOUT=300" >> /etc/profile
. /etc/profile
;;
n|no)
break
;;
*)
echo "please input yes or no"
;;
esac
else 
mesg=`echo $tmout |awk -F"=" '{print $2}'`
if [ "$mesg" -ne 300 ]
then
echo "The login session timeout is $mesg now will change to 300 seconds"
cp /etc/profile /etc/profile_$date
echo "export TMOUT=300" >> /etc/profile
. /etc/profile
fi
fi
sed  -i 's/HISTSIZE=1000/HISTSIZE=100/g' /etc/profile
#21、---------------------------------------------------------------------   
echo "#禁用telnet启用ssh"
echo "Stop telnet and start up sshd"
echo "#-------------------------------------"
mesg1=`lsof -i:23`
mesg2=`lsof -i:22`
if [ ! -n "$mesg2" ]
then
service start sshd 
chkconfig sshd on
mesg2=`lsof -i:22`
fi
if [ ! -n "$mesg1" -a ! -n "$mesg2" ]
then 
echo 
echo "Will Deactive telnet"
    chkconfig krb5-telnet off
chkconfig ekrb5-telnet off
fi
#22、---------------------------------------------------------------------   
#echo "#设置终端超时,使系统10分钟后自动退出不活动的Shell"
#echo "#-------------------------------------"
#mesg=`grep "export TMOUT=600" /etc/profile`
#if [ -z $mesg ]
#then
#echo "export TMOUT=600" >>/etc/profile
#. /etc/profile
#fi
#23、---------------------------------------------------------------------  
echo "#禁用不必要的服务"
echo "Stop unuseing services"
echo "#-------------------------------------"
list="avahi-daemon bluetooth cups firstboot hplip ip6tables iptables iscsi iscsid isdn kudzu pcscd rhnsd rhsmcertd rpcgssd rpcidmapd sendmail smartd  yum-updatesd netfs portmap autofs nfslock nfs"
for i in $list
do
chkconfig $i off
service $i stop
done
echo "change kernel parameter for network secure"
cp  /etc/sysctl.conf /etc/sysctl.conf.$date
#echo "net.ipv4.icmp_echo_ignore_all = 1">>/etc/sysctl.conf
sysctl -a |grep arp_filter|sed -e 's/\=\ 0/\=\ 1/g' >>/etc/sysctl.conf
sysctl -a |grep accept_redirects|sed -e 's/\=\ 1/\=\ 0/g' >>/etc/sysctl.conf
sysctl -a |grep send_redirects|sed -e 's/\=\ 1/\=\ 0/g' >>/etc/sysctl.conf
sysctl -a |grep log_martians |sed -e 's/\=\ 0/\=\ 1/g'>>/etc/sysctl.conf
sysctl -p 
#24、---------------------------------------------------------------------  
echo "设置热键"
#ctrl+alt+del
if [ -d  /etc/init ]
then
sed  -i 's/^[^#]/#&/g' /etc/control-alt-delete.conf
else
sed -i 's/^ca::/#&/g' /etc/inittab
fi
#25、---------------------------------------------------------------------  
echo "demo:禁止除了db2inst1的用户su到root"
usermod -G wheel db2inst1
sed -i '/pam_wheel.so use_uid/s/^#//g' /etc/pam.d/su
echo "SU_WHEEL_ONLY yes">>/etc/login.defs