平时接触了主机,有空就系统整本书的看下。总感觉这种脚本没有java或c语言那样很规范的语法,它的实现感觉有些随意,通过一些写法的技巧轻易的解决事情,随意自然轻巧,也许这就是linux这种开源东西的优势吧。
ubuntu 中文乱码
如果使用的是 PuTTY,可以通过修改 font, character set 设置来解决。
Window -> Appearance -> Font settings 选择宋体或新宋体:
Window -> Translation -> Character set translation on received data 选择 UTF-8:
--ubuntu
--设置root密码
sudo passwd root
sudo /etc/init.d/ssh star
startx--启动图形界面
cal 2002--查看2002年日历
man date/info date --查询date指令的使用
who --查看当前用户
netstate-a --查看当前网络情况
ps -aux --查看后台执行的程序
shutdown/reboot --关机
reboot -f 强制重启
--改变一个文件的群组
chgrp 群组名 文件
chown -R tomcat /home/tomcat/
--8080端口映射到80端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
--设置ip地址
10.8.6.247
cat /etc/sysconfig/network-scripts/ifcfg-eth0
--列子
DEVICE=eth0
BOOTPROTO=static
HWADDR=E4:1F:13:38:5E:60
IPADDR=10.26.88.205
NETMASK=255.255.255.192
GATEWAY=10.26.88.254
ONBOOT=yes
TYPE=Ethernet
--重启ip设置
/etc/init.d/network restart
--查看这个目录下的文件大小
du -m /home/tomcat
--修改linux启动默认
/etc/inittab 的id:5:initdefault:
init[012356]
0: 关机
1:单用户
2:多用户网络没有网络服务
3:多用户网络有网络服务
5:图形界面
6:系统重启
--切换账户 报open to many
su: /bin/bash: Too many open files in system
vi /etc/sysctl.conf
fs.file-max = 6553600
最后退出输入回车
--vi使用
复制:yy
粘贴:p
删除:dd
--服务器间的数据copy
scp jdk-6u16-linux-x64.bin [email protected]:/usr
--代码更新
cp -r src/* target/xxt
修改文件名:
mv 原来文件名,修改后的文件名
--启动ftp
service vsftpd start
service sshd start
chkconfig sshd on
ftp ip
get 文件名 --下载文件
delete 文件名 --删除文件
bye --退出
linux jdk设置
chmod +x jdk-6u17-linux-i586.bin
cat /etc/profile
export JAVA_HOME=/usr/jdk1.6.0_17
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export LANG='zh_CN'
/usr/java
--创建账户
useradd 账户名
useradd -G dba vas
passwd 账户名
usermod 修改用户
passwd root
killall 进程名
--查看字符集
locale
--创建文件
touch filename
--创建文件夹
mkdir filename
--查看ip,mac地址
/sbin/ifconfig
--修改时间
date -s 2011-01-25
date -s 02:23:30
clock -w
clock -r
clock -hwtosys
--挂载文件
mount
--挂载光盘
mount /mnt/cdrom
unmount
--查看分区
fdisk -l
window linux 安装系统删除linux
fdisk /mbr
--查看当前运行的shell
env
--切换shell
chsh -s /bin/csh
--追踪路由命令
tracert www.sina.com
--安装tar.gz文件
tar -zxvf qbittorrent-2.4.4.tar.gz
tar -zxvf apache-tomcat-5.5.33.tar.gz
--rpm 安装
--安装软件:
rpm -ivh MySQL-clinet-community-5.1.52-1.rhel3.i386.rpm MySQL-server-community-5.1.52-1.rhel3.i386.rpm
--查询是否有该软件
rpm -qa|grep name
rpm -qa name
--卸载软件 rpm -e name
--强制卸载 rpm -e --nodeps name
--任务调度
--启动任务调度 一般不需要手动调用下面
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
--任务编辑 crontab -e
--任务删除 crontab -r
--任务列表 crontab -l
--网络命令
netstat -anp
--显示本机到远程主机的历程名称 tracerout
netstat -anp | grep '8000' | wc -l
--建立超链接
ln -s 源 目标
--字符查找
grep -n "java" /home/tomcat/*
grep 参数:
-i 大小写
-v 显示不匹配的行
--宏定义
alias l='ll -t'
查看物理CPU的个数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
查看逻辑CPU的个数
cat /proc/cpuinfo |grep "processor"|wc -l
查看CPU是几核
cat /proc/cpuinfo |grep "cores"|uniq
--cpu信息
more /proc/cpuinfo
--位数
getconf LONG_BIT
--wc 统计文本数
行数(line),字数(word),字符数(character)
--安装ssh
sudo apt-get install openssh-server
负载里面的 1分钟、5分钟、15分钟的数字 ,1分钟 当前的数字 除以 核数>=5 就表示 服务器需要升级 或者优化
释放内存:echo 3 >/proc/sys/vm/drop_caches
--shell脚本文件的常用命令
幻行,使用该sh
#!/bin/sh
#不可变变量
readonly 变量名
#删除变量,函数
unset 变量名
#数组
a[0]='a0'
a[1]='a1'
a[2]='a2'
#访问索引1
echo "${a[1]}"
#访问数组中的所有变量
echo "${a[*]}"
echo "${a[@]}"
#变量置换
#缺省值置换 param为空或未赋值,word取代param,param不变
${param:-word}
#缺省值赋值 param为空或未赋值,word赋值param
${param:=word}
#空值错误 如果为空,错误提示信息
${param:? 'msg'}
#有值置换
${parame:+msg}
#命令置换 命令获取的数据存放到变量中
DATE=`date`
#算式置换 完成简单的运算
echo $(( 5*2 ))
#输出命令的路径
type cmd
#睡眠时间 单位:秒
sleep 2
#find
cd ~ && find .. -name memcached -print 2>/dev/null
-name 文件名 可用正则
-type 类型
f 通常文件
d 目录
b 块设备
c 字符设备
l 符号链接
p 命名管道
-mtime 修改时间
-atime 访问时间
-ctime 改变时间
+n 大于n天 -n 小于n天 n 等于n天
-size 磁盘块
-exec 后面执行命令 得到的查询结果{}
cd ~ && find /home/zyl/tmp -name a.txt 2>/dev/null -print -exec rm -rf {} \;
find . ! \( -name memcached -o -type f \) -print 2>/dev/null
find ./ -size +100000k -print
--xargs
数据传递给后面执行命令充当参数
--expr 简单的整数运算
expr 1 + 2 #需要有空格 不然当成一个字符串
--expr 使用正则,返回匹配的字符数
abc=12345abc
expr $abc : '[0-9]*'
$(( 1+2 ))
--bc 计算器
bc
obase :输出进制
ibase :输入进制
printf
s:字符串
c:字符
d:十进制
x:十六进制
o:八进制
e:指数
f:固定浮点数
g:紧密浮点数
默认右对齐,-左对齐
printf "%16s\t%16s\n" "name" "user name"
printf "%16s\t%16s\n" "str1" "ranga"
printf "%16s\t%16s\n" "str2" "zhang"
{ date; uptime; who; } > a.txt
--同时在控制台和文件中输入
cmd | tee a.txt
ls << aa
-l
aa
--用户输入
read name
echo $name
--表示不输出输入的字符串
stty -echo
read name
stty echo #输出输入的字符串
--文件描述符 重定向
date 1>a.txt 2>&1
0:stdin
1:stout
2:sterr
>dev/null 表示丢弃输入文件
--定向到同一个文件
1>a.txt 2>&1
--关闭定向
6>-
--查看文件信息
file fileName
--超级链接
硬链接 ln src target
符号链接 ln -s src target
-- 前台进程变成后台进程,进程 ctrl+z 后输入bg变成后台运行。bg %1
-- 后台进程变成前台进程, fg %1
--一些不好后台运行的,关闭终端时候自动结束可以用 nohup 运行
nohup ls &
输出日志到 nohup.out
[tomcat@wxxyweb ~]$ ps -f
UID PID PPID C STIME TTY TIME CMD
tomcat 9545 9379 0 May29 pts/1 00:00:00 -bash
tomcat 9597 9545 0 00:07 pts/1 00:00:00 ps -f
uid:运行程序的账户
pid:进程标识符
ppid:parent pid
c:cpu占有率
unlabeled:精确值,优先级
STIME:启动时间
cmd 执行的命令
--shell 版本
echo $BASH_VERSION
echo $PWD;--路径
echo $UID;--用户编号
echo $SHLVL;--自动加1
echo $REPLY;--读到输入的第一行
echo $RANDOM;--0到32767的随机数
echo $SECONDS;--shell 启动的花费的时间
echo $IFS; --分离,不清楚
echo $PATH; --path路径
echo $HOME; --home
if [ "$a" = "start" ];then
echo "Start"
elif [ "$a" = "start2" ];then
echo "start2"
else
echo "no start"
fi
--判断文件
if [ -f /home/zyl/zyl.sh ];then
-b file 存在并且是块文件
-c file 存在并且是字符文件
-d path 存在并且是一个目录
-e path 文件或目录
-f file 存在并且是正规文件
-g path 存在文件夹并且设置了sgid
-h file 存在并且是链接
-k path 文件或目录存在,并且设置了粘泻位
-p file 存在并且是命名管道
-r path 文件或目录可读
-s file 文件大小大于0
-u path 设置了suid
-w path 可写
-x path 可执行
-o path 当前进程有效用户id所拥有
--字符判断 = 两边需要有空格
if [ "$a" = "$b" ];then
-z str 长度为0
-n str 长度不0
str1=str2
str1!=str2
--数字比较
if [ $a -eq $b ];then
int1 -eq int2 等于
int1 -nq int2 不等于
int1 -lt int2 小于
int1 -le int2 小于等于
int1 -gt int2 大于
int1 -ge int2 大于等于
--判断上一个命令是否执行成功,临时变量写入 $?
pwdd
if [ $? -eq 0 ];then
复合比较
!expr
expr1 && expr2
expr1 || expr2
--列子
! [ $a -eq $b ]
[ ! $a -eq $b ]
# -a = and
# -o = or
[ -d "$a" -a "$a" = "$b" ]
[ -d "$a" ] && [ "$a" = "$b" ]
--case语法
case "$a" in
"a") echo "aa";;
"b") echo "bb";;
*a*) echo "*a*";;
*) echo "default";;
esac
--while 语法
x=0
while [ $x -lt 10 ]
do
echo $x
x=`expr $x + 1` #`符号是在~按键上
done
输入重定向
while read LINE
do
case $LINE in
*root*) echo "root $LINE";;
esac
done < /etc/passwd
while : #无限循环
break,countinue
--until 直到 true 结束 和while相反
x=0
until [ $x -gt 10 ]
do
echo $x
x=`expr $x + 1`
done
--for 语法
for p in $*
do
echo "$i=$p"
i=`expr $i + 1`
done
for i in /home/tomcat/*
--select
PS3="select menu" #提示菜单
select com in c1 c2 c3 all none
do
case $com in
c1|c2|c3) echo "$com";;
all) echo "c1 c2 c3";;
none) break;;
*) echo "erro ";;
esac
done
--awk
BEGIN:awk开始执行,运行一次
END:awk运行到最后执行
--关键字
FILENAME:文件名
NR:行数
NF:字段数
OFS:输出字段分隔符 默认空格
FS:输出 默认空格和制表符号
OFMT:数字输出格式
ORS:输出记录分隔符 默认新起一行
RS:输入记录分隔符 默认新起一行
$1 表字段1 类推
USER_INPUT_PRICE=$1
awk '
BEGIN { FS=":"}
($2>price) && (1==1) { printf "%s %s %s\n", $1,",>",price; next}
$2<=price { printf "%s %s %s\n", $1,",<=",price; }
' price="$USER_INPUT_PRICE" b.txt
--awk if
USER_INPUT_PRICE=$1
awk -FS=":" '{
if(($2>price) && (1==1)) {
printf "%s %s %s\n", $1,",>",price; next
}else{
printf "%s %s %s\n", $1,",<=",price;
}
}' price="$USER_INPUT_PRICE" b.txt
--while 不推荐使用do while
while(x<NF){
printf "%s\n",$x;
x+=1;
}
--for
for(x=0;x<NF;x+=1){
printf "%s\n",$x;
}
awk 的while if for 类c设计
--特殊参数
$0 命令名称
$n 参数 从1开始
$# 参数个数
$* 所有的参数被双重应用
$@ 独立的双重应用
$? 最后一个执行命令的推出状态
$$ 进程号
$!最后一个后台命令的进程号
$- 输出字符包含 i 表示交互式脚本
#获取命令输入的参数
# ./zyl.sh -f a -o b -v c
verbose=false
while getopts f:o:v OPTION ;
do
case "$OPTION" in
f) echo "f=$OPTARG";;
o) echo "0=$OPTARG";;
v) echo "v=$OPTARG";;
\?) echo "????";;
esac
done
#别名
alias lsa="ls -a"
lsa
#取消别名
unalias lsa
--指定局部变量
typeset x=1
--输出唯一字符
uniq -c a.txt
--排序
sort -rk 1,2 b.txt
k:排序字段 1到2
-r:按逆序输出
-n:依照数值的大小排序。
-c:检查文件是否已经按照顺序排序。如果没有回提示。
-b:忽略每行前面开始出的空格字符。
--
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息。
--多个词的替换
sed '/zyl/ s/1/2/; /tomcat/ s/1/3/' b.txt
--d 表删除 sed '/tomcat/ d' a.txt
--q退出
top | sed '1,5 !d;5q'
--分隔 cut
cut -f1- -s --output-delimiter='|' -d, b.txt
-[b,c,f] 分别是:byte,char,field
-d,:以分隔符号:逗号
-s:去除没有分隔符的数据
--output-delimiter 输出的分隔符
--join 联合
join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt
-1 1 -2 2:相当于a.txt文件中的第一个字段,和b.txt表中的第二个字段
-o 1.1 -o1.2 -o 2.1 表示显示a.txt 中的第一二个字段,b.txt表中的第一个字段
-t,表示以逗号分隔
-a 1 表示不匹配的
join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt
--单个字符的处理 查询替换
tr '源字符' '' < a.txt > b.txt
tr '\r' '\n' < a.txt
tr 'a-z' 'A-Z' < a.txt
tr -s 'e' 连续e,替换成单个e
echo "a b"| tr '[:blank:]' ','
[:blank:] 表转义字符有
alnum 字母或数字
alpha 字母
blank 空格
cntrl 控制符
digit 数字
graph 可印刷字符,不包括空格
lower 小写字符
print 可印刷字符,包括空格
punct 标点符号
space 空格
upper 大写字符
xdigit 十六进制
--eval
output="> b.txt"
eval echo hell "$output"
--信号
SIGHUP 1 控制终端发起被挂着或控制进程死亡
SIGINT 2 键盘中断
SIGQUIT 3 来自键盘的推出信号
SIGKILL 9 杀死进程的信号
SIGLRM 14 定时时钟中断
SIGTERM 15 终止信号
--语法检测
/bin/sh -nv ./zyl.sh
--init
0 :关机
1 :单用户模式
2 :多用户模式
3 :网络多用户模式
4 :未用
5 :图像多用户模式或停机
6 :重启
--uname
a 所有信息
m 硬件类型
n 系统的主机名
r 发布的级别
s 操作系统的名称