金沙澳门官网网址一篇文章集合所有Linux基础命令

作者: 金沙澳门官网网址  发布:2019-10-29

1 文件{
ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt
touch file # 创建空白文件
rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制)
dos2unix # windows文本转linux文本
unix2dos # linux文本转windows文本
enca filename # 查看编码 安装 yum install -y enca
md5sum # 查看md5值
ln 源文件 目标文件 # 硬链接
ln -s 源文件 目标文件 # 符号连接
readlink -f /data # 查看连接真实目录
cat file | nl |less # 查看上下翻页且显示行号 q退出
head # 查看文件开头内容
head -c 10m # 截取文件中10M内容
split -C 10M # 将文件切割大小为10M -C按行
tail -f file # 查看结尾 监视日志文件
tail -F file # 监视日志并重试, 针对文件被mv的情况可以持续读取(实时查看文件,可用于查看服务日志文件,方便排错)
file # 检查文件类型
umask # 更改默认权限
uniq # 删除重复的行
uniq -c # 重复的行出现次数
uniq -u # 只显示不重复行
paste a b # 将两个文件合并用tab键分隔开
paste -d' ' a b # 将两个文件合并指定' '符号隔开
paste -s a # 将多行数据合并到一行用tab键隔开
chattr i /etc/passwd # 不得任意改变文件或目录 -i去掉锁 -R递归
more # 向下分面器
locate 字符串 # 搜索  (需要先‘updatedb’更新数据)
wc -l file # 查看行数
cp filename{,.bak} # 快速备份一个文件
cp a b # 拷贝不提示 既不使用别名 cp -i
rev # 将行中的字符逆序排列
comm -12 2 3 # 行和行比较匹配
iconv -f gbk -t utf8 原.txt > 新.txt # 转换编码
rename 原模式 目标模式 文件 # 重命名 可正则
watch -d -n 1 'df; ls -FlAt /path' # 实时某个目录下查看最新改动过的文件
cp -v /dev/dvd /rhel4.6.iso9660 # 制作镜像
diff suzu.c suzu2.c > sz.patch # 制作补丁
patch suzu.c < sz.patch # 安装补丁

作为Linux运维,需要了解Linux操作系统的基本使用和管理知识,下面脚本之家小编给大家介绍下Linux运维需要掌握的命令,想成为Linux运维的朋友可以来学习一下。

sort排序{

1 文件管理2 软件管理3 系统管理
4 服务管理5 网络管理6 磁盘管理

-t # 指定排序时所用的栏位分隔字符
-n # 依照数值的大小排序
-r # 以相反的顺序来排序
-f # 排序时,将小写字母视为大写字母
-d # 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-c # 检查文件是否已经按照顺序排序
-b # 忽略每行前面开始处的空格字符
-M # 前面3个字母依照月份的缩写进行排序
-k # 指定域
-m # 将几个排序好的文件进行合并
-T # 指定临时文件目录,默认在/tmp
<起始栏位>-<结束栏位> # 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
-o # 将排序后的结果存入指定的文

7 用户管理8 脚本相关9 服务配置


sort -n # 按数字排序
sort -nr # 按数字倒叙
sort -u # 过滤重复行
sort -m a.txt c.txt # 将两个文件内容整合到一起
sort -n -t' ' -k 2 -k 3 a.txt # 第二域相同,将从第三域进行升降处理
sort -n -t':' -k 3r a.txt # 以:为分割域的第三域进行倒叙排列
sort -k 1.3 a.txt # 从第三个字母起进行排序
sort -t" " -k 2n -u a.txt # 以第二域进行排序,如果遇到重复的,就删除

1 文件管理

创建空白文件
touch
不提示删除非空目录
rm -rf 目录名
(-r:递归删除-f 强制)
##################################
恢复rm 删除的文件(ext3)
查看磁盘分区格式
df -T
卸载挂载
umount /data/
ext3grep /dev/sdb1 --ls --inode 2
记录信息继续查找目录下文件inode 信息
ext3grep /dev/sdb1 --ls --inode 131081 # 此处是inode
记录下inode 信息开始恢复目录
ext3grep /dev/sdb1 --restore-inode 49153
##################################
windows 文本转linux 文本
dos2unix
linux 文本转windows 文本
unix2dos
转换编码
iconv -f gbk -t utf8 原.txt > 新.txt
查看md5 值
md5sum
硬链接
ln
符号连接
ln -s
查看上下翻页且显示行号
cat ? | nl |less
q 退出
结束状态
ctrl z
查看文件开头内容
head
查看文件结尾内容
tail -f # 监视日志文件
检查文件类型
file
重命名
rename
rename source_pattern target_pattern source_files
更改默认权限
umask
按数字排序
sort -n
按数字倒叙
sort -nr
过滤重复行
sort -u
删除重复的行
uniq
重复的行出现次数
uniq -c
只显示不重复行
uniq -u
将两个文件合并用tab 键分隔开
paste a b
将两个文件合并指定' '符号隔开
paste -d' ' a b
将多行数据合并到一行用tab 键隔开
paste -s a
设置隐藏属性
chattr [ -=] [ASacdistu] 文件或目录
向下分面器
more
搜索
locate 字符串
查看行数
wc -l
实时某个目录下查看最新改动过的文件
watch -d -n 1 'df; ls -FlAt /path'
快速备份一个文件
cp filename{,.bak}
##################################
配置编辑器
gconf-editor
vi 配置文件
vi /etc/vimrc
编辑文件
vim
打开行号
:set nu
取消行号
:set nonu
跳转到200
200G
取消高亮
:nohl
设置自动缩进
:set autoindent
查看文本格式
set ff
改为unix 格式
set binary
向前翻页
ctrl U
向后翻页
ctrl D
全部替换
g/字符1/s//字符2/g
%s/字符1/字符2/g
# 普通用户打开文档不能保存
# tee 是一个把stdin 保存到文件的小工具,而%,是vim 当中一个只读寄存器的名字,总保存着当
前编辑文件的文件路径
:w !sudo tee %
##################################
按文件名查找
find /etc -name http
查找某一类型文件
find . -type f
按照文件权限查找
find / -perm
按照文件属主查找
find / -user
按照文件所属的组来查找文件
find / -group
文件使用时间在N 天以内
find / -atime -n
文件使用时间在N 天以前
find / -atime n
文件内容改变时间在N 天以内
find / -mtime -n
文件内容改变时间在N 天以前
find / -mtime n
文件状态改变时间在N 天前
find / -ctime n
文件状态改变时间在N 天内
find / -ctime -n
# linux 文件无创建时间
# Access 使用时间
# Modify 内容修改时间
# Change 状态改变时间(权限、属主)
查找文件长度大于1M 字节的文件
find / -size 1000000c -print
按名字查找文件传递给-exec 后命令
find /etc -name "passwd*" -exec grep "xuesong" {} ;
查找文件名,不取路径
find . -name 't*' -exec basename {} ;

}

##################################


find查找{

2 软件管理

解包tar
tar xvf 1.tar -C 目录
打包tar
tar -cvf 1.tar *
查看tar
tar tvf 1.tar
给tar 追加文件
tar -rvf 1.tar 文件名
解包gz
tar zxvpf gz.tar.gz
打包gz
tar zcvpf gz.tar.gz
查看gz
tar ztvpf gz.tar.gz
解压bzip2
bzip2 -dv 1.tar.bz2
解压gzip 到tar
gzip -dv 1.tar.gz
压缩tar 到gz
gzip -v 1.tar
bzip2 压缩
bzip2 -v 1.tar
查看bzip2
bzcat
rpm 安装
rpm -ivh
卸载
rpm -e lynx
强制卸载
rpm -e lynx --nodeps
测试
rpm --test lynx
查看所有安装的rpm 包
rpm -qa
查找包是否安装
rpm -qa | grep http
解压zip
unzip zip.zip
压缩zip
zip zip.zip *
rar3.6 下载地址

压缩文件为rar 包
rar a rar.rar *.jpg
解压rar 包
unrar x rar.rar
7z 压缩
7z a 7z.7z *
7z 解压
7z e 7z.7z
查看字符行
zgrep 字符1.gz
打包/home, /etc ,但排除/home/dmtsai
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
在/home 当中,比2005/06/01 新的文件才备份
tar -N "2005/06/01" -zcvf home.tar.gz /home
下载
wgetrc
文本上网
lynx
制作镜像
cp -v /dev/dvd /software/rhel4.6.iso9660
清除编译结果
make clean
源码安装
./configure --help |less
./configure --prefix=/usr/local/
make
make install
perl 程序编译
perl Makefile.PL
make
make test
make install
perl 程序编译
python file.py
编译c 程序

# linux文件无创建时间
# Access 使用时间
# Modify 内容修改时间
# Change 状态改变时间(权限、属主)
# 时间默认以24小时为单位,当前时间到向前24小时为0天,向前48-72小时为2天
# -and 且 匹配两个条件 参数可以确定时间范围 -mtime 2 -and -mtime -4
# -or 或 匹配任意一个条件

gcc -g hello.c -o hello


find /etc -name "*http*" # 按文件名查找
find . -type f # 查找某一类型文件
find / -perm # 按照文件权限查找
find / -user # 按照文件属主查找
find / -group # 按照文件所属的组来查找文件
find / -atime -n # 文件使用时间在N天以内
find / -atime n # 文件使用时间在N天以前
find / -mtime n # 文件内容改变时间在N天以前
find / -ctime n # 文件状态改变时间在N天前
find / -mmin 30 # 按分钟查找内容改变
find / -size 1000000c -print # 查找文件长度大于1M字节的文件
find /etc -name "*passwd*" -exec grep "xuesong" {} ; # 按名字查找文件传递给-exec后命令
find . -name 't*' -exec basename {} ; # 查找文件名,不取路径
find . -type f -name "err*" -exec rename err ERR {} ; # 批量改名(查找err 替换为 ERR {}文件
find 路径 -name *name1* -or -name *name2* # 查找任意一个关键字

3 系统管理

终端锁屏Ctrl S
解锁屏Ctrl Q
PS1 环境变量控制提示显示
PS1='[u@ H w A @#]$'
开机启动模式
vi /etc/inittab
查找命令的目录
whereis
查看当前要执行的命令所在的路径
which
让部命令后台运行
命令&
将前台放入后台(暂停)
ctrl z
查看后台运行程序
jobs
启动后台暂停进程
bg 2
调回后台进程
fg 2
后台运行不受shell 退出影响
nohup cmd &
清空整个屏幕
clear
重新初始化屏幕
reset
查询用过的命令默认1000 条
history
清楚记录命令
history -c
cat /root/.bash_history
查看登陆过的用户信息
last
last -n user
who /var/log/wtmp
列出登录系统失败的用户相关信息
lastb -a
/var/log/btmp
防火墙日志
tail -f /var/log/messages
ssh 日志
tail -f /var/log/secure
随机生成密码
mkpasswd
-l 位数-C 大小-c 小写-d 数字-s 特殊字符
mkpasswd -l 8 -C 2 -c 2 -d 4 -s 0
当前在线用户
who
w
查看当前用户名
whoami
查看登陆用户名
logname
显示月历
cal
查看服务器启动时间
uptime
设日期
date -s 20091112
设时间
date -s 18:30:50
同步时间
/usr/sbin/ntpdate stdtime.gov.hk
7 天前日期
`date -d "7 days ago" %Y%m%d`
日期格式转换
`date %Y-%m-%d -d '20110902'`
日期和时间
date %Y-%m-%d_%X
查看时间
hwclock
账户影子文件
/etc/shadow
列出所有语系
locale -a
修改语言
LANG=en
修改编码
vi /etc/sysconfig/i18n
utf-8 <---> GBK
强制字符集
export LC_ALL=C
查询静态主机名
vi /etc/hosts
最大连接
/etc/security/limits.conf
grub 开机启动项添加
/etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader 1
别名
alias
监测命令
watch
查看Linux 版本信息
uname -a
cat /proc/version
cat /etc/issue
lsb_release -a
查看cpu 信息
more /proc/cpuinfo
查看cpu 型号和逻辑核心数
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cpu 运行的位数
getconf LONG_BIT
物理cpu 个数
cat /proc/cpuinfo | grep physical | uniq -c
结果大于0 支持64 位
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
查看cpu 是否支持虚拟化
cat /proc/cpuinfo|grep flags
pae 支持半虚拟化Intel VT 支持全虚拟化
查看内存信息
more /proc/meminfo
查看全面硬件信息
dmidecode
查看服务器型号
dmidecode | grep "Product Name"
查看软raid 信息
cat /proc/mdstat
查看硬raid 信息
cat /proc/scsi/scsi
查看硬件信息
lspci
查看是否支持raid
lspci|grep RAID
显示开机信息
dmesg
进程树
pstree
每隔一秒报告虚拟内存统计信息9 次
vmstat 1 9
把180 号进程的优先级加1
renice 1 180
终止某个PID 进程
kill -9 PID
指定三天后下午5:00 执行/bin/ls
at 5pm 3 days /bin/ls
编辑周期任务
crontab -e
分钟小时天月星期命令或脚本
01 1-3/2 * * * 命令或脚本
直接将命令写入周期任务
echo "40 7 * * 2 /root/sh">>/var/spool/cron/root
查看自动周期性任务
crontab -l
删除自动周期性任务
crontab -r
禁止或允许用户使用周期任务
cron.deny 和cron.allow
启动自动周期性服务
service crond 启动|停止|重启|状态>
是否打开了某个端口
netstat -anlp | grep 端口号
查看监听
netstat -anlp
sudo 命令权限添加
visudo
用户别名(可用all)=NOPASSWD:命令1,命令2
wangming linuxfan=NOPASSWD:/sbin/apache start,/sbin/apache restart
UserName ALL=(ALL) ALL
制作补丁
diff suzu.c suzu2.c > sz.patch
安装补丁
patch suzu.c < sz.patch
显示打开指定文件的所有进程
lsof 文件
查看端口的进程
lsof -i :32768
显示消耗内存最多的10 个运行中的进程,以内存使用量排序.cpu 3
ps aux |grep -v USER | sort -nk 4 | tail
查看内核模块
lsmod
yum 扩展源

wget
rpm -Uvh epel-release-5-4.noarch.rpm
升级所有包版本,依赖关系,系统版本内核都升级
yum -y update
升级指定的软件包
yum -y update 软件包名
不改变软件设置更新软件,系统版本升级,内核不改变
yum -y upgrade
yum 搜索相关包
yum search mail
会改变配置文件,改变旧的依赖关系,改变系统版本
dist-upgrade
编辑启动项
/boot/grub/grub.conf
开机启动脚本顺序
/etc/profile
/etc/profile.d/*.sb
~/bash_profile
~/.bashrc

}

/etc/bashrc

top
前五行是系统整体的统计信息。
第一行是任务队列信息,同uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为1 分钟、5 分钟、15 分钟前到现在的平均值。
第二、三行为进程和CPU 的信息。当有多个CPU 时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU 百分比
1.0% sy 内核空间占用CPU 百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU 百分比
98.7% id 空闲CPU 百分比
0.0% wa 等待输入输出的CPU 时间百分比
0.0% hi
0.0% si
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号列名含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为?
h PR 优先级
i NI nice 值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU 环境下有意义
k %CPU 上次更新到现在的CPU 时间占用百分比
l TIME 进程使用的CPU 时间总计,单位秒
m TIME 进程使用的CPU 时间总计,单位1/100 秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段 栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考sched.h
##################################
iptables
内建三个表:nat mangle 和filter
filter 预设规则表,有INPUT、FORWARD 和OUTPUT 三个规则链
INPUT 进入
FORWARD 转发
OUTPUT 出去
ACCEPT 将封包放行
REJECT 拦阻该封包
DROP 丢弃封包不予处理
-A 在所选择的链(INPUT 等)末添加一条或更多规则
-D 删除一条
-E 修改
-p tcp、udp、icmp 0 相当于所有all !取反
-P 设置缺省策略(与所有链都不匹配强制使用此策略)
-s IP/掩码(IP/24) 主机名、网络名和清楚的IP 地址!取反
-j 目标跳转,立即决定包的命运的专用内建目标
-i 进入的(网络)接口[名称] eth0
-o 输出接口[名称]
-m 模块
--sport 源端口
--dport 目标端口
#配置文件
vi /etc/sysconfig/iptables
#将防火墙中的规则条目清除掉
iptables -F
#注意:iptables -P INPUT ACCEPT
#导入防火墙规则
iptables-restore <规则文件
#保存防火墙设置
/etc/init.d/iptables save
#重启防火墙服务
/etc/init.d/iptables restart
#查看规则
iptables -L -n
iptables -L -n --line-numbers
#从某个规则链中删除一条规则
iptables -D INPUT --dport 80 -j DROP
iptables -D INPUT 8
#取代现行规则
iptables -R INPUT 8 -s 192.168.0.1 -j DROP
#插入一条规则
iptables -I INPUT 8 --dport 80 -j ACCEPT
#查看转发
iptables -t nat -nL
#在内核里打开ip 转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
##################################
#允许本地回环
iptables -A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
#允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#开放对外访问
iptables -P OUTPUT ACCEPT
#指定某端口针对IP 开放
iptables -A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
#允许的IP 或IP 段访问
iptables -A INPUT -s 192.168.10.37 -p tcp -j ACCEPT
#开放对外开放端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#关闭入口
iptables -P INPUT DROP
#关闭转发
iptables -P FORWARD DROP
##################################
iptables 规则文件
# Generated by iptables-save v1.2.11 on Fri Feb 9 12:10:37 2007
*filter
:INPUT DROP [637:58967]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5091:1301533]
#允许的IP 或IP 段访问
-A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
-A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT
#开放对外开放端口
-A INPUT -p tcp --dport 80 -j ACCEPT
#指定某端口针对IP 开放
-A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
#拒绝所有协议(INPUT 允许的情况)
#-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#拒绝ping
-A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Feb 9 12:10:37 2007
##################################
常用实例
#允许在IP 访问指定端口
iptables -A INPUT -s 192.168.62.1 -p tcp --dport 22 -j ACCEPT
#禁止使用某端口
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 31 -j REJECT
#禁止QQ 端口
iptables -D FORWARD -p udp --dport 8000 -j REJECT
#禁止icmp 端口
#除192.168.62.1 外,禁止其它人ping 我的主机
iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP
#其它情况不允许
iptables -A INPUT -i eth0 -j DROP
#禁止指定IP 访问
iptables -A INPUT -p tcp -s IP -j DROP
#禁止指定IP 访问端口
iptables -A INPUT -p tcp -s IP --dport port -j DROP
#阻止所有没有经过你系统授权的TCP 连接
iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP
#添加网段转发
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
#IP 包流量限制
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -j DROP
#端口映射
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT --to-ports
3128
#列出某规则链中的所有规则
iptables -L INPUT
#删除某个规则链,不加规则链,清除所有非内建的
iptables -X allowed
#将封包计数器归零
iptables -Z INPUT
#定义新的规则链
iptables -N allowed
#定义过滤政策
iptables -P INPUT DROP
#修改某自订规则链的名称
iptables -E allowed disallowed
#比对通讯协议类型是否相符
#-p ! tcp 排除tcp 以外的udp、icmp。-p all 所有类型
iptables -A INPUT -p tcp
#比对封包的来源IP
#192.168.0.0/24 ! 反向对比
iptables -A INPUT -s 192.168.1.1
#比对封包的目的地IP
iptables -A INPUT -d 192.168.1.1
#比对封包是从哪片网卡进入
#eth 表示所有的网卡
iptables -A INPUT -i eth0
#比对封包要从哪片网卡送出
iptables -A FORWARD -o eth0
#比对某段时间内封包的平均流量
#例子是用来比对:每小时平均流量是否超过一次3 个封包。除了每小时平均次外,也可以每
秒钟、每分钟或每天平均一次,默认值为每小时平均一次,参数如后: /second、/minute、/day。
除了进行封数量的比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因
骇客使用洪水攻击法,导致服务被阻断。
iptables -A INPUT -m limit --limit 3/hour
#比对瞬间大量封包的数量
#例子是用来比对一次同时涌入的封包是否超过5 个(这是默认值),超过此上限的封包将被直
接丢弃。使用效果同上。
iptables -A INPUT -m limit --limit-burst 5
#比对来自本机的封包
#是否为某特定使用者所产生的,这样可以避免服务器使用root 或其它身分将敏感数据传送出,
可以降低系统被骇的损失。可惜这个功能无法比对出来自其它主机的封包。
iptables -A OUTPUT -m owner --uid-owner 500
#比对来自本机的封包
iptables -A OUTPUT -m owner --gid-owner 0
iptables -A OUTPUT -m owner --pid-owner 78
iptables -A OUTPUT -m owner --sid-owner 100
#用来比对联机状态
iptables -A INPUT -m state --state RELATED,ESTABLISHED
联机状态共有四种:INVALID、ESTABLISHED、NEW 和RELATED。
#-j 参数指定进行的处理动作,处理动作包括: ACCEPT、REJECT、DROP、REDIRECT、
MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,说明:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
#可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset
REDIRECT 将封包重新导向到另一个端口(PNAT)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE 改写封包来源IP 为防火墙NIC IP
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
LOG 将封包相关讯息纪录在/var/log 中
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
SNAT 改写封包来源IP 为某特定IP 或IP 范围
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source
194.236.50.155-194.236.50.160:1024-32000
DNAT 改写封包目的地IP 为某特定IP 或IP 范围
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination
192.168.1.1-192.168.1.10:80-100
MIRROR 镜射封包
QUEUE 中断过滤程序
RETURN 结束在目前规则炼中的过滤程序
MARK 将封包标上某个代号
##################################
iptables 配置实例
允许某段IP 访问任何端口
iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT
设定预设规则(拒绝所有的数据包,再允许需要的,如只做WEB 服务器.还是推荐三个链都是
DROP)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
(注:意直接设置这三条完已经掉线了)
开启22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果OUTPUT 设置成DROP 的,要写上下面一条
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
(注:,不写导致无法SSH.其他的端口一样,OUTPUT 设置成DROP 的话,也要添加一条链)
如果开启了web 服务器,OUTPUT 设置成DROP 的话,同样也要添加一条链
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
做WEB 服务器,开启80 端口,其他同理
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
做邮件服务器,开启25,110 端口
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
允许icmp 包通过,允许ping
iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT 设置成DROP 的话)
iptables -A INPUT -p icmp -j ACCEPT (INPUT 设置成DROP 的话)
允许loopback!(不然会导致DNS 无法正常关闭等问题)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)

vim编辑器{

IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)


gconf-editor # 配置编辑器
/etc/vimrc # 配置文件路径
vim 24 file # 打开文件定位到指定行
vim file1 file2 # 打开多个文件
vim -O2 file1 file2 # 垂直分屏
vim -on file1 file2 # 水平分屏
sp filename # 上下分割打开新文件
vsp filename # 左右分割打开新文件
Ctrl W [操作] # 多个文件间操作 大写W # 操作: 关闭当前窗口c 屏幕高度一样= 增加高度 移动光标所在屏 右l 左h 上k 下j 中h 下一个w
:n # 编辑下一个文件
:2n # 编辑下二个文件
:N # 编辑前一个文件
:rew # 回到首文件
:set nu # 打开行号
:set nonu # 取消行号
200G # 跳转到200
:nohl # 取消高亮
:set autoindent # 设置自动缩进
:set ff # 查看文本格式
:set binary # 改为unix格式
ctrl U # 向前翻页
ctrl D # 向后翻页
%s/字符1/字符2/g # 全部替换
X # 文档加密

4 服务管理

启动sendmail 服务
./sendmail start
/etc/init.d/sendmail start
关闭sendmail 服务
./sendmail stop
查看sendmail 服务当前状态
./sendmail status
发送邮件
echo 内容| /bin/mail -s "标题" 收件箱
打开服务列表需要打*
ntsysv
让某个服务不自动启动35 指的是运行级别
httpd:chkconfig --level 35 httpd off
让某个服务自动启动
httpd:chkconfig --level 35 httpd on
查看所有服务的启动状态
chkconfig --list
查看某个服务的启动状态
chkconfig --list |grep httpd
查看服务的状态
chkconfig –-list [服务名称]
设置非独立服务启状态
chkconfig 服务名on|off|set
开启mysql 后台运行
/usr/local/mysql/bin/mysqld_safe --user=mysql &
开机启动执行
vi /etc/rc.d/rc.local
开机启动和关机关闭服务连接
/etc/rc.d/rc3.d/S55sshd
# S 开机start K 关机stop 55 级别后跟服务名

}

ln -s -f /usr/local/httpd/bin/apachectl /etc/rc.d/rc3.d/S15httpd


归档解压缩{

5 网络管理

##################################
本机网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
HWADDR=00:0C:29:3F:E1:EA
IPADDR=192.168.1.55
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet
GATEWAY=192.168.1.1
##################################
增加逻辑IP 地址
ifconfig eth0:0 192.168.1.221 netmask 255.255.255.0
查看路由表
route
添加路由表
route add default gw 192.168.1.1 dev eth0
设置DNS
vi /etc/resolv.conf
禁用网卡
ifconfig eth0 down
启用网卡
ifconfig eth0 up
ifup eth0:0 up
测试跳数
traceroute www.baidu.com (linux)
tracert www.baidu.com (windows)
根据IP 和主机最大数计算掩码
ipcalc -m "$ip" -p "$num"
用wget 的递归方式下载整个网站
wget --random-wait -r -p -e robots=off -U Mozilla www.example.com
通过DNS 来读取Wikipedia 的hacker 词条
dig short txt hacker.wp.dg.cx
host -t txt hacker.wp.dg.cx
rz ssh 小文件上传
sz ssh 小文件下载
从linux ssh 登录另一台linux
ssh -p 22 wang@192.168.1.209
利用ssh 操作远程主机
ssh -p 22 root@192.168.1.209 环境变量中脚本
把本地文件拷贝到远程主机
scp -P 22 文件root@ip:/目录
ssh 连接不提示yes
ssh -o StrictHostKeyChecking=no 192.168.70.130
把远程指定文件拷贝到本地
scp root@192.168.1.209:远程目录本地目录
通过SSH 挂载远程主机上的文件夹
sshfs name@server:/path/to/folder /path/to/mount/point
卸载的话使用fusermount 命令
fusermount -u /path/to/mount/point
用DIFF 对比远程文件跟本地文件
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
用SSH 创建端口转发通道
ssh -N -L2001:remotehost:80 user@somemachine
嵌套使用SSH
ssh -t host_A ssh host_B
密钥信任
ssh-keygen –t rsa
vi 用户/.ssh/authorized_keys
远程关掉一台WINDOWS 机器
net rpc shutdown -I IP_ADDRESS -U username%password
禁ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
##################################
先ping 在扫描主机开放端口
nmap -PT 192.168.1.1-111
扫描出系统内核版本
nmap -O 192.168.1.1
扫描端口的软件版本
nmap -sV 192.168.1.1-111
半开扫描(通常不会记录日志)
nmap -sS 192.168.1.1-111
不支持windows 的扫描(判断是否是windows)
nmap -sF 192.168.1.1-111
nmap -sX 192.168.1.1-111
nmap -sN 192.168.1.1-111
不ping 直接扫描
nmap -P0 192.168.1.1-111
详细信息
nmap -d 192.168.1.1-111
无法找出真正扫描主机(隐藏IP)
nmap -D 192.168.1.1-111
端口范围
nmap -p 20-30,139,60000-
表示:扫描20 到30 号端口,139 号端口以及所有大于60000 的端口
组合扫描(不ping、软件版本、内核版本、详细信息)
nmap -P0 -sV -O -v 192.168.30.251

tar zxvpf gz.tar.gz -C 放到指定目录 包中的目录 # 解包tar.gz 不指定目录则全解压
tar zcvpf /$path/gz.tar.gz * # 打包gz 注意*最好用相对路径
tar zcf /$path/gz.tar.gz * # 打包正确不提示
tar ztvpf gz.tar.gz # 查看gz
tar xvf 1.tar -C 目录 # 解包tar
tar -cvf 1.tar * # 打包tar
tar tvf 1.tar # 查看tar
tar -rvf 1.tar 文件名 # 给tar追加文件
tar --exclude=/home/dmtsai --exclude=*.tar -zcvf myfile.tar.gz /home /etc # 打包/home, /etc ,但排除 /home/dmtsai
tar -N "2015/06/01" -zcvf home.tar.gz /home # 在 /home 当中,比 2015/06/01 新的文件才备份
tar -zcvfh home.tar.gz /home # 打包目录中包括连接目录
tar zcf - ./ | ssh root@IP "tar zxf - -C /xxxx" # 一边压缩一边解压
zgrep 字符 1.gz # 查看压缩包中文件字符行
bzip2 -dv 1.tar.bz2 # 解压bzip2
bzip2 -v 1.tar # bzip2压缩
bzcat # 查看bzip2
gzip A # 直接压缩文件 # 压缩后源文件消失
gunzip A.gz # 直接解压文件 # 解压后源文件消失
gzip -dv 1.tar.gz # 解压gzip到tar
gzip -v 1.tar # 压缩tar到gz
unzip zip.zip # 解压zip
zip zip.zip * # 压缩zip
# rar3.6下载:
rar a rar.rar *.jpg # 压缩文件为rar包
unrar x rar.rar # 解压rar包
7z a 7z.7z * # 7z压缩
7z e 7z.7z # 7z解压

##################################


}

6 磁盘管理

查看硬盘容量
df -h
查看磁盘分区格式
df -T
修改只读文件系统为读写
mount -o remount,rw /
查看卷标
e2label /dev/sda5
创建卷标
e2label /dev/sda5 new-label
NTFS 添加卷标
ntfslabel -v /dev/sda8 new-label
ext2 分区转ext3 分区
tune2fs -j /dev/sda
格式化分区
mkfs -t ext3 /dev/hda3
指定索引块大小
mke2fs -b 2048 /dev/sda5
对文件系统修复
fsck -y /dev/sda6
查看超级块的信息
dumpe2fs -h /dev/sda5
查看当前系统支持文件系统
cat /proc/filesystems
检测硬盘状态
smartctl -H /dev/sda
检测硬盘信息
smartctl -i /dev/sda
检测所有信息
smartctl -a /dev/sda
检测目录下所有文件大小
du -h 目录
显示当前目录中子目录的大小
du -h --max-depth=1
挂载光驱
mount -t iso9660 /dev/dvd /mnt
挂载镜像文件
mount -o loop /software/rhel4.6.iso /mnt/
##################################
磁盘grub 开机引导项添加
/etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader 1
##################################
建立软RAID1
两块硬盘分区一样,分别新建分区文件类型为software RAID
创建两个就点击raid 合并为RAID1,这里的挂载点为正常linux 目录
查看raid 工作状态
cat /proc/mdstat
两个盘都加grub 引导
查看
cat /boot/grub/grub.conf
grub
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
修改grub 启动项配置文件
vi /boot/grub/grub.conf
复制title CentOS 到最后的四行
在下面粘贴修改为刚才新加的引导(hd1,0)。
查看分区
sfdisk -d /dev/hda
导出A 盘分区列表
sfdisk -d /dev/hda > fq.hda
将分区列表导入到新加的硬盘
sfdisk /dev/hdb < fq.hda
恢复新挂载的硬盘分区
mdadm /dev/md1 -a /dev/hdb5
# raid5 可利用lvm 扩容
##################################
新硬盘挂载
fdisk /dev/sdc
p # 打印分区
d # 删除分区
n # 创建分区,(一块硬盘最多4 个主分区,扩展占一个主分区位置。p 主分区e 扩展)
w # 保存退出
mkfs -t ext3 -L 卷标/dev/sdc1 # 格式化相应分区
mount /dev/sdc1 /mnt # 挂载
添加开机挂载分区
vi /etc/fstab
用卷标挂载
LABEL=/data /data ext3 defaults 1 2
用真实分区挂载
/dev/sdb1 /data4 ext3 defaults 1 2
第一个数字"1"该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需
要转储就设置该字段为0
第二个数字"2"该字段被fsck 命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统
"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该
字段为0

文件ACL权限控制{

##################################


getfacl 1.test # 查看文件ACL权限
setfacl -R -m u:xuesong:rw- 1.test # 对文件增加用户的读写权限 -R 递归

7 用户管理

建立用户
useradd xuesong
修改密码
passwd 用户
echo "xuesong" | passwd xuesong --stdin
查找用户显示信息
finger
添加组
groupadd
修改文件拥有者(R 递归)
chown -R
修改所有者用户中包含点"."
chown y.li:mysql
修改用户组
chgrp
修改用户名
usermod -l 新用户名老用户名
修改用户所属组
usermod -g user group
修改用户家目录
usermod -d 目录-m 用户
将用户添加到附加组
usermod -G user group
删除帐号及家目录
userdel -r
指定组并不允许登录的用户
useradd -g www -M -s /sbin/nologin www
切换用户执行
su - user -c "
#命令1

}

"


svn更新代码{

8 脚本相关

##################################
正则表达式
^ 行首定位
$ 行为定位
. 匹配除换行符以外的任意字符
* 匹配0 或多个重复字符

  • 重复一次或更多次
    ? 重复零次或一次
    [] 匹配一组中任意一个字符
    [^] 匹配不在指定组内的字符
    用来转义元字符
    < 词首定位符(支持vi 和grep)
    <love
    > 词尾定位符(支持vi 和grep)
    love>
    x{m} 重复出现m 次
    x{m,} 重复出现至少m 次
    x{m,n} 重复出现至少m 次不超过n 次
    X? 匹配出现零次或一次的大写字母X
    X 匹配一个或多个字母X
    (abc|def) 匹配一连串的(最少一个) abc 或def;abc 和def 将匹配
    d 匹配任意一位数字
    D 匹配任意单个非数字字符
    w 匹配任意单个字母数字字符,同义词是[:alnum:]
    s 匹配任意的空白符
    b 匹配单词的开始或结束
    [:alpha:] 代表所有字母不论大小写
    [:lower:] 表示小写字母
    [:upper:] 表示大写字母
    [:digit:] 表示数字字符
    () 括号内的字符为一组
    ##################################
    基本流程结构
    if [ $a == $b ]
    then
    echo "等于"
    else
    echo "不等于"
    fi
    ##################################
    case $xs in
    0) echo "0" ;;
    1) echo "1" ;;
    *) echo "其他" ;;
    esac
    ##################################
    num=1
    # while true 等同while :
    while [ $num -lt 10 ]
    do
    echo $num
    ((num=$num 2))
    done
    ##################################
    grep a a.txt | while read a
    do
    echo $a
    done
    ##################################
    w=`awk -F ":" '{print $1}' c`
    for d in $w
    do
    $d
    done
    ##################################
    for ((i=0;i<${#o[*]};i ))
    do
    echo ${o[$i]}
    done
    ##################################
    until 循环# 当command 不为0 时
    until command
    do
    body
    done
    ##################################
    流程控制
    break N # 跳出几层循环
    continue N # 跳出几层循环,循环次数不变
    continue # 重新循环次数不变
    ##################################
    变量
    将变量A 赋值为字串
    A="a b c def"
    A=`命令`
    间接调用
    eval a=$$a
    将变量A 定义为組数
    A=(a b c def)
    set a1 a2 a3 a4
    $1 $2 $*
    在子shell 中运行
    (a=bbk)
    定义变量类型
    declare 或者typeset
    -r 只读(readonly 一样)
    -i 整形
    -a 数组
    -f 函数
    -x export
    declare -i n=0
    env # 查看环境变量
    env | grep "name" # 查看定义的环境变量
    set # 查看环境变量和本地变量
    read name # 输入变量
    readonly name # 把name 这个变量设置为只读变量,不允许再次设置
    readonly # 查看系统存在的只读文件
    export name # 变量name 由本地升为环境
    export name="RedHat" # 直接定义name 为环境变量
    export Stat$nu=2222 # 变量引用变量赋值
    unset name # 变量清除
    export -n name # 去掉只读变量
    shift # 用于移动位置变量,调整位置变量,使$3 的值赋给$2.$2 的值赋予$1
    name 0 # 将字符串转换为数字
    number " " # 将数字转换成字符串
    常用系统变量
    $0 # 脚本启动名(包括路径)
    basename $0 # 只取脚本名
    $n # 当前程式的第n 个参数,n=1,2,…9
    $* # 当前程式的所有参数(不包括脚本本身)
    $# # 当前程式的参数个数(不包括脚本本身)
    $$ # 当前程式的PID
    $! # 执行上一个指令的PID
    $? # 执行上一个指令的返回值
    变量引用技巧${}
    ${name: value} # 如果设置了name,就把value 显示,未设置则为空
    ${name:-value} # 如果设置了name,就显示它,未设置就显示value
    ${name:?value} # 未设置提示用户错误信息value
    ${name:=value} # 如未设置就把value 设置并显示<写入本地中>,
    ${#A} # 可得到变量中字节
    ${#A[*]} # 数组个数
    ${A[2]} # 脚本的一个参数
    ${A:4:9} # 取变量中第4 位到后面9 位
    ${A/www/http} # 取变量并且替换每行第一个关键字
    ${A//www/http} # 取变量并且全部替换每行关键字
    定义了一个变量为:
    file=/dir1/dir2/dir3/my.file.txt
    ${file#*/} # 去掉第一条/ 及其左边的字串:dir1/dir2/dir3/my.file.txt
    ${file##*/} # 去掉最后一条/ 及其左边的字串:my.file.txt
    ${file#*.} # 去掉第一个. 及其左边的字串:file.txt
    ${file##*.} # 去掉最后一个. 及其左边的字串:txt
    ${file%/*} # 去掉最后条/ 及其右边的字串:/dir1/dir2/dir3
    ${file%%/*} # 去掉第一条/ 及其右边的字串:(空值)
    ${file%.*} # 去掉最后一个. 及其右边的字串:/dir1/dir2/dir3/my.file
    ${file%%.*} # 去掉第一个. 及其右边的字串:/dir1/dir2/dir3/my
    # # 是去掉左边(在键盘上# 在$ 之左边)
    # % 是去掉右边(在键盘上% 在$ 之右边)
    # 单一符号是最小匹配﹔两个符号是最大匹配
    ##################################
    test 条件判断
    # 符号[ ] 等同test
    expression 为字符串操作
    -n str # 字符串str 是否不为空
    -z str # 字符串str 是否为空
    expression 为文件操作
    -b # 是否块文件
    -p # 文件是否为一个命名管道
    -c # 是否字符文件
    -r # 文件是否可读
    -d # 是否一个目录
    -s # 文件的长度是否不为零
    -e # 文件是否存在
    -S # 是否为套接字文件
    -f # 是否普通文件
    -x # 文件是否可执行,则为真
    -g # 是否设置了文件的SGID 位
    -u # 是否设置了文件的SUID 位
    -G # 文件是否存在且归该组所有
    -w # 文件是否可写,则为真
    -k # 文件是否设置了的粘贴位
    -t fd # fd 是否是个和终端相连的打开的文件描述符(fd 默认为1)
    -O # 文件是否存在且归该用户所有
    ! # 取反
    expression 为整数操作
    expr1 -a expr2 # 如果expr1 和expr2 评估为真,则为真
    expr1 -o expr2 # 如果expr1 或expr2 评估为真,则为真
    两值比较
    整数字符串
    -lt <: # 小于
    -gt >: # 大于
    -le <=: # 小于或等于
    -ge >=: # 大于或等于
    -eq ==: # 等不等
    -ne !=: # 不等于
    判断大小,0 为真,1 为假
    test 10 -lt 5
    echo $?
    1
    判断字符串长度是否为0
    test -n "hello"
    0
    ##################################
    重定向
    # 标准输出stdout 和标准错误stderr 标准输入stdin
    cmd 1> fiel # 把标准输出重定向到file 文件中
    cmd > file 2>&1 # 把标准输出和标准错误一起重定向到file 文件中
    cmd 2> file # 把标准错误重定向到file 文件中
    cmd 2>> file # 把标准错误重定向到file 文件中(追加)
    cmd >> file 2>&1 # 把标准输出和标准错误一起重定向到file 文件中(追加)
    cmd < file >file2 # cmd 命令以file 文件作为stdin(标准输入),以file2 文件作为标
    准输出
    cat <>file # 以读写的方式打开file
    cmd < file cmd # 命令以file 文件作为stdin
    cmd << delimiter
    cmd; #从stdin 中读入,直至遇到delimiter 分界符。
    delimiter
    >&n # 使用系统调用dup (2) 复制文件描述符n 并把结果用作标准输出
    <&n # 标准输入复制自文件描述符n
    <&- # 关闭标准输入(键盘)
    >&- # 关闭标准输出
    n<&- # 表示将n 号输入关闭
    n>&- # 表示将n 号输出关闭
    ##################################
    运算符
    $[]等同于$(()) # $[]表示形式告诉shell 求中括号中的表达式的值
    ~var # 按位取反运算符,把var 中所有的二进制为1 的变为0,为0 的变为1
    var<<str # 左移运算符,把var 中的二进制位向左移动str 位,忽略最左端移出的各位,最
    右端的各位上补上0 值,每做一次按位左移就有var 乘2
    var>>str # 右移运算符,把var 中所有的二进制位向右移动str 位,忽略最右移出的各位,
    最左的各位上补0,每次做一次右移就有实现var 除以2
    var&str # 与比较运算符,var 和str 对应位,对于每个二进制来说,如果二都为1,结果为1.
    否则为0
    var^str # 异或运算符,比较var 和str 对应位,对于二进制来说如果二者互补,结果为1,
    否则为0
    var|str # 或运算符,比较var 和str 的对应位,对于每个二进制来说,如二都该位有一个1
    或都是1,结果为1,否则为0
    运算符的优先级
    级别运算符说明
    1 =, =,-=,/=,%=,*=,&=,^=,|=,<<=,>>== # 赋值运算符
    2 || # 逻辑或前面不成功执行
    3 && # 逻辑与前面成功后执行
    4 | # 按位或
    5 ^ # 按异位与
    6 & # 按位与
    7 ==,!= # 等于/不等于
    8 <=,>=,<,> # 大于或等于/小于或等于/大于/小于
    9 <<,>> # 按位左移/按位右移(无转意符号)
    10 ,- # 加减
    11 *,/,% # 乘,除,取余
    12 ! ,~ # 逻辑非,按位取反或补码
    13 -, # 正负
    ##################################
    数学运算
    $(( )) 整数运算符号大致有这些:
    • * / **:分別为"加、減、乘、除、密运算"
      & | ^ !:分別为"AND、OR、XOR、NOT" 运算
      % :余数运算
      运算
      let
      let x=16/4
      let x=5**5
      手工命令行计数器
      expr
      SUM=`expr 2 * 3`
      计算字串长度
      expr length "bkeep zbb"
      抓取字串
      expr substr "bkeep zbb" 4 9
      抓取第一个字符数字串出现的位置
      expr index "bkeep zbb" e
      整数运算
      expr 14 % 9
      expr 30 / 3 / 2 # 运算符号有空格
      增量计数(加循环即可)
      LOOP=0
      LOOP=`expr $LOOP 1`
      数值测试(如果试图计算非整数,则会返回错误。)
      rr=3.4
      expr $rr 1
      expr: non-numeric argument
      rr=5
      expr $rr 1
      6
      模式匹配(可以使用expr 通过指定冒号选项计算字符串中字符数)
      .* 意即任何字符重复0 次或多次
      expr bkeep.doc : '.*'
      在expr 中可以使用字符串匹配操作,这里使用模式抽取.doc 文件附属名。
      expr bkeep.doc : '(.*).doc'
      次方计算
      echo "m^n"|bc
      ##################################
      grep 用法
      -c 显示匹配到得行的数目,不显示内容
      -h 不显示文件名
      -i 忽略大小写
      -l 只列出匹配行所在文件的文件名
      -n 在每一行中加上相对行号
      -s 无声操作只显示报错,检查退出状态
      -v 反向查找
      -e 使用正则表达式
      -A1 打印匹配行和下一行
      -wc 匹配出现次数
      grep 可用于if 判断,找到$?为then
      过滤关键字符行
      grep -v "a" txt
      精确匹配字符串
      grep 'a>' txt
      大小写敏感
      grep -i "a" txt
      同时匹配大小写
      grep "a[bB]" txt
      查找0-9 重复三次的所在行
      grep '[0-9]{3}' txt
      任意条件匹配
      grep -E "word1 | word2 | word3" file
      同时匹配三个
      grep word1 file | grep word2 |grep word3
      ##################################
      tr 用法
      -c 用字符串1 中字符集的补集替换此字符集,要求字符集为ASCII。
      -d 删除字符串1 中所有输入字符。
      -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
      [a-z] a-z 内的字符组成的字符串。
      [A-Z] A-Z 内的字符组成的字符串。
      [0-9] 数字串。
      octal 一个三位的八进制数,对应有效的ASCII 字符。
      [O*n] 表示字符O 重复出现指定次数n。因此[O*2]匹配OO 的字符串。
      tr 中特定控制字符的不同表达方式
      速记符含义八进制方式
      a Ctrl-G 铃声\007
      b Ctrl-H 退格符\010
      f Ctrl-L 走行换页\014
      n Ctrl-J 新行\012
      r Ctrl-M 回车\015
      t Ctrl-I tab 键\011
      v Ctrl-X \030
      将所有大写转换成小写字母
      tr A-Z a-z
      将空格替换为换行
      tr " " "n"
      删除空行
      tr -s "[\012]" < plan.txt
      tr -s ["n"] < plan.txt
      删除文件中的^M,并代之以换行
      tr -s "[\015]" "[n]" < file
      tr -s "[r]" "[n]" < file
      替换passwd 文件中所有冒号,代之以tab 键
      tr -s "[:]" "[\011]" < /etc/passwd
      tr -s "[:]" "[t]" < /etc/passwd
      增加显示路径可读性
      echo $PATH | tr ":" "n"
      tr 在vi 内使用,在tr 前加处理行范围和感叹号('$'表示最后一行)
      1,$!tr -d 't'
      Mac -> UNIX
      tr "r" "n"<macfile > unixfile
      UNIX -> Mac
      tr "n" "r"<unixfile > macfile
      DOS -> UNIX
      Microsoft DOS/Windows 约定,文本的每行以回车字符(r)并后跟换行符(n)结束
      tr -d "r"<dosfile > unixfile
      UNIX -> DOS:在这种情况下,需要用awk,因为tr 不能插入两个字符来替换一个字符
      awk '{ print $0"r" }'<unixfile > dosfile
      ##################################
      awk 用法
      b 退格
      f 换页
      n 换行
      r 回车
      t 制表符Tab
      c 代表任一其他字符
      -F 改变FS 值(分隔符)
      ~ 匹配
      = 赋值
      == 匹配
      = 叠加
      [:alnum:] 字母数字字符
      [:alpha:] 字母字符
      [:cntrl:] 控制字符
      [:digit:] 数字字符
      [:graph:] 非空白字符(非空格、控制字符等)
      [:lower:] 小写字母
      [:print:] 与[:graph:]相似,但是包含空格字符
      [:punct:] 标点字符
      [:space:] 所有的空白字符(换行符、空格、制表符)
      [:upper:] 大写字母
      [:xdigit:] 十六进制的数字(0-9a-fA-F)
      内建变量
      $n 当前记录的第n 个字段,字段间由FS 分隔
      $0 完整的输入记录
      ARGC 命令行参数的数目
      ARGIND 命令行中当前文件的位置( 从0 开始算)
      ARGV 包含命令行参数的数组
      CONVFMT 数字转换格式( 默认值为%.6g)
      ENVIRON 环境变量关联数组
      ERRNO 最后一个系统错误的描述
      FIELDWIDTHS 字段宽度列表( 用空格键分隔)
      FILENAME 当前文件名
      FNR 同NR ,但相对于当前文件
      FS 字段分隔符( 默认是任何空格)
      IGNORECASE 如果为真(即非0 值),则进行忽略大小写的匹配
      NF 当前记录中的字段数(列)
      NR 当前行数
      OFMT 数字的输出格式( 默认值是%.6g)
      OFS 输出字段分隔符( 默认值是一个空格)
      ORS 输出记录分隔符( 默认值是一个换行符)
      RLENGTH 由match 函数所匹配的字符串的长度
      RS 记录分隔符( 默认是一个换行符)
      RSTART 由match 函数所匹配的字符串的第一个位置
      SUBSEP 数组下标分隔符( 默认值是/034) 。
      BEGIN 先处理(可不加文件参数)
      END 结束时处理
      [[:digit:][:lower:]] 数字和小写字母(占一个字符)
      -F"[ ] |[%] " 已多个空格或多个%为分隔符
      [a-z] 多个小写字母
      [a-Z] 代表所有大小写字母(aAbB...zZ)
      [a-z] 代表所有大小写字母(ab...z)
      打印匹配到得行
      awk '/Tom/' 文件
      如果第三个字段值小于4000 才打印
      awk '$3 <4000' 文件
      匹配Tom 开头的行打印第一个字段
      awk '/^Tom/{print $1}'
      显示所有第一个字段不是以ly 结尾的行
      awk '$1 !~ /ly$/' 文件
      条件判断(如果$1 大于$2,max 值为为$1,否则为$2)
      awk '{max=($1 > $2) ? $1 : $2; print max}' 文件
      awk '{print ($1>$2)?"第一排"$1:"第二排"$2}' e.txt
      (括号代表if 语句判断"?"代表then ":"代表else)
      算术运算(第三个字段和第四个字段乘积大于500 则显示)
      awk '$3 * $4 > 500' 文件
      打印tom 到suz 之间的行
      awk '/tom/,/suz/' 文件
      去掉前三行
      awk '{$1="";$2="";$3="";print}' a.sh
      将date 值赋给d,并将d 设置为数组mon,打印mon 数组中第2 个元素
      awk 'BEGIN{ "date" | getline d; split(d,mon) ; print mon[2]}' 文件
      以空格、:、制表符Tab 为分隔符
      awk -F'[ :t]' '{print $1,$2}'
      取关键字下第几行
      awk '/关键字/{a=NR 2}a==NR {print}'
      awk 中引用变量
      a=22aa &&echo 88:99:44|awk -F":" '{print $1,"'"$a"'",$2,$3}'
      指定类型(%d 数字,%s 字符)
      /sbin/ifconfig |awk '{printf("line %d,%sn",NR,$0)}'
      awk -v RS=# 'NF{for(i=1;i<=NF;i )if($i) printf $i;print ""}' 文件
      awk 加if 判断
      awk '{if ( $6 > 50) print $1 " Too high" ;
      else print "Range is OK"}' file
      awk '{if ( $6 > 50) { count ;print $3 }
      else { x 5; print $2 } }' file
      awk 加循环
      awk '{i = 1; while ( i <= NF ) { print NF, $i ; i } }' file
      awk '{ for ( i = 1; i <= NF; i ) print NF,$i }' file
      提取时间,空格不固定
      ll | awk -F'[ ] |[ ][ ] ' '/^$/{print $8}'
      查看磁盘空间
      df|awk -F"[ ] |%" '$5>14{print $5}'
      取出第四列等于90 的第五列
      awk '$4==90{print $5}'
      打印所有以模式no 或so 开头的行
      awk '/^(no|so)/' test
      排列打印
      awk 'END{printf
      "%-10s%-10sn%-10s%-10sn%-10s%-10sn","server","name","123","12345","234","1234"}' txt
      awk 'BEGIN{printf
      "|%-10s|%-10s|n|%-10s|%-10s|n|%-10s|%-10s|n","server","name","123","12345","234","1234"}'
      awk 'BEGIN{
      print " *** 开始*** ";
      print " ----------------- ";
      printf "|%-5s|%-5s|%-5s|n","id","name","ip";
      }
      $1!=1 && NF==4{printf "|%-5s|%-5s|%-5s|n",$1,$2,$3" "$11}
      END{
      print " ----------------- ";
      print " *** 结束*** "
      }' txt
      awk 中计算(求余数)
      echo list|awk '{ i=($10);if ( $i >= 0 ) {print $0,$i}}'
      sub 匹配第一次出现的符合模式的字符串,相当于sed 's//'
      awk '{sub(/Mac/,"Macintosh");print}' urfile
      #用Macintosh 替换Mac
      gsub 匹配所有的符合模式的字符串,相当于sed 's//g'
      awk '{sub(/Mac/,"MacIntosh",$1); print}' file
      #第一个域内用Macintosh 替换Mac
      处理sql 语句
      cat 1.txt|awk -F" # " '{print "insert into user
      (user,password,email)values(""'''"$1"'','""'''"$2"'','""'''"$3"'');'"}' >>insert_1.txt
      引用外部变量
      awk '{print "'"$a"'","'"$b"'"}'
      在END 块里面把数组内容写到文件
      awk -F: '{name[x ]=$1};END{for(i=0;i<NR;i )print i,name[i]}' data >tmp
      将$1 的值叠加后赋给sum
      awk 'sum =$1{print sum}' <<EOF
      1 11 111
      2 22 222
      8 33 333
      10 44 444
      EOF
      加入END 只打印最后的结果
      awk '{sum2 =$2;count=count 1}END{print sum2,sum2/count}' <<EOF
      1324236000: 4.8726625090e 06 1.4806911317e 07
      1324236300: 3.1952608823e 05 1.3144868085e 07
      1324236600: 5.0792587262e 05 1.4931600767e 07
      EOF
      #结果中第一个值是$2 的总和第二个值是$3 的总和第三个值是$2 总和除个数(平均值) 第
      四个值是$3 总和除个数(平均值)
      #e 06 是科学计数法,表示乘以10 的6 次方
      awk '{sum2 =$2;count=count 1}END{print sum2,sum2/count}' <<EOF
      1: 3 30
      2: 6 60
      3: 9 90
      EOF
      列求和
      cat txt |awk '{a =$1}END{print a}'
      列求平均值
      cat txt |awk '{a =$1}END{print a/NR}'
      列求最大值
      cat txt |awk 'BEGIN{a=0}{if ($1>a) a=$1 fi}END{print a}'
      #设定一个变量开始为0,遇到比该数大的值,就赋值给该变量,直到结束
      求最小值
      cat txt |awk 'BEGIN{a=11111}{if ($1<a) a=$1 fi}END{print a}'
      判断$1 是否整除(awk 中定义变量引用时不能带$ )
      cat txt |awk '{ i=$1;if ( i == 0 ) {print i}}'
      ##################################
      sed 用法
      -n 输出由编辑指令控制(取消默认的输出,必须与编辑指令一起配合)
      -i 直接对文件操作
      -e 多重编辑
      p 打印
      d 删除
      s 替换
      g 配合s 全部替换
      i 行前插入
      a 行后插入
      r 读
      y 转换
      q 退出
      (..) 保存..作为标签1(1)
      & 代表查找的串内容
      * 前导符
      .* 匹配任意多个字符
      模式空间(两行两行处理)
      N 将第二行追加到第一行将换行符n 替换空极为一行
      n 将第二行覆盖到第一行
      h 把模式空间里的行拷贝到暂存空间
      H 把模式空间里的行追加到暂存空间
      g 用暂存空间的内容替换模式空间的行
      G 把暂存空间的内容追加到模式空间的行后
      x 将暂存空间的内容于模式空间里的当前行互换
      ! 对所选行以外的所有行应用命令。
      注意:暂存空间里默认存储一个空行。
      sed 命令替换并打印出替换行( -i 改变文本)
      sed -n -e "{s/文本(正则表达式)/替换的文本/p}"
      打印并删除正则表达式的那部分内容
      sed -n -e "{s/^ *[0-9]*//p}"
      删除含关键的一行
      sed -i "/^$f/d" a
      直接对文本替换
      sed -i "s/=/:/" c
      找到pearls 开头在行尾加jcui
      sed -i "/^pearls/s/$/jcui/" ab.txt
      标签(保存(mar)作为标签1)
      sed -n 's/(mar)got/1ianne/p' 文件
      echo "margot"|sed -n 's/(mar).*(t)/12/p'
      sed -e 's/^([a-zA-Z] ) ([a-zA-Z] )(.*)/2 13/g' file
      在以[0-9][0-9]结尾的行后加5
      sed 's/[0-9][0-9]$/&5' 文件
      打印从第5 行到以no 开头行之间的所有行
      sed -n '5,/^no/p' 文件
      修改west 和east 之间的所有行,在结尾处加*VACA*
      sed '/west/,/east/s/$/*VACA*/' 文件
      多重编辑(先删除1-3 行,在将1 替换成2)
      sed -e '1,3d' -e 's/1/2/' 文件
      找到含suan 的行,在后面加上读入的文件内容
      sed '/suan/r 读入文件' 文件
      找到含no 的行,写入到指定文件中
      sed -n '/no/w 写入文件' 文件
      取出第一组数字,并且忽略掉开头的0
      sed 's/[^1-9]*([0-9] ).*/1/'
      打印1 和3 之间的行
      sed '/1/,/3/p' file
      取出指定行
      sed -n '1p' 文件
      在第5 行之前插入行
      sed '5iaaa' file
      在第5 行之后抽入行
      sed '5aaaa' file
      在匹配行前插入一行
      echo a|sed -e '/a/ib'
      在匹配行后插入一行
      echo a|sed -e '/a/ab'
      echo a|sed 's/a/&nb/g'
      引用外部变量
      sed -n ''$a',10p'
      sed -n ""$a",10p"
      取用户家目录(匹配不为/的字符和匹配:到结尾的字符全部删除)
      sed -n '{s/^[^/]*//;s/:.*//;p}' /etc/passwd
      将换行符转换为换行
      echo abcd\nabcde |sed 's/\n/@/g' |tr '@' 'n'
      删除掉@后面所有字符,和空行
      sed -e 's/@.*//g' -e '/^$/d'
      将几行合并成一行
      echo $(cat file)|sed 's/ //g'
      取一列最大值
      cat tmp|awk '{print $1}'|sort -n|sed -n '$p'
      查找属主权限为7 的文件
      ls -l|sed -n '/^.rwx.*/p'
      在a 前面加#号
      echo a|sed -e 's/a/#&/g'
      ##################################
      图形dialog
      多选界面[方括号]
      dialog --title "Check me" --checklist "Pick Numbers" 15 25 3 1 "one" "off" 2 "two" "on" 3 "three"
      "off" 2>tmp
      多选界面(圆括号)
      dialog --title "title" --radiolist "checklist" 20 60 14 tag1 "item1" on tag2 "item2" off 2>tmp
      单选界面
      dialog --title "title" --menu "MENU" 20 60 14 tag1 "item1" tag2 "item2" 2>tmp
      进度条
      dialog --title "Installation" --backtitle "Star Linux" --gauge "Linux Kernel" 10 60 50
      选择yes/no
      dialog --title "标题" --backtitle "Dialog" --yesno "说明" 20 60
      公告
      dialog --title "公告标题" --backtitle "Dialog" --msgbox "内容" 20 60
      显示讯息后立即离开
      dialog --title "hey" --backtitle "Dialog" --infobox "Is everything okay?" 10 60
      输入对话框
      dialog --title "hey" --backtitle "Dialog" --inputbox "Is okay?" 10 60 "yes"
      显示文档内容
      dialog --title "Array 30" --backtitle "All " --textbox /root/txt 20 75
      多条输入对话框
      dialog --title "Add a user" --form "Add a user" 12 40 4 "Username:" 1 1 "" 1 15 15 0 "Full
      name:" 2 1 "" 2 15 15 0 2>tmp
      星号显示输入--insecure
      dialog --title "Password" --insecure --passwordbox "请输入密码" 10 35
      选择日期
      dialog --stdout --title "日历" --calendar "请选择" 0 0 9 1 2010
      ##################################
      脚本头# sh 为当前系统默认shell,可指定为bash 等
      #!/bin/sh
      临时文件定义
      errtmp=/tmp/$$`date %s%N`.errtmp
      outtmp=/tmp/$$`date %s%N`.outtmp
      true > $outtmp
      随机数
      $RANDOM
      进程号
      $$
      纳秒
      date %N
      在当前bash 环境下读取并执行FileName 中的命令
      source file-name # 等同. FileName
      间隔睡眠5 秒
      sleep 5
      在接收到信号后将要采取的行动
      trap
      当前目录
      $PWD
      之前一个目录的路径
      $OLDPWD
      返回上一个目录路径
      cd -
      重复打印
      yes
      自动回答y 或者其他
      yes |rm -i *
      查看目录所有文件夹
      ls -p /home
      查看匹配完整路径
      ls -d /home/
      命令替换xargs
      #将前面的内容,作为后面命令的参数
      find / -perm 7000 | xargs ls -l
      不换行执行下一句话
      echo -n aa;echo bb
      使转义生效
      echo -e "stssnnn"
      取字符串中字元
      echo $a | cut -c2-6
      排列组合(括号内一个元素分别和其他括号内元素组合)
      echo {a,b,c}{a,b,c}{a,b,c}
      返回目录名
      pwd | awk -F/ '{ print "目录名:" ,$2 }'
      替换上一条命令中的(foo)一个短语(bar)
      ^foo^bar^
      !!:s/foo/bar/
      !!:gs/foo/bar
      ##################################
      shell 例子
      判断参数是否为空-空退出并打印null
      #!/bin/sh
      echo $1
      name=${1:?"null"}
      echo $name
      ##################################
      循环数组
      for ((i=0;i<${#o[*]};i ))
      do
      echo ${o[$i]}
      done
      ##################################
      判断路径
      if [ -d /root/Desktop/text/123 ];then
      echo "找到了123"
      if [ -d /root/Desktop/text ]
      then echo "找到了text"
      else echo "没找到text"
      fi
      else echo "没找到123 文件夹"
      fi
      ##################################
      匹配替换密码
      #!/bin/sh
      cat mailpassword > temp.txt
      sed -i "s/:/ = /" temp.txt
      w=`awk -F " = " '{print $1}' temp.txt`
      for d in $w
      do
      grep -w $d svnpassword >/dev/null
      if [ $? -eq 0 ]
      then
      sed -i "/^$d/d" svnpassword
      grep "^$d" temp.txt >> svnpassword
      #替换到转义就出问题
      #sed -i "/^$d/c $(grep "^$d" temp.txt)" svnpassword
      fi
      done
      rm temp.txt
      ##################################
      多行合并
      将两行并为一行(去掉换行符)
      sed '{N;s/n//}' file
      将4 行合并为一行(可扩展)
      awk '{if (NR%4==0){print $0} else {printf"%s ",$0}}' file
      将所有行合并
      awk '{printf"%s ",$0}'
      ##################################
      shift 用法
      ./cs.sh 1 2 3
      #!/bin/sh
      until [ $# -eq 0 ]
      do
      echo "第一个参数为: $1 参数个数为: $#"
      #shift 命令执行前变量$1 的值在shift 命令执行后不可用
      shift
      done
      ##################################
      给脚本加参数getopts
      #!/bin/sh
      while getopts :ab: name
      do
      case $name in
      a) aflag=1
      ;;
      b) bflag=1
      bval=$OPTARG
      ;;
      ?) echo "USAGE:`basename $0` [-a] [-b value]"
      exit 1
      ;;
      esac
      done
      if [ ! -z $aflag ] ; then
      echo "option -a specified"
      echo "$aflag"
      echo "$OPTIND"
      fi
      if [ ! -z $bflag ] ; then
      echo "option -b specified"
      echo "$bflag"
      echo "$bval"
      echo "$OPTIND"
      fi
      echo "here $OPTIND"
      shift $(($OPTIND -1))
      echo "$OPTIND"
      echo " `shift $(($OPTIND -1))` "
      ##################################
      判断脚本参数是否正确
      ./test.sh -p 123 -P 3306 -h 127.0.0.1 -u root
      #!/bin/sh
      if [ $# -ne 8 ];then
      echo "USAGE: $0 -u user -p passwd -P port -h host"
      exit 1
      fi
      while getopts :u:p:P:h: name
      do
      case $name in
      u)
      mysql_user=$OPTARG
      ;;
      p)
      mysql_passwd=$OPTARG
      ;; P)
      mysql_port=$OPTARG
      ;;
      h)
      mysql_host=$OPTARG
      ;;
      *)
      echo "USAGE: $0 -u user -p passwd -P port -h host"
      exit 1
      ;;
      esac
      done
      if [ -z $mysql_user ] || [ -z $mysql_passwd ] || [ -z $mysql_port ] || [ -z $mysql_host ]
      then
      echo "USAGE: $0 -u user -p passwd -P port -h host"
      exit 1
      fi
      echo $mysql_user $mysql_passwd $mysql_port $mysql_host
      #结果root 123 3306 127.0.0.1
      ##################################
      dialog 取值接值退出
      outtmp=/tmp/outtmp
      dialog --no-shadow --backtitle "雪松制作" --title "请选择" --ok-label "提交" --cancel-label "取消"
      --menu "请选择" 10 60 0
      1 "[目录]"
      q "[退出]"
      2> $outtmp
      #判断提交取消
      if [ $? == "1" ]
      then
      break
      #continue
      fi
      #只判断退出
      pt=`awk '{print}' $outtmp`
      if [ $pt == q ]
      then
      break
      fi
      #判断操作
      case $pt in
      1)
      #操作
      ;;
      q)
      exit #break
      ;;
      esac
      ##################################
      dialog 输入对话框加判断
      while :
      do
      outtmp=/tmp/outtmp
      dialog --title "雪松制作" --form "请输入" 20 60 10 "用户:" 1 2 "" 1 15 35 0 "ID:" 2 2 "" 2
      15 35 0 "" 6 2 "" 6 0 0 0 "输入格式如下" 7 2 "" 7 0 0 0 "说明" 8 2 "" 8 0 0
      0 2> $outtmp
      yh=`sed -n '1p' $outtmp`
      id=`sed -n '2p' $outtmp`
      if echo $yh | grep -e '^[1-9][0-9]{0,2}' > /dev/null 2>&1
      then
      if echo $id | grep -e '^[1-9][0-9]{0,12}' > /dev/null 2>&1
      then
      break
      else
      echo "您输入的不合法,请从新输入!"
      fi
      else
      echo "您输入的不合法,请从新输入!"
      fi
      done
      ##################################
      打印表格
      #!/bin/sh
      clear
      awk 'BEGIN{
      print " -------------------- -------------------- ";
      printf "|%-20s|%-20s|n","Name","Number";
      print " -------------------- -------------------- ";
      }'
      a=`grep "^[A-Z]" a.txt |sort 1 -n |awk '{print $1":"$2}'`
      #cat a.txt |sort 1 -n |while read list
      for list in $a
      do
      name=`echo $list |awk -F: '{print $1}'`
      number=`echo $list |awk -F: '{print $2}'`
      awk 'BEGIN{printf "|%-20s|%-20s|n","'"$name"'","'"$number"'";
      print " -------------------- -------------------- ";
      }'
      done
      awk 'BEGIN{
      print " *** The End *** "
      print " "
      }'
      ##################################
      判断日期是否合法
      #!/bin/sh
      while read a
      do
      if echo $a | grep -q "-" && date -d $a %Y%m%d > /dev/null 2>&1
      then if echo $a | grep -e '^[0-9]{4}-[01][0-9]-[0-3][0-9]$'
      then
      break
      else
      echo "您输入的日期不合法,请从新输入!"
      fi
      else
      echo "您输入的日期不合法,请从新输入!"
      fi
      done
      echo "日期为$a"
      ##################################
      打印日期段所有日期
      #!/bin/bash
      qsrq=20010101
      jsrq=20010227
      n=0
      >tmp
      while :;do
      current=$(date %Y%m%d -d"$n day $qsrq")
      if [[ $current == $jsrq ]];then
      echo $current >>tmp;break
      else
      echo $current >>tmp
      ((n ))
      fi
      done
      rq=`awk 'NR==1{print}' tmp`
      ##################################
      打印提示
      cat <<EOF
      #内容
      EOF
      登陆远程执行命令(特殊符号需要转义)
      ssh root@ip << EOF
      #执行命令
      EOF
      登陆mysql 执行命令
      mysql -uroot -ppasswd -S mysql.sock --default-character-set=gbk -A<<EOF>outtmp
      #mysql 命令
      EOF
      ##################################
      数学计算的小算法
      #!/bin/sh
      A=1
      B=1
      while [ $A -le 10 ]
      do
      SUM=`expr $A * $B`
      echo "$SUM"
      if [ $A = 10 ]
      then
      B=`expr $B 1`
      A=1
      fiA
      =`expr $A 1`
      done
      ##################################
      竖行转横行(三种)
      cat file|tr 'n' ' '
      echo $(cat file)
      #!/bin/sh
      for i in `cat file`
      do
      a=${a}" "${i}
      done
      echo $a
      ##################################
      取用户的根目录
      #! /bin/bash
      #showhome.sh
      IFS=:
      while read name pass uid gid gecos home shell
      do
      echo $home
      done
      执行./showhome.sh < /etc/passwd
      ##################################
      把汉字转成encode 格式:
      echo 论坛| tr -d "n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,n"

      本文由金沙澳门官网发布于金沙澳门官网网址,转载请注明出处:金沙澳门官网网址一篇文章集合所有Linux基础命令

      关键词: 金沙澳门官网

上一篇:站点是基于
下一篇:没有了