实战Linux Shell编程与服务器管理


1.linux 定时任务添加
crontab -u root -e
0 6 * * * /home/shell/clearlog.sh   每天6点执行
*/10 * * * * /home/shell/clearlog.sh 每10分钟执行
2.bash --version 查看bash的版本编号
3.ssh -l root 192.156.161.69  ssh [email protected] 远程连接
4.file 文件路径 查询文件属性
5.通配符:
*:代表任意的字符串,可以是空字符串
?: 代表一个字符,但是不可以为空
6.前台工作、后台工作
1. ./my-work.sh &  将脚本扔到后台执行
2. 方法二:
1. ./my-work.sh
2. Ctrl+z 切到命令窗口
3. bg 将脚本扔到后台执行
4. jobs -l 查看在后台执行的命令
5. $1   调度第一个进程到前台 fg
6. Ctrl+c  结束进程
7.history 查看历史命令
8.fc -l 列出登录主机之后,最近执行过的命令
9.type 判断某一指令是什么?
10.shopt 设定Bash Shell 的行为模式
shopt\shopt -p 显示目前各选项的开关状态
shopt -s 选项 启用选项
shopt -u 选项 关闭选项
shopt -o 选项 使用和set -o相同的选项来设置
shopt -q 选项 不显示开关状态,0 开启 非0 关闭
11.which 命令 查询命令的PATH路径
12.who 显示现在谁登录主机
13.ln 链接文件
ln f1 f2 硬链接,将f2连接到f1
ln -s f1 f3 软连接
ln -sf f1 f3 如果存在,删除重建
14.find
1.find 路径 样式 操作   find / -name '*.txt'
15.tar
1.压缩文件
1.tar zcvf targetfile sourcefile
2.解压文件
1.tar zxvf sourcefile 
2.tar jxvf sourcefile
16.sort  排序
1.sort test.txt 将test.txt 做升幂排序
2.sort -r test.txt 将test.txt 做降幂排序
3.sort -n test.txt 将以字符串的数值大小为比较的标准
17.uniq  对已排序好的文件删除重复行
1.sort test.txt | uniq  删除重复行
2.sort test.txt | uniq -d 挑出重复行
3.sort test.txt | uniq -c 计算每一行重复的次数
4.sort test.txt | uniq -c >test2.txt  将结果输出到test2.txt
18.paste  对文件以行和行的方式合并
1.paste test.txt test2.txt  合并默认以Tab分割
2.paste -d'#' test.txt test2.txt 合并以#分割
3.
19.信号(signal)
1.进程编号
ps auxw    ps -ef
20.top命令
1.top 查看系统运行信息
2.top -n 1 查看系统运行信息 1次
21.nice命令
1.nice -n nice值 程序  设置某程序的优先级为?
22.history命令
1.!编号 执行命令
23.dialog 命令
1.dialog --msgbox "这个一个测试" 10 40  弹出msg窗口
2.dialog --backtitle "设置阶段" --title "注意" --msgbox "这是一个测试" 10 40 弹出msg窗口
3.dialog --yesno "要继续吗?" 10 40 弹出是否对话框
4.dialog --radiolist "这个一个list" 10 40 3 $list 2>$tmp
5.dialog --menu "这是个菜单" 10 40 3 $list 2>$tmp
6.dialog --inputbox "这是一个输入框" 10 40 "可以添加参数" 2>$tmp
7.dialog --passwordbox "这是一个密码框" 10 40 2>$tmp
8.dialog --gauge "安装进度……" 10 40 80  
9.dialog --checklist "这是一个核查列表对话框" 10 40 4 $list 2>$tmp
10.dialog --textbox test.txt 10 40 文件对话框
11.dialog --infobox "尚未完成准备工作喔" 10 40
12.dialog --timebox "调整时间" 调整时间对话框
13.dialog --pause "倒计时" 10 40 10 倒计时对话框
14.dialog --fselect test.txt 10 40
24.useradd 命令
1.useradd -D 查询用户信息
2.useradd -g 1007 -s /bin/bash -m joy
25.scp 命令
1.将远程主机中的文件复制到local主机
scp 账号@主机:/目录/文件 /目录/文件
2.将local主机中的文件复制到远程主机
scp /目录/文件 账号@主机:/目录/文件
26.uname 命令
1.uname -a 列出所有系统信息
27.列出系统内存使用情况
1.df
2.free
3.top
28.列出磁盘容量
1.fdisk -l
29.管理主机服务信道
1.chkconfig --list 列出所有的服务
2.chkconfig --list ssh 列出某一个服务 以ssh为例
3.chkconfig ssh on 开启某一个服务
4.chkconfig ssh off 关闭某一个服务
30.lsof 列出所有已开启的文件、端口
31.iptables 开启端口防火墙


二、Shell脚本之由易到难
范例1. Helloworld.sh
#!/bin/bash    #shellbian编程头部必须有
# 这是我们的第一个程序Helloworld.sh
echo "Hello world! Bash Shell!"


范例2. clearlog.sh 清空日志
#!/bin/bash
# 这是我们的第一个游泳的Bash Shell
cp /dev/null /home/was/logs/i2pay-center.log
范例3. test.sh
#!/bin/bash
#用途:这是一个简单的Shell示范程序,其中有函数,变量
show_name()
{
echo "今个儿是 $1,你 $2 大大,来自 $3"
}
#当前时间
time=$(date +'%Y-%m-%d %H:%M:%S')
#当前登录用户
name=$(env | grep USER | awk -F= '{print $2}')
#连接IP
ip=$(env | grep SSH_CONNECTION | awk '{print $1}' | awk -F= '{print $2}')
#调用函数
show_name "$time" "$name" "$ip"
#5秒钟后结束进程
sleep 5
范例4. show_passwd.sh
#!/bin/bash
#用途:这个Shell脚本用到了while_for循环,打印所有用户信息
IFS=':'
declare -A field_name=(用户名 口令 用户标识号 组标识号 用户名 用户主目录 命令解释程序shell)


while read f1 f2 f3 f4 f5 f6 f7
do
userinfo=""
j=0
for i in $f1 $f2 $f3 $f4 $f5 $f6 $f7
do
userinfo="$userinfo${field_name[$j]}=$i "
j=$((j+1))
done
echo userinfo >> /home/shell/passwd.log
done < <(cat /etc/passwd)
范例5. select.sh select列表
#!/bin/bash
PS4="请选择:"
select f in *
do
echo "你键入的编号是$REPLY,选择的文件是:$f"
done
范例6. shift.sh 执行shell时各位值参数的变化
#!/bin/bash
echo "\$@ 的初值:$@"
while shift
do
[ -n "$1" ] && echo "shift 1次,\$@ 的变化:$@"
done
范例7. 递归函数 Factor.sh
#!/bin/bash
#function 也可以使用递归功能
function factor_in()
{
local tmp
local tmp1
tmp=$1
if[ $tmp -eq 1 ];then
echo -n " 1 "
r=1
else
echo -n " $tmp * "
tmp1=$tmp
tmp=$(($tmp-1))
factor_in $tmp
r=$(($tmp1 * $r))
fi
}
if [ $# -ne 1 ];then
echo "请输入整数!"
exit 1
fi
echo
echo -n "$1! = "
factor_in $1
echo -n "= $r"
echo

三、Linux编程Script调试
1.检查Script的语法
Bash -v test.sh 
2.追踪Script的执行
Bash -x test.sh
3.开启内置命令shopt,可避免打错变量名称
shopt -s -o nounset
4.大写转小写
"ABCDEFGHIGK" | tr '[A-Z]' '[a-z]'
5.小写转大写
"abcdefghigk" | tr '[a-z]' '[A-Z]'
6.read获取控制台的输入
read -t 30 -p "请输入:" input    -t 数字 多少秒后结束
7.REPLY
select和read没有设定读取变量时,默认的变量REPLY
8.Linux 数组
1.定义
1.declare -a arr=(name sex size age)
2.declare -a arr2
arr2[key]=value
2.取值
${arr[key]}
9.文件转向输出
1.
cat < $file
content
here
2.
here加单引号'here'
变量不替换
3. 注释
:< content
bash-code
10.字符串
1.字符串截串
1.语法一:${变量:位置起点}
2.语法二:${变量:位置起点:长度}
2.计算字符串长度
${#变量名称}
3.获取字符所在的索引
$(expr "$str" : '.')
4.替换或删除字符串
${str/:/,}  把':' 替换为 ','  替换第一个
${str//:/,} 把':' 替换为 ','  替换所有
11.if条件判断
1.且 -a
[ -z $str1 -a -z $str2 ]
2.或 -o
[ -z $str1 -o -z $str2 ]
12. 挑出循环
continue 挑出本次循环
break  挑出当前循环体
13. 文件转向 (标准输入:0,标准输出:1,标准错误:2)
1.开启文件转向<> 输入输出转向
1.fd<>文件
2.exec 6<>文件  文件代码6


2.关闭文件代码
1.fd<&- 关闭输入文件
2.fd>&- 关闭输出文件
3.exec 6<&- 关闭输入文件代码
3.复制文件代码,建立文件连接
1.n<&m 转向输入的文件代码m,存成文件代码n
2.n>&m 转向输出的文件代码m,存成文件代码n
14.sed和awk 正则表达式
1. .一点代表一个字符
2. ^在行首
3. $在尾部
4. [...]字符集合
5. [^...]除了...
6. *出现0个以上
7. \{...\}指定符合的个数
[a-z]\{3,5\}  
8.sed '1,4d' file    删除1到4行数据
9.sed '/la/d' file   删除含有la的行
10.sed '/[0-9]\{3\}/d' file 删除含有3位数的行
11.sed '/la/!d' file 删除不含la的行
12.sed -n 's/la/oo/p' 将含有la字符替换为oo
13. 
15.建立FIFO文件
1.mknod myfifo p
16.搜索文件内容
1.grep -q 关键词 文件    -q不打印任何信息
17.文件校验 checksum
1.md5sum 加密
1.md5sum 文件>checksum值存盘
md5sum ps > ps.md5
2.检查checksum的值是否正确
  md5sum -c ps.md5
2.sha1sum 加密
1.sha1sum 文件 > checksum值存盘
sha1sum ps > ps.sha1
2.检查checksum的值是否正确
sha1sum -c ps.sha1
18.邮件通知
1.echo 邮件内容 | mail -a 发信人email地址 -s 邮件主题 收信人email地址
echo "这是一封测试邮件" | mail -a  -s "测试一下" [email protected]
2.启用Mail Server服务
service postfix start       日志:/var/log/mail.log
19.Linux rpm
1.rpm 卸载
1.rpm -e --nodeps 卸载软件包
2.rpm -qR 查看软件包依赖
20.安装Apache服务器
1.检查该环境中是否已经存在httpd服务的配置文件,默认存储路径:/etc/httpd/httpd.conf(这是centos预装的Apache的一个ent版本,一般我们安装源代码版的Apache)。如果已经存在/etc/httpd/httpd.conf,请先卸载或者关闭centos系统自带的web服务,执行命令:chkconfig  httpd off,再或者把centos自带的httpd服务的80端口改为其他端口,只要不与我们安装的Apache服务的端口冲突就可以啦。
停止并卸载Linux系统自带的httpd服务:
1、service httpd stop
2、ps -ef | grep httpd
3、kill -9 pid号(逐个删除)
4、rpm -qa |grep httpd
5、rpm -e httpd软件包
2.下载Apache安装包(httpd-2.4.3.tar.gz或httpd-2.2.23.tar.gz),下载地址:http://httpd.apache.org/
在安装Apache时,我分别针对不同版本进行了安装,在编译时是不同的,configure后跟的参数不同。
httpd-2.2.23版本编译命令:
1. ./configure --prefix=/usr/local/apache2 (安装目录参数后面可以不加任何参数,直接安装即可)
make
make install
httpd-2.4.3版本编译命令:
1. ./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr
--with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre (除了指定Apache的安装目录外,还要安装apr、apr-util、pcre,并指定参数)
make
make install
3.在编译Apache(在安装httpd-2.4.3时遇到的问题)时分别出现了apr not found、APR-util not found、pcre-config for libpcre not found的问题,下面就httpd-2.4.3的这些问题解决来实际操作一把。
http://apr.apache.org/download.cgi  下载apr-1.4.5.tar.gz、apr-util-1.3.12.tar.gz
http://sourceforge.net/projects/pcre/files/latest/download 下载pcre-8.31.zip
1.解决apr not found问题
[root@localhost bin]# tar -zxf apr-1.4.5.tar.gz
  [root@localhost apr-1.4.5]# ./configure --prefix=/usr/local/apr
  [root@localhost apr-1.4.5]# make
  [root@localhost apr-1.4.5]# make install
  2.解决APR-util not found问题
  [root@localhost bin]# tar -zxf apr-util-1.3.12.tar.gz
  [root@localhost apr-util-1.3.12]# ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config
  [root@localhost apr-util-1.3.12]# make
  [root@localhost apr-util-1.3.12]# make install
  3.解决pcre-config for libpcre not found问题
  [root@localhost ~]# unzip pcre-8.31.zip
  [root@localhost ~]# cd pcre-8.31
  [root@localhost pcre-8.31]# ./configure --prefix=/usr/local/pcre
  [root@localhost pcre-8.31]# make[root@localhost pcre-8.31]# make install
  4.如果已经存在/etc/httpd/httpd.conf,请先卸载或者关闭centos系统自带的web服务,执行命令:chkconfig  httpd off,再或者把centos自带的httpd服务的80端口改为其他端口,只要不与我们安装的Apache服务的端口冲突就可以啦。
•启动Apache:/usr/local/apache2/bin/apachectl start
•停止Apache:/usr/local/apache2/bin/apachectl stop
•重启Apache:/usr/local/apache2/bin/apachectl restart


四、Linux 问题处理
1.rpm安装 linux/centos Header V3 DSA signature: NOKEY, key ID
解决:rpm -ivh db4-devel-4.3.29-9.fc6.i386.rpm --force --nodeps

转载于:https://my.oschina.net/u/2250275/blog/649134

你可能感兴趣的:(实战Linux Shell编程与服务器管理)