Linux系统运维常用命令

----------------------------------

 

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 {} \;

 

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

 

====================================================================

 

----------------------------------

 

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 下载地址

 

http://www.rarsoft.com/rar/rarlinux-3.6.0.tar.gz

 

压缩文件为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 程序

 

gcc -g hello.c -o hello

 

====================================================================

 

----------------------------------

 

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 扩展源

 

http://download.fedoraproject.org/pub/epel

 

wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

 

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)

 

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

 

====================================================================

 

----------------------------------

 

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

 

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

 

====================================================================

 

----------------------------------

 

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

 

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

 

====================================================================

 

----------------------------------

 

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

 

"

 

====================================================================

 

----------------------------------

 

8 脚本相关

 

----------------------------------

 

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

 

正则表达式

 

^ 行首定位

 

$ 行为定位

 

. 匹配除换行符以外的任意字符

 

* 匹配0 或多个重复字符

 

+ 重复一次或更多次

 

? 重复零次或一次

 

[] 匹配一组中任意一个字符

 

[^] 匹配不在指定组内的字符

 

\ 用来转义元字符

 

\< 词首定位符(支持vi 和grep)

 

\

 

\> 词尾定位符(支持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\<

 

右端的各位上补上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" unixfile

 

UNIX -> Mac

 

tr "\n" "\r" macfile

 

DOS -> UNIX

 

Microsoft DOS/Windows 约定,文本的每行以回车字符(\r)并后跟换行符(\n)结束

 

tr -d "\r" unixfile

 

UNIX -> DOS:在这种情况下,需要用awk,因为tr 不能插入两个字符来替换一个字符

 

awk '{ print $0"\r" }' 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,%s\n",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%-10s\n%-10s%-10s\n%-10s%-10s\n","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=($1%100);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;itmp

 

将$1 的值叠加后赋给sum

 

awk 'sum+=$1{print sum}' <

 

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

 

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

 

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

 

判断$1 是否整除(awk 中定义变量引用时不能带$ )

 

cat txt |awk '{ i=$1%10;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\)/\1\2/p'

 

sed -e 's/^\([a-zA-Z]\+\) \([a-zA-Z]\+\)\(.*\)/\2 \1\3/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 '5i\aaa' file

 

在第5 行之后抽入行

 

sed '5a\aaa' file

 

在匹配行前插入一行

 

echo a|sed -e '/a/i\b'

 

在匹配行后插入一行

 

echo a|sed -e '/a/a\b'

 

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 "s\tss\n\n\n"

 

取字符串中字元

 

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

 

登陆远程执行命令(特殊符号需要\转义)

 

ssh root@ip << EOF

 

#执行命令

 

EOF

 

登陆mysql 执行命令

 

mysql -uroot -ppasswd -S mysql.sock --default-character-set=gbk -A<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"

 

%c2%db%cc%b3

 

大写的:

 

echo 论坛| tr -d "\n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,\n" | tr "[a-f]" "[A-F]"

 

%C2%DB%CC%B3

 

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

 

把带有大写字母的文件名改为全部小写

 

#!/bin/bash

 

for f in *;do

 

mv $f `echo $f |tr "[A-Z]" "[a-z]"`

 

done

 

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

 

查找连续多行,在不连续的行前插入

 

#/bin/bash

 

lastrow=null

 

i=0

 

cat incl|while read line

 

do

 

i=`expr $i + 1`

 

if echo "$lastrow" | grep "#include <[A-Z].h>"

 

then

 

if echo "$line" | grep -v "#include <[A-Z].h>"

 

then

 

sed -i ''$i'i\\/\/All header files are include' incl

 

i=`expr $i + 1`

 

fi

 

fi

 

lastrow="$line"

 

done

 

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

 

====================================================================

 

----------------------------------

 

9 服务配置

 

----------------------------------

 

samba

 

修改配置文

 

/etc/samba/smb.conf

 

[global]

 

workgroup = WORKGROUP

 

server string = sambaserver

 

security=share

 

hosts allow=网络主机

 

[file]

 

comment=home directories

 

path=/etc/samba/xuesong

 

public=yes

 

writable=yes

 

browseable=yes

 

重启

 

service smb restart

 

linux 访问windows 共享

 

smbclient -L //ip 地址或计算机名

 

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

 

DNS 服务器

 

DNS 主配置文件,moon.com 域名,zone.moon.com 域的配置文件

 

vi /etc/named.conf

 

zone "moon.com" IN {

 

type master;

 

file "zone.moon.com";

 

allow-update { none; };

 

};

 

测试主配置文件

 

named-checkconf

 

新建域的配置文件zone.moon.com

 

vi /var/named/chroot/var/named/zone.moon.com

 

$TTL 86400

 

@ IN SOA xs. quanzhou722.163.com. (

 

20102014

 

3H

 

15M

 

1W

 

1D

 

)

 

IN NS xs.

 

IN MX 5 mail.

 

www IN A 192.168.1.209

 

ftp IN A 192.168.1.209

 

mail IN A 192.168.1.209

 

测试moon.com 域配置文件

 

named-checkzone moon.com /var/named/chroot/var/named/zone.moon.com

 

建立域配置文件的软连接

 

ln -s /var/named/chroot/var/named/zone.moon.com /var/named/zone.moon.com

 

重启named 服务

 

service named restart

 

设置DNS

 

vi /etc/resolv.conf

 

测试解析是否成功

 

host www.moon.com

 

nslookup www.moon.com

 

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

 

ftp 配置

 

查看vsftp 是否安装

 

rpm -qa | grep vsftp

 

主配置文件

 

vi /etc/vsftpd/vsftpd.conf

 

启动VSFTPD 服务

 

service vsftpd restart

 

查看21 端口是否开放

 

netstat -atln |grep 21

 

1、匿名用户是否允许访问

 

anonymous_enable=YES

 

anon_mkdir_write_enable=YES

 

2、本地用户管理

 

local_enable=YES

 

chroot_list_enable=YES

 

chroot_list_file=/etc/vsftpd.chroot_list

 

将用户添加到vsftpd.chroot_list 文件中允许访问

 

cat /etc/passwd |grep ":5[0-9][0-9]:" | awk -F : '{print $1}' > /etc/vsftpd.chroot_list

 

3、虚拟用户管理

 

(1)要用到文件数据库db4

 

rpm -qa |grep db4

 

(2)将帐户放入文本:(奇数行)用户名(偶数行)密码

 

vi zhanghu.dat

 

(3)生成帐户的文件数据库

 

db_load -T -t hash -f zhanghu.dat /etc/vsftpd/vsftpd_zhanghu.db

 

(4)修改文件数据库访问权限

 

chmod 600 /etc/vsftpd/vsftpd_zhanghu.db

 

(5)手工建立虚拟用户所需的PAM 配置文件

 

vi /etc/pam.d/vsftpd.zhanghu

 

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu

 

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu

 

(6)添加一个虚拟用户的入口帐户

 

useradd -d /var/ZhanDian -s /sbin/nologin XuNiRuKou

 

(7)在主配置文件中添加虚拟用户的配置内容

 

虚拟用户的新添加配置

 

chroot_local_user=YES

 

guest_enable=YES

 

guest_username=XuNiRuKou

 

pam_service_name=vsftpd.zhanghu

 

(8)在vsftpd.conf 配置文件中指定用户配置文件的目录

 

user_config_dir=/etc/vsftpd/vsftpd_zhandian

 

(9)建立配置文件中指定用户配置文件的目录

 

mkdir /etc/vsftpd/vsftpd_zhandian

 

(10)因为入口帐户是一个本地帐户,所以要指定虚拟用户具有本地帐户的权限,才能读写自

 

己空间中的文件

 

虚拟用户就可以就拥有写权限

 

virtual_use_local_privs=YES

 

(11)

 

touch /etc/vsftpd/vsftpd_zhandian/xuesong

 

echo "local_root=/var/ZhanDian/xuesong" >> /etc/vsftpd/vsftpd_zhandian/xuesong

 

(12)

 

mkdir /var/ZhanDian/xuesong

 

(13)

 

chown -R XuNiRuKou:XuNiRuKou /var/ZhanDian/

 

(14)重启服务

 

/etc/init.d/vsftpd restart

 

(15)客户端虚拟账号测试

 

建立用户脚本。最好在加上判断用户名是否存在

 

#!/bin/sh

 

echo 请输入用户名

 

read y

 

echo $y >> zhanghu.dat

 

echo 请输入密码

 

read m

 

echo $m >> zhanghu.dat

 

db_load -T -t hash -f zhanghu.dat /etc/vsftpd/vsftpd_zhanghu.db

 

chmod 600 /etc/vsftpd/vsftpd_zhanghu.db

 

touch /etc/vsftpd/vsftpd_zhandian/$y

 

echo "local_root=/var/ZhanDian/$y" >> /etc/vsftpd/vsftpd_zhandian/$y

 

mkdir /var/ZhanDian/$y

 

chown -R XuNiRuKou:XuNiRuKou /var/ZhanDian/$y

 

/etc/init.d/vsftpd restart

 

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

 

httpd 安装

 

tar zxvf httpd-2.2.12.tar.gz

 

cd httpd-2.2.12

 

./configure --prefix=/usr/local/httpd \

 

--enable-rewrite

 

make && make install

 

ls /usr/local/

 

groupadd www

 

useradd -g www -M -s /sbin/nologin www

 

cd /usr/local/httpd/

 

vi conf/httpd.conf

 

服务器开启在软件安装目录的bin 中

 

./apachectl start

 

网页放在的htdocs 中

 

开机启动

 

vi /etc/rc.d/rc.local

 

/usr/local/httpd/bin/apachectl start

 

如果启动提示

 

httpd: Could not reliably determine the server fully qualified domain name, using 127.0.0.1 for

 

ServerName

 

修改/etc/hosts 计算机名

 

在httpd.conf 中开启

 

ServerName 127.0.0.1:80

 

编码设置

 

AddDefaultCharset UTF-8

 

AddDefaultCharset GB2312

 

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

 

mysql 源码安装

 

groupadd mysql

 

useradd mysql -g mysql -M -s /bin/false

 

tar zxvf mysql-5.0.22.tar.gz

 

cd mysql-5.0.22

 

./configure --prefix=/usr/local/mysql \

 

--with-client-ldflags=-all-static \

 

--with-mysqld-ldflags=-all-static \

 

--with-mysqld-user=mysql \

 

--with-extra-charsets=all \

 

--with-unix-socket-path=/var/tmp/mysql.sock

 

make && make install

 

生成mysql 用户数据库和表文件,在安装包中输入。

 

scripts/mysql_install_db --user=mysql

 

vi ~/.bashrc

 

export PATH="$PATH: /usr/local/mysql/bin"

 

配置文件,有large,medium,small 三个,根据机器性能选择

 

cp support-files/my-medium.cnf /etc/my.cnf

 

cp support-files/mysql.server /etc/init.d/mysqld

 

chmod 700 /etc/init.d/mysqld

 

cd /usr/local

 

chmod 750 mysql -R

 

chgrp mysql mysql -R

 

chown mysql mysql/var -R

 

cp /usr/local/mysql/libexec/mysqld mysqld.old

 

ln -s /usr/local/mysql/bin/mysql /sbin/mysql

 

ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin

 

ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc3.d/S15mysql5

 

ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc0.d/K15mysql5

 

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

 

mysql rpm 安装

 

到http://www.mysql.com/downloads/mysql 下载mysql RPM(service 和client),

 

MySQL-server-community-5.1.51-1.rhel5.i386.rpm 安装服务端

 

MySQL-client-community-5.1.51-1.rhel5.i386.rpm 安装客户端

 

MySQL-devel-community-5.1.51-1.rhel5.i386.rpm 用于php 的mysql 安装

 

rpm –ivh MySQL-server-community-5.1.51-1.rhel5.i386.rpm

 

rpm –ivh MySQL-client-community-5.1.51-1.rhel5.i386.rpm

 

rpm –ivh MySQL-devel-community-5.1.51-1.rhel5.i386.rpm

 

/etc/init.d/mysqld start

 

mysqladmin -u root password 'xuesong'

 

mysql -u root -S /var/lib/mysql/mysql.sock -p

 

数据目录/var/lib/mysql

 

chkconfig --list |grep mysqld

 

chkconfig --level 3 mysqld on

 

配置文件(日志\pid)

 

/etc/my.cnf

 

ll /usr/bin/mysql*

 

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

 

mysql 常用命令

 

启动mysql 服务

 

./mysql/bin/mysqld_safe --user=mysql &

 

登录mysql 的命令

 

格式: mysql -h 主机地址-u 用户名-p 用户密码

 

mysql -h110.110.110.110 -P3306 -uroot -p

 

mysql -uroot -p -S /data1/mysql5/data/mysql.sock -A --default-character-set=GBK

 

刷新

 

flush privileges;

 

显示所有数据库

 

show databases;

 

打开数据库

 

use dbname;

 

显示选中数据库中所有的表

 

show tables;

 

查看表结构

 

desc tables;

 

删除数据库

 

drop database name;

 

删除表

 

drop table name;

 

创建数据库

 

create database name;

 

mysqladmin -h myhost -u root -p create dbname

 

创建表

 

create table ka(ka_id varchar(6),qianshu int);

 

插入字段

 

alter table name add column accountid(列名) int(11) NOT NULL(字段不为空);

 

不登陆mysql 插入字段

 

mysql -uroot -p -S mysql.sock -e "use db;alter table gift add column accountid int(11) NOT

 

NULL;flush privileges;"

 

查询

 

select 列名称from 表名称;

 

select host,user,password from user;

 

备份数据库

 

mysqldump -h host -u root -p dbname >dbname_backup.sql

 

mysqlhotcopy 只能备份MyISAM 引擎

 

/bin/mysqlhotcopy -u root -p

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. ls:列出当前目录下的文件和子目录 2. cd:切换当前目录 3. pwd:显示当前所在目录的路径 4. mkdir:创建新目录 5. rm:删除文件或目录 6. cp:复制文件或目录 7. mv:移动或重命名文件或目录 8. cat:查看文件内容 9. vi:编辑文件 10. top:查看系统进程和资源占用情况 11. ps:查看当前进程信息 12. kill:结束指定进程 13. ifconfig:查看网络接口信息 14. ping:测试网络连接 15. netstat:查看网络连接状态 16. ssh:远程登录到另一台计算机 17. scp:在计算机之间复制文件 18. tar:打包和解压缩文件 19. find:查找文件 20. grep:在文件中搜索指定字符串 ### 回答2: Linux系统是一种非常强大和广泛使用的操作系统,它在各种不同的场景中使用,包括桌面、服务器、嵌入式设备等。而对于系统运维人员来说,了解并熟练掌握一些常用的命令是十分重要的。在下面的回答中,我将列举一些常用的Linux系统运维命令。 1. ls:用于列出当前目录下的文件和子目录 2. cd:用于切换当前目录 3. pwd:用于显示当前目录的绝对路径 4. rm:用于删除文件或目录,可以使用-r选项来递归删除目录及其子目录 5. cp:用于复制文件或目录 6. mv:用于移动或重命名文件或目录 7. mkdir:用于创建目录 8. rmdir:用于删除空目录 9. ps:用于查看进程信息 10. kill:用于结束进程 11. top:用于实时查看系统运行状态 12. df:用于显示磁盘分区的信息 13. du:用于显示指定文件或目录的磁盘使用情况 14. ping:用于测试网络连接状态 15. ifconfig:用于查看和配置网络设备的信息 16. netstat:用于查看网络连接和路由表的信息 17. scp:用于在本地主机和远程主机之间进行安全复制 18. grep:用于搜索指定的文本内容 19. find:用于查找指定目录下的文件和目录 20. tar:用于对文件和目录进行打包和压缩 除了以上列出的命令,还有很多其他的命令也非常有用,例如sed、awk、sort、cut等。了解这些命令并掌握其用法,可以帮助系统运维人员快速解决各种常见问题,提高工作效率和生产力。需要注意的是,这些命令虽然简单,但它们的功能很强大。在操作系统上工作时,务必小心谨慎,避免对系统造成不必要的破坏。 ### 回答3: Linux系统是一种非常流行的操作系统,有许多命令可用于系统运维。在以下内容中,我们将介绍一些常用的Linux系统运维命令。 1. ls命令 ls命令用于列出当前目录中的文件和目录。该命令有许多选项,如-a选项可以列出当前目录中的所有文件,包括隐藏文件。例如,ls -a命令将列出当前目录中所有文件和目录,包括隐藏文件。 2. pwd命令 pwd命令用于显示当前工作目录的路径。用户可使用cd命令进入不同的目录,而pwd命令将显示用户当前的位置。例如,pwd命令将显示用户当前位于哪个目录。 3. cd命令 cd命令用于更改用户的当前工作目录。该命令可能需要跟上相对或绝对路径。例如,cd /home/user命令将导航至/home/user目录,而cd ..命令将导航至上一级目录。 4. mkdir命令 mkdir命令用于创建新目录。此命令可能需要跟上目录名称。例如,mkdir new_dir命令将在当前目录中创建一个名为“new_dir”的目录。 5. rm命令 rm命令用于删除文件或目录。该命令也有一些选项,如-r选项将删除目录及其所有内容。例如,rm -r my_dir命令将删除名为“my_dir”的目录及其所有内容。请注意使用删除命令极具危险性,故慎用。 6. cp命令 cp命令用于复制文件或目录。该命令需要指定源文件或目录以及复制的目标位置。例如,cp file.txt /var/www/命令将复制名为“file.txt”的文件到“/var/www/”目录下。 7. mv命令 mv命令用于移动或重命名文件或目录。该命令也需要指定源文件或目录以及目标位置。例如,mv file.txt /var/www/命令将将名为“file.txt”的文件移动到“/var/www/”目录下,或mv file.txt new_name.txt命令将名为“file.txt”的文件重命名为“new_name.txt”。 8. ps命令 ps命令用于列出系统中运行的进程。该命令也有许多选项,可以可以显示对应进程的信息,如所使用的CPU、内存等。例如,ps aux命令将列出所有正在运行的进程及其详细信息。 9. top命令 top命令用于实时监控系统的性能,并显示正在运行的进程及其使用的资源。该命令也有许多选项,可以用于更详细地监控系统及其进程。 总之,以上所述的是linux系统运维常用命令,这些命令为管理员提供了管理文件、目录、进程、性能等方面的有效工具,使管理员能够轻松地管理和监控系统。因此,对于想要成为Linux系统管理员或系统运维人员的人来说,了解这些命令是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值