首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux bash(二)

2012-07-02 
linux bash(2)dlp8410@126.com十三、 linux系统状态检测及进程控制1 查询当前系统的信息2 查询当前系统的状

linux bash(2)
dlp8410@126.com

十三、 linux系统状态检测及进程控制

1 查询当前系统的信息
2 查询当前系统的状态
3 /proc文件系统??? 查看内核
4 进程的显示
5 控制进程
6 控制台的前台和后台


系统信息的收集:
hostname 显示或设置主机名
uname?? 显示系统信息
last?? 显示最近的用户登录
lastlog?? 显示每个用户的登录情况

系统状态:
/proc文件系统
free?? 查看内存的使用情况
df?? 查看硬盘使用情况
du?? 查看文件大小
系统日志 tail - f /var/log/messages

常用系统日志:
/var/log/dmesg?? 核心启动日志
/var/log/messages 系统报错日志
/var/log/maillog 邮件系统日志
/var/log/boot.log 系统引导过程日志
/var/log/cron?? 记录守护进程派生子进程
/var/log/syslog?? 记录警告信息
/var/log/wtmp?? 永久记录用户登录事件
/var/log/xferlog 记录FTP会话
/var/log/secure?? 安全信息??

常见查看日志的方法 tail /var/log/....

了解进程:
系统通过进程来完成工作
每一个进程都有一个独立的进程号,系统通过调用进程号来调度操控进程
系统和原始进程是init init的PID总是1
一个进程可以产生另一个进程,除了init以外,所有的进程都有父进程

linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性
交互进程 由一个shell启动的进程,交互进程可以在前台运行,也可以在后台运行
批处理进程 这种进程和终端没有联系,是一个进程序列
监控进程 也称守护进程,linux系统启动时启动的进程,并在后台运行。

一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令
作业控制指的是控制正在运行的进程的行为

查看进程状态:
ps [option] 常用参数
?? -a 显示所有进程,但不包括不隶属于任何一个终端的进程
?? -u 显示不属于任何一个终端的进程,诸如各类系统网络服务的后台程序
?? -l 以长模式显示进程信息
?? -u 显示进程的拥有者信息
?? 在ps的参数中,是否加 - 号,表示不同的参数

????? ps显示中的stat,
?? R 正在运行
?? S 进程睡眠中,通常可以因事件发生而被唤醒
?? T 进程已停止
?? D 进程睡眠中,除非发生指定事件,否则不会被唤醒
?? Z 僵尸进程,例如未能被父进程回收的子进程。通常是一个系统BUG或非法操作
?? < 高优先级进程
?? N 低优先级进程
????? ps选项
?? -e 显示所有进程
?? -f 全格式
?? -h 不显示标题
?? -l 长格式
?? -w 宽输出
??
?? a 显示终端上的所有进程,包括其他用户的进程
?? r 只显示正运行的进程
?? x 显示没有控制终端的进程
??
?? --help?? 显示帮助信息
?? --version 显示命令的版本信息

pstree?? 以树状方式表现进程的父子关系
top?? 系统监控工具
按 M 以内存排序
?? k 杀掉某个进程
?? ? 帮助
?? >< 翻页
?? r 设置优先级
?? q 退出TOP命令

控制进程:
kill [-signal] PID 向进程传送一个特定的讯号 默认为15(终结)

kill -l?? 列出所有可以由kill传递的讯号
killall
skill
pkill

进程优先级:
进程俦级 用nice值来表示
nice以一个不同的nice值来运行指令 nice -n -num command
renice改变运行进程的nice值?? renice -n PID
????? renice -n -10 1 调整优先级
控制台的前台和后台:
命令默认在前台运行
但控制台可以都允许多个后台进程,如 find / -name aaa & 直接运行在后台

进程放入后台运行:
command &?? 将进程直接丢入后台运行
ctrl+z??? 将正在运行的前台进程暂停,并丢入后台
nohup command &?? 在shell退出后进程仍执行,作为系统进程

控制台的任务:
jobs?? 显示系统当前后台任务列表
kill %n?? 控制第1个任务
fg?? 将后台进程放入前台,并运行
bg?? 激活后台暂停的进程

十四、 BASH使用详解

1 shell概念
2 linux下的shell种类与用户shell的控制
3 bash的使用
4 bash的常见技巧与快捷键
5 bash的变量使用
6 常见的bash变量使用
7 bash运算符
8 使用启动脚本定制bash

shell简单介绍:
shell环境
shell产生与发展
shell的显著特点: 命令行解释
??? 使用保留字
??? 使用shell元字符(通配符)??
??? 可处理程序命令
??? 使用输入输出重定向和管道
??? 维护一些变量
??? 运行环境变量
??? 支持shell编程

bash介绍:
系统中的shell
改变用户使用的shell
bash命令概要: 如下是几个最常用的bash内部命令
?? alias?? 设置bash别名
?? bg?? 使一个被挂起的进程在后台继续执行
?? cd?? 改变当前工作目录
?? exit?? 终止shell
?? export?? 使变量的值对当前shell的所有子进程都可见
?? fc?? 用来编辑历史命令列表里的命令
?? fg?? 使用一个被挂起的进程在前台继续执行
?? kill?? 终止某个进程
?? help?? 显示bash内部命令的帮助信息
?? pwd?? 显示当前工作目录
?? unalias?? 删除已定义的别名
?? bash还有许多命令,但这些是最常用的,想了解更详细的情况,可以man bash???
???
bash变量: 这里有几个最有用的bash变量
?? 包括变量名和简单描述
?? HISTFILE 用于贮存历史命令的文件
?? HISTSIZE 历史命令列表的大小
?? HOME?? 当前用户的用户目录
?? OLOPWD?? 前一个工作目录
?? PATH?? 寻找可执行文件的搜索路径 ~/.bash_profile
?? PS1?? 命令行的一级提示符
?? PS2?? 命令行的二级提示符
?? PWD?? 当前工作目录
?? SECONDS?? 当前shell开始后所流逝的秒数

bash的特性:
1 命令补齐——TAB键
2 有很多快捷键
3 通配符
4 命令历史记录 history
5 别名 命令别名通常是其它命令的缩写,用来减少键盘输入
6 输入重定向 <
7 输出重定向 >
8 管道?? |
9 提示符
10 作业控制(JOB CONTROL)
11 用户化配置bash

bash变量快捷键:
1 TAB:?? 自动补完命令行与文件名
2 TAB键双击: 可以列出所有匹配的选择
3 Ctrl+c: 结束当前的任务
4 Ctrl+z: 当前任务暂停,并放在后台
5 Ctrl+s: 停止屏幕输出
6 Ctrl+q: 恢复屏幕输出
7 Ctrl+l: 清屏
8 Ctrl+d: 标准输入结束
9 Ctrl+r: 追踪命令

bash在控制台下的其他快捷键:
ctrl+u 删除光标以前的所有字符
ctrl+d ?????? 一个字符
ctrl+k 删除光标以后的所有字符
ctrl+h??????? 一个字符

ctrl+t 调换光标前两个字符的次序

ctrl+a 移动光标到最前面
ctrl+e??? 最后面

ctrl+p 上一个命令
ctrl+n 下一个命令

ctrl+f 移动光标到后一个字符
ctrl+b 移动光标到前一个字符

ctrl+x 标记一个位置
ctrl+c 清除当前的输入?? (常用)


使用BASH命令历史: history命令可查询历史操作命令
??? 命令历史中的命令可以被调用
??? .bash_history中的命令数目由HISTFILESIZE这个变量来决定
??? history表存储在内存内。用户logout时会记录到用户主目录中.bash_history文件

??? # history
??? # set |grep HIS
??? # history -c 清除命令历史

使用历史命令: 使用!来调用历史指令
?? ctrl+r在history中查询指令
?? !$ 获得前面命令行中的最后一项内容
?? !! 重复执行上一条命令
?? !a 重复执行上一条以a为首的命令
?? !100 重复执行第100号命令

bash的变量类型:分环境变量和普通变量
?? 环境变量:可以被子shell引用的变量
?? 普通变量:只在当前shell中有效

set?? 显示环境变量和普通变量
env?? 只显示环境变量
export?? 把普通变量变成环境变量
unset?? 可以删掉一个变量

alias别名: 为命令定义简单的别名
?? unalias取消别名记录
?? alias记录在shell中总是先执行

bash中的运算符:已经接触过的通配符* ? [abc] {a,b,c}等
?? 一些运算符,
???? 如echo $PATH中的$
???? !10???? 中的!
另外我们还要学习以下运算符
! !20 !! !$ $AAA * ? [abc] [^abc] {a,b,c} & ~ # %1 ^ "" '' `` \ ; = < > $$

[ ] 加空格有来表示判断 ,判断条件: -f 文件
????? -l 链接
????? -d 目录
????? -c 字符型文件
????? -b 块设备文件
????? -x 执行文件
????? -r 只读文件
????? -w 可写文件
??? man bash可查
&& 当前一条指令执行成功时再执行后一条指令
||??? 失败时再执行
$$ 显示pid

定制你的bash:
在bash中定制的:命令历史、变量、umask、选项 set -o、alais等
只在当前shell有效,再次打开将恢复成原来shell启动脚本中定义的样子

bash的启动脚本:
全局设置文件: /etc/profile
?? /etc/bashrc
用户设置文件: ~/.bash_profile
?? ~/.bashrc
???
bash的其它配置脚本:??????
?? ~/.bash_logout
?? ~/.bash_history logout时将内存history记录写入
?? /etc/profile.d/*.sh


十五、 shell脚本编程详解

1 什么是shell脚本编程 其它脚本php,jsp,asp,
??? 系统是由shell脚本搭建的,如/etc/rc.d/rc.sysinit或services命令
??? shell脚本一般是ASCII码的文本,可以直接编写
脚本中的#表示注释,但是第一行中的#有特殊意义:
如果第一行中:
第一个字符非#:表示这是一个BASH脚本
第一个字符是#,但第二个字符不是!:表示这是一个csh脚本
第一个字符是#,且第二个字符是!:表示调用其后指定的某个程序来执行以下的这个脚本。如#!/usr/bin/python2.2


2 脚本的执行方式
3 脚本的常见流程控制
4 脚本的编写
5 sed及awk的使用

shell脚本: shell script
?? unix系统的原则有一条:UNIX系统和程序都比较短小,避免交互
?? 所以在完成复杂任务时需要把短小命令组合起来使用,怎样组合呢?就是用shell脚本

shell script通常为text文本文件,shell的脚本最善长用来完成系统管理工作;

shell 有很多种,不同的shell语法是不相同的,如csh的脚本bash不一定可以用

shell脚本可以进行多种形式的交互

整个系统都是由shell脚本来串连的

甚至很多命令就是shell脚本 service 命令、startx命令等等

shell中正则表达式:
正则表达式简介
grep和正则表达式
vi和正则表达式

与shell脚本进行交互:
可以使用参数来传递内容 $1 $2 $3
可以使用命令来进行交互 read 读入数据给变量
??? echo 输出数据
??? printf 输出数据

echo "this if input & output!"
read -p "this is read,please input:"readmem
echo "this is echo:$readmem"
printf "this is printf %s" $readmem

shell脚本执行:
输入脚本的绝对路径或相对路径
/root/backup
./backup

bash脚本或tcsh脚本
表示以bash或tcsh来执行脚本 bash /root/backup
再脚本的路径前加 .?? . ./backup
???? . /root/backup
bash脚本中的流程控制:
条件判断控制
[] && ||
if
case
循环控制
while
utile
for
break
continue

[ ]
echo $?


vi /etc/rc.d/rc.sysinit
vi /etc/rc.d/init.d/httpd
bash -vx ./b 编译

[]在bash 可以判断真假,

[ $USER = "ding" ] && echo hello ding
[ -f /bin/ls ] && /bin/ls
[ $USER = "ding" ] || echo hello root

-e file已经存在
-f file普通文件
-s file大小不为零
-d file是一个目录
-r file对当前用户可以读取
-w file可写
-x file可执行
-g file的GID标志被设置
-u file的UID标志被设置
-O file是属于当前用户的
-G file的组ID和当前用户相同
file1 -nt file2 文件file1比file2更new
file1 -ot file2 文件file1比file2更old

数值比较时的运算符:

-eq =
-ne !=
-gt >
-lt <
-ge >=
-le <=
-z 为空
-n 不为空


条件判断控制语句if:
if 条件
then 动作
elif 条件
then 动作
else
动作
fi

例子:
if[ $1 = "hello" ]
then
echo "hello!hahah"
fi

if [ $1 = 1 ]; then
if [ $2 = 2 ]; then
?? echo ok
fi
fi

条件判断控制语句CASE:
case 表达式 in
匹配值1)
?? 动作;;
匹配值2)
?? 动作;;
*)
?? 动作;;
esac

例子:
case $1 in
root)
?? echo "hello root"
?? ;;
ding)
?? echo "dear i miss you"
?? ;;
*)
?? echo "where are you"
?? ;;
esac

循环控制语句for:
for 变量 in 数组
do
?? 动作
done
for,变量自动去数组中取值,每取一次值执行一次循环,
例子:
for i in 1 2 3 4 /etc/*rc
do
?? echo $!
done

循环控制语句while:
while 条件
do
?? 动作
done
while,当条件为真时,执行do和done间的循环
例子: aaa=0
while [ $1 = "ok" ] && [ $aaa -lt 10 ]
do
?? aaa=$[$aaa+1] 执行运算
?? echo "$aaa "
done

循环控制语句until:
until 条件
do
?? 动作
done
例子:
aaa=0
until [ $aaa -gt 9 ]
do
?? aaa=$[$aaa+1]
?? echo "$aaa "
done
与while循环只是条件相反

函数的使用:
bash 中的函数定义非常简单
使用:
myfunction()
{
}
取消函数或变量时使用: unset myfunction

例子:计算整数平方的例子
square(){
aaa="$1*$1"
return $aaa
}
square $1
result=$?
echo $result

exit 0


sed:?? 流编辑器 stream editor
?? sed编辑器是linux 系统管理员的工具包中最有用的资产之一
?? sed非常适合脚本中使用,因为不需要进行交互
?? 流编辑器非常适合执行重复的编辑,比如替换文件中的词语等。

使用sed进行替换: sed 's/{old value}/{new value}/'
多次替换: sed -e 's/mike/todd/' -e 's/good/better/'
??? sed 's/tiger/wolf/; s/after/before/'

了解sed脚本: 编辑内容可以写成脚本
?? 脚本是包含sed命令的文本文件
?? 执行命令列上的编辑指令
??? sed编辑指令
??? 执行档案内的编辑指令
??? 执行多个档案的编辑
??? 执行sed输出控制
info sed
man sed

awk的使用: awk是一种用于处理文本的编程语言工具
?? unix/linux功能最强大的数据处理引擎
?? 可以在匹配的行上执行特殊的操作
?? shell中最常用于截取文本中某一段数据
awk程序: 规则通常由新行来分离
?? 规则包含一个模式和在{}内包含的操作
???? pattern {action}

运行awk程序: 简单的程序可以在命令行下直接输入:$awk 'program' input file
?? 更长的程序保存在文件中 $awk -f program_file input_file
awk实例: 用awk搜索文件/etc/passwd中包含"bash"字符串的行
??? $awk '/bash/ { print }' /etc/passwd
更加复杂的awk实例: 统计/project目录下所有属于用户joshua的文件的总大小
??? #ls -l /project |awk '$3=="joshua" {\sum+=$5 } END {print sum }'
何时使用awk: 从大量的原始数据中产生报告
?? 从其它程序的输出中总结信息
?? 当你需要一个又小又快的文本处理程序的时候

热点排行