一、一些linux的快捷键
ctrl+a 移动光标到行首
ctrl+e 移动光标到行尾
ctrl+u 删除光标到行首的内容
ctrl+k 删除光标到行尾的内容
ctrl+方向键 一次移动一个单词
二、文件名通配
* 匹配任意长度的字符
?匹配任意的单个字符
[] 范围的匹配,指定范围内的单个字符
[0-9] 连续的字符0到9中选择一个
[a-z] 连续的字母a-z中选择一个
[:plpha:] 取中括号里面的范围
文件名通配 想引用用[[:plpha:]]
三、用户的家目录
~ 代表当前用户的家目录
ls ~redhat 查看redhat的家目录
四、shell简单介绍
bsh bourn在bell实验室开发,是通用的标准的shell
cshbill joy c语言开发
kshkron 融入了csh
bourn again shell bash 重新写(GNU)
zsh 刚刚诞生 功能比bash更强大
2、shell的几种变量
编译类:源代码——>目标代码(编译器)c c++ JAVA
脚本类:源代码,(解释器,bash),
perl 5.8 python
ruby (on rail),shell
变量:(容器) 命名的内存空间
bash:分为几种变量
本地变量
环境变量
位置参数变量
特殊变量, $?
3、变量引用
变量的声明与赋值直接name=jerry
set class=3
unset class
unset name
变量引用:取变量值 "" '' ``
"" 弱引用 可以替换变量
' ' 强引用 不能替换变量
`` 命令引用 ``=${}
echo -e 换行
echo -e "
printf "$s\n",$name n换行
4、几种变量的举例
name=tom
echo ${name}s
toms
FILE=`ls /root`
echo $FILE
cp /etc/fstab /root/fstab-`date "+%H-%M-%S"`
拷贝文件的时候加上时分秒
export,导出, 输入
HISTSIZE HISTFILE HISTFILESIZE 系统自定义变量
五、别名
alias mntcd='mount /dev/cdrom /media/cdrom'
unalias cdmntcd #取消自定义的别名
自定义的别名只对当前的shell生效
touch \*.txt
cat *.txt 显示三个文件的内容 (有三个文件以txt结尾)
cat \*.txt 显示*.txt文件的内容
echo \*.txt
六、命令的调试
#!/bin/bash
set –x #开启调试,跟踪命令
ls /var /etc
set +x #关闭调试,追踪命令
echo $USER
调试一部分命令
还可以用bash -x a.sh 进行对脚本的调试
七、脚本的小应用
A=$((1+1))
echo $A
2
a=$((2*3))
echo $a
6
2、位置变量
#!/bin/bash
sum=$(($1+$2))
echo $sum
bash a.sh 2 6
8
echo "2/6"|bc
echo "1+1"|bc 将前面的传递到后面进行运算
3、/etc/profile /etc/profile.d/* /etc/bashrc 存放系统变量的配置文件
/etc/profile-->/etc/profile.d/*-->~/.bashrc--/etc/bashrc
八、重定向
< 输入重定向 > 输出重定向 >> 追加
标准输出:monitor,1 1> 标准输出重定向
标准错误输出:monitor,2 2> 标准错误输出重定向
&> 正确的错误的都重新定向
set -C 如原文件有内容,禁止覆盖内容
set +C 如原文件有内容,可以覆盖内容
>> 追加重定向
2>> 错误信息重定向
九、tr,tee,exec命令
tr 'a-z' 'A-Z' 把所有的小写转换成大写字母
echo 'abcd' | tr 'a-z' 'A-Z'把abcd换成大写
tee命令 丁字重定向,把一部分内容重定向
echo 'abcd' |tee /tmp/tee.out| tr 'a-z' 'A-Z'
ABCD
cat /tmp/tree.out
abcd
exec 3>/tmp/custom.out 定义文件名3 文件描述符
ls /etc/ >&3 重定向到3等于输入到了/tmp/custom.out
cat /tmp/custom.out
exec 3>&- 关闭3 不关闭会占用内存空间
exec 提高脚本输出效率
less -m(-M) /etc/rc.d/rc.sysinit 报告当前所在的行号,和总行号
tail -f /tmp/ls.out2 动态显示文件最后几行的内容
十、grep命令
grep 全面搜索正则表达式,并打印
patterm 模式,从文件匹配整个模式。而后显示包含了匹配到的内容的行
grep
-v 表示反向匹配,不匹配的显示出来
-i 查找的时候忽略大小写
-n 在匹配的结果中只显示有限范围的行
-An 表示匹配的行在显示几行 (-A2)
-B 显示匹配的前面的
-C2 匹配的中间显二行
--color=auto 自动加颜色
export GREP_CLOR='01;34'改变匹配字符的颜色 # 3表示前景色4表示背景色
1、grep --color=auto 'root' /etc/passwd
在文件中搜索含有root的并以颜色显示
grep --color=auto 'r.t' /etc/passwd
搜索以r开头t结尾中间是任意一个字符
grep -E =egrep
egrep
? 0,1 a?root broot 可以匹配root ?表示匹配时候a可有可无
fgrep fastgrep =grep -f
正则表达式
基本表达式,扩展正则表达式(-E)
元字符
. grep 'f..t' /etc/passwd #中间匹配二个字符
* 次数匹配 a*root,abroot,aaroot,aroot
*代表匹配出现0到多次abroot不匹配
.* 代表任意长度的字符
grep --color=auto 'r.*t' /etc/passwd
以r开头中间任意最后以t结尾
r.\{2\}t 中间明确规定匹配二个字符
r.\{0,2\}t 中间规定可以匹配0到二个字符
r.\{2,\}t 中间可以匹配二个字符以上
grep "^root" 查找以root开头的
grep "root$" 以root结尾的
\< grep "\<root\>" 查找匹配root单词的匹配
\> grep “root\>” 以root单词结尾
十一、cut,wc.sort.uniq命令的简单用法
1、cut -d: -f1 /etc/passwd
cut指定分隔符,(以冒号区分)切割第一段的内容
ifconfig |grep "inet addr" |cut -d: -f2
cut -d' ' -f1 以空格分割的第一段
cut -c2-6 分割地二个字符到第六个字符
2、wc统计
wc -c 统计字节
wc –l 统计行数 wc -l /etc/passwd #统计/etc/passwd文件里一共多少行
3、sort,排序
sort /etc/passwd 手动对文件排序,(默认安a到z)对原文件没有影响
sort -o 输出到/tmp/passwd.sort
-r 逆序排序
-n 1,2 以数值排序(文件里有数字)
-f 忽略大小写
-u 去除重复的行
-t 指定分段
-k 指定段
srot -n -t : -f 3 /etc/passwd #指定第三段忽略大小写以数值排序
4、uniq 去除重复的挨着的行
sort sort.txt |uniq sort.txt
uniq -c 可以显示每一行所被重复的次数
uniq -u 只显示不重复的行
uniq -d 只显示重复的行
十二、脚本基础
-h/-L file ;测试一个文件是否是符号链接文件
-O file ;测试文件属主是否是你
-G file ;测试文件的属组是否是你
test 1 -gt 2
echo $?
[3 -gt 1]
echo $? 0
test -e /etc/issue
echo $? 0
test -f /etc/issue -o -d /etc/issue
-f 文件 -o 或者 -d 目录
test -f /etc/issue && -d /etc/issue
test -d /etc/issue && mkdir /tmp/haha
前面为假后面不执行
或 如果前面为假则执行后面,如果前面为真则不执行后面
-a 与 && 当前面的为假后面不执行(前边为真才执行后面)
-o 或 || 如果前面为假则执行后面
! 非
[$a -gt $b ] && echo "$a is max" || echo "$b is max "
a与b比较如果a是大的则显示a is max 否则显示b is max
简单脚本测试数字的大小
#!/bin/bash
[ $1 -gt $2 ] && echo "$1 is max" || echo "$2 is max"
十三、diff,sed的用法
1、diff 比较二个文件的内容
diff a.txt a2.txt diff -u a.txt a2.txt
2c2
diff a.txt a2.txt > a.txt
patch a.txt < a.txt 补补丁
patch -R a.txt .< a.txt 把补丁补回去
patch -p1 把补丁前面的一个目录去掉
patch -p2 把补丁前面的二个目录去掉
2、aspell check 文件名字 检查文件的单词是否错误
look 单词 查找以某一个单词开头的单词
3、sed 非交互式的流编辑器(行编辑器) 不修改原文件,没有破坏性
sed -i 直接诶对原文件进行修改,替换 -i写在后面表示不区分大小写
-e 同时指定多个操作
-n只显示匹配到的并被处理的内容
-a 在某一行的前面加上特定的内容
-s 用一个字符串替换另一个 s///分隔符
-f 读取某一个文件的内容并进行替换
/p 打印出来
sed '/root/p' (p把它显示出了)/etc/passwd
搜索/etc/passwd中包含root的行数并把它显示出来
sed 's/root/ROOT/' /etc/passwd
搜索/etc/passwd包含root的行并替换成大写
1,6s/root/ROOT/g
指定第一行到第六行root替换大写(默认全文替换)
10,$s/root/ROOT/g
第十行到最后替换
sed 's/ftp:\/\/instu.com/public\/\/\/media/cdrom/g
用\作为分隔符把/分开
-------------------------------------------第九章---------------------------------------
一、模式化的文本编辑器
Vi的③种模式:命令模式,输入模式,末行模式
vim +10 /etc/passwd 打开/etc/passwd让光标处在第十行
vi +/redhat /a.txt #打开含有redhat的行
2、命令模式下的光标移动
h(右),j(下),k(上),l,(右)
^ 移动光标到行首
0 绝对行首,包含空格
$ 绝对行尾
w (word)一次移动一个单词,移动到下一个单词的词首
b 如果光标在当前字母词首则移动到上一个单词的词首,如果没有在词首则移动到单词首部
e 行间移动
G 最后一行
1G或者 gg移动到第一行
末行模式 :5 跳到第五行
段间跳转 }{
句间跳转 )(
3、光标插入
i 在当前光标所在处插入
I 在当前光标所在行的行首
a (append) 在当前光标出的后面插入
O 在当前所在行的上方插入
o 在当前光标的下方插入
4、命令删除
C 删除光标所在行
3cc 删除三行
c 删除一个单词
c( 删除到句首
c} 删除到段尾
r 单词替换
x 删除光标所在处的后面的字段
X 删除光标所在的前面的内容
d 删除行 dd删除一行 3dd删除三行
5、复制粘贴
y$ 复制光标到行尾
p (复制一行)粘贴到光标的下一行,如果复制一段内容,则粘贴到光标的后面
P 在粘贴到上一行
:10,100y 复制10-100行内容
:.,+100d 删除当前光标行到下面100行内容(.表示当前行)
:%d 表示删除全文
6、可视模式
v 以字符为单位选中
V 以行为单位选中
选中后可以删除或者复制
7、查找与替换
/\$[[:upper:]]\{1,\}
查找以$开头的以大写字母开头的单词
:addr1,addr2s///g
:%s\<redhat\>/REDHAT/gi
查找redhat并替换成大写的REDHAT
:%s/^#//g 去除#号
:%s/^[[:space:]]*#[[:space:]]*//g # 去除#号
:%s/^[[:space:]]*#[[:space:]]*.*//g # 去除以#号开头的行
%s/^[[:space:]]*[^[:space:]] # 去除#号和空格
8、撤销操作
u(undo)撤销上一次的操作
U 最近一次的所有操作(默认保存五十次)
ctrl+r 取消撤销
(redo).重做上次的命令
9、vim打开多个文件
vim a.txt b.txt
:prev 前一个文件 :next打开后一个文件
:first第一个文件 :last打开最后一个文件
vim -o a.txt b.txt #水平打开多个窗口
vim -O #垂直打开多个出口
打开多个切换到另一个用ctrl+ww 关闭一个用close
10、末行模式下输入set打开所有可用的项目
set nu #显示行号
想永久保存显示行号,在自己的家目录下创建~/.vimrc隐藏文件,文件里写set nu
set autoindent 自动缩进
showmatch 显示匹配的括号
11、vimtutor自己练习vim
————————————————第十章———————————————
一、基本的概念介绍
管理进程是系统工程师的职责之一
进程:活体的,是程序的副本
虚拟内存空间(硬盘交换空间);线性,32bit,任何4G
系统角度;
进程名,PID
init进程号永远是1 initial 1
init 1
clone 2 所有进程都是由父进程的产生的
cpu time,进程调度,进程优先级
进程间通信,IPC
信号
share memory(共享内存)
socket
cpu密集型,IO密集(优先级稍高)
二、查看进程
sys V (非常经典的unix)后来发展二大分支-->Berkeley.BSD
1、查看进程命令
Berkeley风格 ——> ps -ef
BSD风格 ——> ps aux
ps 默认显示当前用户正在运行的进程
daemon 守护进程,服务进程
调度进程(在未来一段时间运行的程序)
前台进程
ps -e
? 表示后台进程,与任何用户或tty都无关
CMD 是发起命令是什么
ps -ef(-eF大F内容详细)
[]表示内核线程(thread)
PID 进程号
PPID 父进程(这个进程有谁发起)
C 表示cpu占用时间
SZ 占用虚拟内存空间
RSS 占用物理内存大小
STIME 进程运行时间
PSR 在哪个cpu上运行
pstree 查看当前系统的进程树
ps -ejH 以作业(job)形式显示,可以显示进程数(标准风格)
ps -axjf (x前台进程)
ps -ef -eF aux
ps -eo(o自定义显示进程的字段)
ps -eo pid,%cpu,comm 显示cpu pid 运行命令
ps -eo comm,tty |grep 'tty/1' 显示tty1进程
pgrep 查看进程
pgrep -U root 查看root用户进程 -G组进程
ps -U root pd
pidof 显示某一个进程是进程号
三、进程
< 表示高优先级的进程
N 表示低优先级的进程
s 会话的发起者
+ 表示前台进程组中的进程
l 表示多线程的进程
四、进程状态
运行态(R)running
就绪态(R)runnable
停止态(T)stopped
睡眠态 sleep可中断的睡眠(S),不可中断的睡眠(D)
僵死态(Z)
五、终止进程
IPC:信号
kill -l kill主要用来给一个进程发送信号
man 7 signal
kill -n PID
kill -SIGKILL PID
killall -n(数字)进程名,跟一个发起进程的命令
pgrep 进程 #查找进程号 pkill 进程名 终止某一个进程
静态优先级,动态优先级
0--99 100-139
六、nice值
1、ps -o comm,nice 查看进程的优先级
-20,19数字越小优先级越大
2、两种方式调整进程的优先级
nice -n N base
renice 重新调整优先级
nice -n 3 bash 把bash优先级调低
3、gnome-system-monitor 图形界面查看动态进程
top 用于动态查看进程
top -d 10 每十秒钟刷新一次
top -b batch mode 数据保存下来
top -n 2 在-b模式下一共显示几批
七、作业管理
firefox 打开火狐浏览器
firefox & 后台运行
jobs 显示后台运行作业
fg 把后台作业调到前台
fg 2 把第二个后台作业调到前台
bg 让后台停止的作业继续运行
kill -9 %3 杀掉第三个作业,%不可少
nohup cp /etc/tmp/ -r & 后台的作业在退出的时候不终止