总结现学的所有命令(RH033),以及相关概念。(二)

来源:岁月联盟 编辑:exp 时间:2011-09-05

可视化模式
v:进入可视化模式,以字符选择
随着光标的移动,各种选中,按y复制
V: 进入可视化模式,以行选择

可以跟d y 等命令,各种混合。
------------------------------
剪贴:先使用 d命令,再使用p命令,此时,p只能粘贴dd的最后一次操作所删除的内容。
------------------------------
r :单字符替换
在光标所在位置,按r,然后直接按要替换成什么就好
替换多个字符
nra:则替换光标后n个字符为a
-------------------------------
一次打开多个文件 vim *
在末行模式下输入
:next 跳到下一个
:prev 跳回上一个
:first 跳到第一个
:last 跳到最后一个
--------------------------------
查找并替换:要在末行模式下执行。
1,$ s/要查找的内容/要替换的内容/gi g全局替换, i搜索字符串的时候忽略大小写
. : 光标所在的当前行
$ :最后一行
.,+3 :从当前行到后面3行
% : 从第一行到最后一行。
vi查找命令也支持正则表达式

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

水平分割分割窗口
ctrl+w 松开手之后再按s :水平分割窗口。
ctrl+w 之后再按ctrl+w ,实现两个窗口之间跳转。
垂直分割窗口
ctrl+w 松手之后按v : 垂直分割
ctrl+w 之后再按ctrl+w ,实现两个窗口之间跳转.
可以分割好几个窗口,
用ctrl+w 之后按箭头来选择。

vim -o 一次打开多个文件并直接实现窗口分割
vim -O 水平分割
-----------------------------------
定制vim的工作环境。或者工作特征。
:set + 功能的简写 :可以设置相关功能,如果想取消则,在功能前加 no
:set nu :显示行号
:set nonu :取消显示行号
这种设置只对当前文件生效。
如果想一直生效就需要配置 /etc/vimrc
在每个用户的家目录下有 ~/.vimrc,打开或者自己手动建立,然后自己定制
:set ai :开启自动缩进
:set noai :关闭自动缩进
:set ic:忽略字符大小写
:set sm:showmatch 显示两个括号中谁跟谁相匹配。当开启之后,光标定义在其中一个括号上时,他会自动识别跟这个括号匹配的那个反括号。
:help set 查看set都有哪些
:set all 查看set 命令的所有可配置选项。

syntax on:是否打开语法高亮(默认打开),通过颜色来判断你的语法是否有错误。
-----------------------------------
【vimtutor】命令:
vim教程,一边教你,一边让你实验。(vim设计者们提供的教程)
-------------------------------------------------------
【test】 命令:
格式: test expression
test能直接测试。
【[ expression ]】 , 【$[ ] 】算术运算
【[[ expression ]]】 双中括号一般是关键字。[[asdasd]] && [[asdasd]] 表示连接。

在第三种即关键字的搜索时,可以用
=~ : 做正则表达式的模糊匹配


[[ $string =~ h[aeiou] ]]
看这个变量string中的内容 是否能被 后面的正则表达式 所匹配。能为真,不能为假
比如: USERNAME='root'
[[ "$USERNAME" =~ ro/{2/}t ]]
-------------------------------------------------------
1.【整数测试】:
需要两个测试数。
套件表达方法比较特殊
-lt : 表示左边的是否小于右边的。 [ $A -lt $B ] A中保存的数是否小于B
-le :【小于或等于】【小于等于】
-gt :【大于】
-ge :【大于或等于】【大于等于】
-eq :【等于】
-ne :【不等于】

[ $1 -ge $2 ] && echo "$1 is the max num." || echo "$2 is the max num."
判断输入的两个数哪个大
bash -n 这个脚本。检测脚本语法。

2.【字符串测试】:判断两个字符串是否相等。
== :【表示等于】
!= 或者 <> 表示不等于
> :【大于】
< :【小于】
-z 判断一个字符串是否为空,为空就为真 0,不空就为假 1 [ -z $A ]看A的这个变量中间有没有包含字符。
-n 判断一个字符串是否不空,为空就为真,不空为假


3.【文件测试】
-e FILE:判断一个文件是否存在
-f FILE:判断一个文件是否是普通文件
-d FILE:测试一个文件是否是目录
-h/L FILE:判断一个文件是否是符号链接文件
-r FILE:判断一个文件的对与执行者是否可读
-w .、 对当前用户是否可写
-x 对当前用户是否可执行
-s : 判断大小。是否存在。大小不能为0
-O :这个文件的当前属主是否就是这个文件的发起者
-G :这个文件的属组是否就是这个文件的发起者

4.【组合条件测试】:
如果一次要制定多个条件怎么办?
-a 表示 都要满足
[ -x $FILE -a -w $FILE ] 一个文件必须既有执行权限,又有写的权限
-o 表示满足一个就行 同上。
-not 表示取反,也可以用 !
[ ! -x $FILE ] 没有执行权限的文件。

  比如:
 [ -x two.sh ] && ./two.sh
-------------------------------------------------------
【if语句】:(单分支)
 if CONDITION; then
  statement
  ...
  fi
 双分支
 if CONDITION; then
  statement
  ...
  else
  statement
  ...
  fi
 多分支的if语句
 if CONDITION; then
  statement
  ...
elif CONDITION; then
statement
...
......
else
statement
...
fi

-------------------------------------------------------
【常用的数学运算符】 
+ - * /
%: 取余数
+= / -= / *= / /=:SUM+=1 其实相当于 SUM=[$SUM+1] 但是SUM+=的时候,前面要用let
++:自加运算
-- : 自减运算


-------------------------------------------------------
【while】循环
while CONDITION; do
statement;
...
CONDITION修改,让while再判断继续循环或不循环
done

---------------------------
1-100的加法:要自己指定条件。还要设置什么时候while能停止
let I=1
let SUM=0
while [ $I -le 100 ]; do
let SUM+=$I
let I++
done
echo "$SUM"

对于while来说,也可以一次读一行。
while read LINE; do
......
......
done < /etc/inittab
这就实现了,从/etc/initab里,每次读一行,将这一行的内容放入LINE这个变量中,然后依次进行处理。
LINE是个变量,可以随意指定
-------------------------------------------------------
读取/etc/passwd 然后将用户名给读取出来,之后显示:
root , SHELL: /bin/bash
---------------------------------------
while read LINE;do
USERNAME=`echo $LINE | cut -d: -f1`
USERSHELL=`echo $LINE | cut -d: -f7`
echo "$USERNAME , shell : $USERSHELL
done < /etc/passwd
---------------------------------------
用awk实现这个while的练习:awk 'BEGIN{FS=":"}{print $1," SHELL:" $7}' /etc/passwd
或者 awk -F: '{print $1," SHELL:" $7}' /etc/passwd
--------------------
用for实现:
IFS=$'/n'
for LINE in `cat /etc/passwd`; do
USERNAME=`echo $LINE | cut -d: -f1`
USERSHELL=`echo $LINE | cut -d: -f7`
echo "$USERNAME , shell : $USERSHELL
done
-------------------------------------------------------
【read】命令的使用:
read [options] VAR1 VAR2
-t timeout:等待用户的超时时间间隔。
-p prompt:键入一些信息之前先显示一些提示信息出来。
-a array:把读入的信息不是放入变量里,而是放入属组中。将用户键入的信息保存在数组中。
-------------------------------------------------------
【特殊变量】
特殊变量:$的后跟名
【$?】
【$*】 或者 $@ : 一次性引用你的shell脚本的所有位置参数变量。
如果运行下面这个脚本a.sh
echo $1
echo $2
echo $@
echo $*
运行: ./a.sh ab cd ef ggg
则:$@和$*会引用你所引用的所有参数,不仅仅只是显示$1 和$2 ,还可能有 $3 $4
$@ 是把所有的变量当做一个字符串来引用了。
但是,$* 把每一个变量当做一个字符串来引用,只不过一下把他们输出在了一行上。所以看似一样。

【$#】 会被替换成整个命令行参数的个数,用于引用你通过命令行向脚本传递的参数的个数
比如上面那个脚本,如果最后显示$#的话,则会显示为 4
【$0】 表示脚本名字自身。
但是取得时候会将命令连同./a.sh 一起取出来
可以使用 basename $0 来将名称给取出来。
【$$】 表示包含了当前这个进程的进程号的
【$_】 表示这个命令中最后一个参数的结果。用于定位最后一次命令执行的是谁的时候特别有用。
【$!】 用于引用在后台运行的最近的这个命令的进程号是什么
【$-】 用于引用 当前这个命令 所能够识别的命令的选项中的引导符是什么。一般都是横线 【用十六进制给表现出来】


-------------------------------------------------------
【exit】 时,可以直接退出脚本,并且可以指定返回值
exit 0 ,则退出,并返回值为0
exit 2 ,则退出,并返回值为2
比如:
#!/bin/bash
read FILE
if [ -e $FILE ];then
echo "$FILE exists."
else
exit 6
fi
此时,运行之后,用$?则会显示 6
==========================================


【进程】管理的知识:Process:
进程:进程是资源分派的单位。是一个程序的正在执行的副本。

将任务以某种方式轮流的分派cpu的资源。
在32位内存上,每个进程都假设自己有4G的内存可用
在每一时刻,进程都相信自己是独享系统的
在某些特殊时刻到来的时候,让进程以以某种规则来执行
这就需要
“进程调度子系统”
早先的Linux内核在尽心调度的时候会随着进程的数量的增多而性能下降
但是2.6之后的内核,引入了O(1)的调度方式
I/O密集型:大量需要去接口设施
CPU密集型 :经常需要和CPU去打交道,大量消耗CPU的性能。

场景设计:一边看电影,一边聊QQ
则系统会尽可能多的将cpu的资源交给解码电影
但是当你聊QQ一旦敲击键盘,则敲击键盘的瞬间,敲击指令的优先级将会非常高,则将获得cpu的资源

进程优先级:
静态优先级:你给他一个优先级,他就不变了,一直这么大 [100-139]
管理员手动调整的优先级,不过无论怎么调整都不会高过动态优先级的范围的
动态优先级:用一个十进制的数字表示动态优先级:[0-99]
实时优先级。

【nice值】,用于实现一一对应其静态优先级。从-20 到 19 来对应静态优先级的 [100-139]
作为一个进程来讲你可以把自己的优先级让给别人。才优雅,才Nice.将自己的优先级调低
管理员可以随意调高调低
而用户只能调低

【web】: 在有人访问的时候,会向所有访问的用户开启一个 进程 或者 线程。比如1000人访问的时候会有1000个进程
而,将某进程Kill,查看,调整优先级等操作,则叫做进程管理。
-----------------------------------------------------------
如何实现【进程调度】:
进程优先级:静态优先级是 nice -20~19 (当你启动一个进程之后,默认的nice值是0)
调整Nice值。
1.【nice】 :启动一个进程的时候直接指定nice值。
nice -n N COMMAND (则将命令的nice值改为N)
比如 nice -n -3 /usr/sbin/cupsd
则将/usr/sbin/cupsd 启动并将其nice值变为-3
只有管理员才能降低nice值,所以优雅是需要付出代价的。
2.【renice】 : 对已经启动过的进程调整其nice值。
renice N PID 只能指定PID
renice -5 423 则将PID为423的进程的nice值调整为了-5

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


【ps】 命令:
命令其实非常庞大,古老,支持的选项非常多。而unix在分裂的过程中,这个命令也被独立维护
一般来讲用户登录进去之后,系统就是给你一个终端。这都是跟终端相关的。而在登录之前那些都是跟无关的进程
1.终端相关的进程:他们都附属于某一个进程,比如shell进程,所以shell进程都被称为leader进程。所以kill领导进程的时候,它会将里面的其他所有跟他有关的都杀了。
2.终端无关的进程:他们都独立。优哉游哉的独立于世外生存。
选项:BSD风格选项都没有“-”

-e: 用于查看所有进程:无论是终端相关还是终端无关的所有进程
a : 跟终端无关的所有进程。
x :表示跟终端相关的所有进程
u: 表示显示这个进程是由哪个用户发起的。
axu : 正是一般查看进程时最重要的一项命令组合。
-eF: 显示额外信息,小f显示完整信息。
j : jobs format 作业的格式来显示进程状态信息。
-ejH :H,可以显示进程见关系,直接树状显示出进程关系
axjf : 真正树状图的形式显示进程关系
-o : 自己定义只显示哪些字段。
比如: ps -eo pid,%CPU,comm 用逗号隔开,可以各种指定显示

常用:
ps axjf
ps aux
ps ef


进程属性:样式
PID(进程号) :CPU是靠着task_structure结构体来标示进程的,在这个结构体里,它会给进程分配PID
task_structure:是个循环链表,会给每一个进程派发身份证。如果一个进程结束了,就会将这个进程身份证拿走。
一个进程除了PID之外还有
PPID,父进程的进程号。对于Linux来讲,每一个进程都是又上帝带来的。所以所有
进程的父进程都是init,所以这个进程的进程号是1.而上帝的本尊已经在父进程出来之后退居幕后了,他叫swap。进程号是0
这个进程通过复制自身得来的。它复制自身得来子进程,而每一个子进程都可以生成子子进程
tty: 是否跟终端相关。
?表示不相关
tty1 表示相关
STAT:进程状态:
1.running 运行态 : 从cpu 一旦获得时间,则变成了running。如果时间完了,进程还没运行完,则将进程切换回Ready。
这种来回切换的过程叫:
上下文切换 (CS:Context Switch).把数据弄出去,再等有时间了弄回来。
而系统调优,就是调这些每一个进程让其获得多少cpu的时间。
交互式进程越短越好。
通过系统中断,可以实现,新来的进程如何抢先进入那些刚获得进程时间的还没有运行完得进程。
最重要的中断,时钟中断
2. Ready 就绪态 :所有都具备了,只欠cpu的运行时间。轮到你了你就Running,轮不到你你就running
3. Stopped 停止态:指的是管理员通过触发某种事件,让这个进程永久的沉睡下去了。
只有当管理员唤醒它,它才能进入运行循环
4. Sleep 睡眠态,等待某个I/O事件完成的时候,就从running态转变成了睡眠态
一般等待用户输入数据,或者等待读入数据时。不睡眠就进入就绪态
可中断睡眠(interruptible Sleep),可以叫醒。
这种进程因为无事可做而慢慢睡眠的进程。
不可中断睡眠(uninterruptible sleep) 别人叫不醒,只能自己起来:
这个进程本身正在完成一些其他操作,比如I/O,必须等待将其加载完成
进程状态:
D:表示不可中断的睡眠
R:Running 或者 Ready 正在运行或者等待运行
S : 可中断的睡眠
T : 停止态
Z:Zombie。僵尸态:一个进程执行结束了,应该将内存释放出来,但是这种态,没有释放!
发生有两种可能性
1.将一个进程向操作系统发出结束进程的时候,他会自我清理。在发出结束消息之后已经没进程号了,但他还在内部结束着自己。
每一个进程在死亡的时候并实现自我清理的时候,由其父进程帮其收尸。
2.当一个进程正在准备清理的时候,父进程死了。则这个进程就会进入僵尸态
孤儿进程。
但是linux不允许孤儿进程出现,则会在父进程死之前,会给他找一个新爹,而新爹一般都是init,即社会福利院。
一个好的程序员要随时关心它的父进程,而要在父进程死之前将进程找给Init。
对于BSD风格:
< : 表示这是一个高优先级进程
N:表示这是一个低优先级进程
+ :表示跟某一个前台进程相关,属于某一个前台进程组的进程。(领导死了都会带下属一起陪葬的)
s : 某一个进程组的 Leader进程,领导进程。
l : 则表示这是一个多线程进程
TIME : 获得CPU时间的累计时间
COMMAND: 由哪个命令发起的这个进程。对于init来讲,它是 init [数字]:表示init的级别,有0-6 7个级别
加了中括号的,表示是内核线程,
%CPU: 占用CPU的比率
%MEM : 占用内存比率
VSZ : 虚拟内存级 大小是KB 虚拟地址空间的大小
RSS : 物理内存级,真正占用物理内存空间多大。
START:启动时间


【线程】:thread表示:比进程更轻量级的资源分派单位。
对于每一个进程来说,它认为他占用了所有的操作系统资源。如果你在一个系统上发起了200个进程,如果两个进程需要数据之间访问怎么办?
1.自己到外面自己转一圈,然后回来。(实现自我通信)
2.在内存空间内进行,两个进程建立一个内存空间(共享区域),叫共享进程。然后他们能在共享区域内通信。(进程内相互通信)
场景:Web服务器中浏览页面
进程是:将每一个用户当一个进程,放入cpu,然后Ok.占满为止
而线程是:将页面放入内存中后,线程将这内存分为小的进程,让访问相同页面的人都处于一片小内存中。
如果要使用线程,必须要防止几个用户同时修改一个文件。这就需要给加锁。
Linux并不是完整意义上的支持线程的。

【Web服务器】:
apache Web服务器:prefort模块,如果有动态页面,4G 顶多有2000个用户访问
worker模块,
Nginx Web服务器:如果只解析纯静态页面,4G的内存他能相应2W个用户的访问

对于内核来说他是靠进程来工作的。而进程又分了线程。
比如pdflush线程,将内存中的东西同步到硬盘的。
4G的内存,其实是分为两块的。
1G+3G, 这1G的其实是内核空间。3G才是用户空间
真正的能跟硬件打交道的只有内核。也只有内核才有这样的权限。
比如 mkdir 由用户在用户空间提出申请。然后交给shell ,shell联系内核,然后内核联系硬件,才在硬件上建立了目录。
用户控件的程序不是不能随便跟内核空间打交道的。
而打交道的方法是 1.:系统调用
2.:中断

对于linxu来讲,只要有物理内存,它是不会用虚拟内存的。
Windows只要开机,他就只用虚拟内存。

----------------------------------------------
查看有多少个cupsd的进程
ps aux | grep cupsd
ps一般专门跟 grep一起使用
而还有一个ps的专有命令:
------------------------------------------------------------
【 pgrep】 :
-u 专门查看某个特定用户的进程。 但是只显示属于root用户进程的进程id 比如 pgrep -u root
-G 专门显示某个组的进程。
pidof : 查看某进程的进程号
比如 pidof cupsd 则显示进程号。
-------------------------------------------
进程间通信机制:IPC
1. 共享内存机制
2. 信号:就是一种非常微小的信息单位,可以从一个进程到另一个进程,以实现另一个进程发出通知,或者让另一个进程采取特殊的动作
我们向一个进程发送信号,一般使用kill命令,来向另一个空间中的某个进程发送命令。
【kill】 : 只能kill对方的进程号
【 kill -l : 可以列出当前系统上的所有可用信号。】
每一个信号前都有个数字
Kill -9 : 则发出第9种信号
kill -HUP , 发送简写为HUP的信号
kill -SIGHUP ,以【信号】的SIGHUP
【常用信号】
1.SIGHUP信号:相当于向对方发出重载,重新载入的时候非常有用。
2.SIGINT信号 :相当于向对方发送了一个Ctrl+C, 中断
9.SIGKILL信号 :强行杀死对方。飞来横祸,直接死亡,会造成数据丢失的。
15.SIGTERN信号:相当于让另一个进程停止的信号 。在杀死对方的时候允许向家人告别。(处理完进程该处理的,从容死去)
18.SIGCONT信号:把一个以停止的作业让他继续运行
19.SIGSTOP信号: 将一个进程暂时停止
从35之后的信号,可以自定义。

如何向另一个进程传递信号?
kill 2288 (向PID2288的进程发送15信号)
默认什么信号都不加,则使用15信号
kill -15 2288 则是发送15信号给进程号是2288的进程。

一次杀死多个进程:
【killall】 进程名 : 后面必须跟的事进程名
比如 killall -15 httpd 则用15号信号的方式杀死所有进程名为httpd的进程
【pkill】
pkill SIGNAL pattern:
表达式 进程名

-----------------------------------------------------
【top】命令:
也是用来查看进程的。跟ps一样。
但是ps只是显示那一刻!
用top 可以一直显示,每5秒刷新一次。
信息非常重要:
---------------------------------------------------------------------------------------------------------------------------------
开机时间,运行时长 登录几个用户, 系统平均负载率 1分钟 5分钟 15分钟 (在CUP里等待运行的任务的个数,一般当它大于3的时候,基本上就是系统瓶颈了,证明CPU太差了。)
一共有多少进程正在运行 运行状态的个数 多少个睡眠的 多少个停止的 多少个僵尸
显示cpu利用率(s,多cpu平均值): 花费在用户空间执行程序上的比例 内存空间上的比率 调整为nice值的比率 空闲的百分比 等待IO事件上比率(wa)
Mem 一共有多少内存, 使用了多少 ,空闲了多少,多少用于缓冲(为了平衡时间,先放到缓冲里,慢慢使用,用于减轻速度慢的一方的压力的)数据了
swap 一共有虚拟内存 ,使用了多少, 空闲了多少,用于多少做缓存(为了重复使用的,能够实现加速的功能,所以有命令支持)了
(Linux加速系统访问的机制,将空闲内存全部变成缓存)
【16:52】

常用选项:
-b -n N: 在-b模式下,可以指定让top显示指令几次,然后退出
top -b -n 2 : 则表示,将信息抓出来,抓2次,然后退出。
-d : 可以指定每隔多少秒刷新一次
top 10
----------------------------------------------------
【free】命令:
查看内存信息的命令
物理内存和交换内存的信息
-m : 表示以M(兆)为单位,显示其信息大小
----------------------------------------------------
【uptime】 命令:
显示系统运行时间的
每一分钟,5分钟,15分钟的系统负载
----------------------------------------------------
【vmstat】 命令:
显示内存信息,缓存,io,系统,cpu的信息
io:中断次数 cs:上下文切换的次数
vmstat N : 每隔N秒钟显示一次。最大的时候cs可能达到10W次。。。。
vmstat N1 N2: 每隔N1秒钟刷新,抓取N2次数后退出
--------------------------------------------------
【 pstree】 命令:
可以显示当前系统的进程的进程树。
清楚的显示进程的进程树
-------------------------------------------------------
【until】循环:
条件满足就退出,条件不满足就继续
until CONDINTION do
....
...
done

1+到100的运算
let I=1
until [ $I -gt 100 ] ;do
let SUM+=$I
let I++
done
echo $SUM
-------------------------------------------------------
【sleep】 命令:
让整个执行流程延迟多少秒
比如 sleep 5 则延迟5秒
------------------------------------------
【wall】 命令:
可以向每个用户的终端都发送一个信息
比如
wall "Hello" 则向全终端发送整个信息。
-------------------------------------------------------
【作业控制】:
通过前台发起的某个命令,但是这个命令可能会发起多个进程。一个或一组进程,一个job
比如: cp -r /etc /tmp/abc 则是一个作业,他会开启多个进程来完成作业
作业分前台和后台:
1.【前台】:在命令发起的时候如果这个命令没有结束,则一直占据着shell,则叫前台执行(比如 刚才的例如)
2.【后台】:执行的时候即便没有成功,也将shell释放。
cp -r /etc /tmp/abc &
加入了【&】,则将此命令在后台fg运行。
----------------------------------
让其跟终端无关的:
【nohup】命令:模拟,让你的某个命令跟终端没有任何关系
如果以nohup 发起命令的话
nohup cp -r /etc /tmp/cab &
则这条命令是跟终端无关的,即使终端退出了,它也依然运行,跟终端无关。
-----------------------------------
让一个正在前台的命令发送到后台去:
.把一个前台运行的作业发送到后台去。
Ctrl+Z : 则将一个前台命令送到了后台去
Ctrl+Z其实就是19信号
---------------------------------------------------------------
【jobs】 命令,可以查看当前被放到后台的所有作业有什么。
前面的编号是这个作业的作业号。
fg %作业号, 则调回作业号的内容。(fg可以省略“%”号)
比如 fg 3 则调回作业号为3 的命令
直接使用fg 则调回作业号后面带+ 号的那个命令
bg %作业号:将一个已经调入后台的作业开启Running状态
kill %作业号: 将后台的作业直接Kil掉,让其从容就义。(保存完成的结果,结束作业)

-----------------------------------------------
通过 &放入后台的程序 默认是Running状态。
而通过 Ctrl+Z 送入后台的程序默认是 Stopped 状态。
显示当前系统上所有其VSZ段的值大于4000的进程的进程名、进程号和VSZ的值的大小
ps aux |awk '$5>4000 {print $2 "/t" $5 "/t" $11}' |grep -v "PID"
-------------------------------------------------------
如何为echo 命令加上【颜色】。
ANSI 【color】,颜色种类比较少。只有7种。显示的时候需要用控制符
【/033】 : 表示是 ESC 键的 十六进制码
3开头表示是前景色
4开头表示是背景色
0是黑色
7是白色
1 红 色
2 绿色


echo -e "/033[31mThis is a desk;/033[0m"

/033[0m : 不管是什么控制,颜色,字体,斜体,粗体,都用0m结束

可以实现对esc键的直接键入
按ctrl+V 然后按 ESC键
则直接用二进制表示ESC 会显示 ^[

echo -e "^[32mThis is a desk;^[0m"
-------------------------
想让背景和前景都实现

echo -e "/033[31;42mMy color./033[0m"
echo -e "/033[1;31mMy color./033[0m"

第一种:单独。
0:正常模式
1 :加粗
2 :
5 : 闪烁
8 : 跟背景色一样。用于隐藏文字


============================================================
主机的【网络属性】配置:
1.图形界面里:跟windows类似。
一般用 : system-config-network-gui (redhat提供的)

--------------------------------------------
linux到底是如何给网卡命名的
最终我们给网卡设备取了一个别名:
1.以太网卡 eth 开头, eth0,eth1.....
2.PPP网卡 ppp 开头,ppp0,ppp1,ppp2.....
--------------------------------------------
/etc/sysconfig/network
这里面主要用于定义,linux接入网络后所需要配置的重要信息
这个文件是全局的。
1:NETWORKING 表示是否打开主机的网络功能 yse/no
2:是否启用本机的IPv6的网络功能。yes/no
IPv6是内核中以模块的形式存在,在这设置为no,也关闭不了ipv6
3:HOSTNAME:主机名
4:GATEWAY:设置网关

2. 基于字符的图形界面:system-config-network-tui:使用这种方式修改的命令不会立即生效,要重启网络命令(service network restart )才行
1.配置网卡
Name 设备名
Device 设备
Use DHCP 是否使用DHCP (用空格切换进去)
2.配置DNS
有个搜索,当你使用不完全合格域名的时候,则自动补全这里面的搜索内容,即搜索域

FQDN:Full Qualified Domain Name 完全合格域名。
-----------------
【setup】 命令
打开类似于windows控制面板的东西。然后就可以进入一种全局配置。


3. 命令符方式
对于Redhat来讲
/etc/sysconfig/network-scripts/ifcfg-ethX
所有的网络设备的配置文件都保存在这里
这里面有很多网络设备的控制脚本。
两个重要的脚本ifdown---> ../../../sbin/ifdown
ifup ---> ../../../sbin/ifup
ifup:启用某个设备的
ifdown:禁用某个设备的。

每一个网络设别都有一个在/etc/sysconfig/network-scripts/下有一个以ifcfg开头,以设备名命名的文件

对于Linux来讲,地址是属于主机的,并不属于网卡。

/etc/sysconfig/network-scripts/ifcfg-ethX 进入后
1.DEVICE: 对应的哪个设备的
2.BOOTPROTO:定义设备启动的时候所使用的协议(配置的时候只能4选1)
1.dhcp协议:配置了这个之后,下面的ip什么的都无效的。
2.bootp:动态指派ip地址,但是没有租约的改建。(dhcp的前身)
3.static(静态协议)
4.none
3.HWADDR: 硬件地址 MAC地址
4.ONBOOT=yes :在主机启动的时候是否启动这块网卡。 No的话,必须手动启动这块网卡
5.NETMASK 子网掩码
6.IPADDR IP地址
7.GATEWAY: 网关 (不是必须配置的。)
8.TYPE:表示说明网卡说明类型
9.USERCTL: 是否允许普通用户来禁用/启用这块网卡 一般是 =no 的。
10.PEERDNS=(yse|no):这个通常在BOOTPROTO在bootp或者dhcp.结合用的。设定是否dhcp/bootp协议是否更改你的DNS地址
当改完这些内容之后都不是立即生效的。而是必须要重新开启网络命令的。

/etc/resolv.conf 文件,配置DNS
search :
nameserver : DNS服务器的IP地址,最多可以指定3个

service network restart 重启网络服务
/etc/init.d/network restart 跟上面一样
service脚本的保存目录

第四种: 【ifconfig】 配置:临时配置,但是立即生效! 重启网络服务或者重启操作系统都会让他立即失效。
-a 显示所有的信息
配置的格式:
ifconfig ethX ip/netmask
比如:
ifconfig eth0 192.168.0.188/24
-----------------------------------------------------------------
配置主机名:
1修改 /etc/sysconfig/network
HOSTNAME=
必须重启则才能实现。
2.立即生效的主机名,但是重启失效。
hostname www.a.com

不带任何选项的hostname命令,可以查看当前Hostname
其实hostname命令指示直接显示了 /proc/sys/kernel/hostname这个文件
所以
echo "elinux.example.com" > /proc/sys/kernel/hostname
则直接修改了
这个文件不能使用vi修改,必须使用echo 以重定向的方式修改

--------------------------------
网关的配置。(如果,2个地方都配置了,则优先网卡的。)
设定信息的级越小,优先级越高。
1.网卡的配置文件里
2./etc/sysconfig/network


---------------------------------------------------------------------
如何【添加路由】。

到主机的路由:route add -host IP gw GATEWAY
到网络的路由: route add -net NETWORK/NETMASK gw GATEWAY
添加默认网关: route add -net 0.0.0.0/0.0.0.0 gw GATEWAY
route add default gw GATEWAY (表示添加默认网关,一般使用这个命令)

删除路由:route del [-net|-host]
route del -host IP 删除到主机的路由
route del -net NETWORK/NETMASK 删除到网络的路由
---------------------------------------------------------------------
1.如何【判断ip地址】是否是正确的ip
ip的特征:
[[ $MYIP =~ ^([1-9]|[1-9][0-9]|1[0-9]{1,2}|2[01][0-9]|22[0-3])(/.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])){2}(/.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4]))$ ]]
2.如何判断子网掩码是否是正确的
^255(/.(0|255))[3]$
【14:42】

3.如何判断网关和网络是否在同一网段内
用一个 & 做位与运算
& 怎么用的:
A=7
B=3
C=$[$A&$B] 让A和B做与运算 则结果肯定是3
那么如何判断IP呢?
A=192.168.0.186
B=192.168.0.254
C=255.255.255.0

for I in {1..4}.do
AA=`echo $A | cut -d. -f $I`
BB=`echo $B | cut -d. -f $I`
CC=`echo $C | cut -d. -f $I`

① [ $[$AA&$CC] -eq $[$BB&$CC] ] && echo $I same || echo $I deffent
done

在真正写脚本的时候,要将AA BB CC 等直接替换成 内容即可。
----------------------------------------------------------------------
如何判断只要有一段不一样,则提前结束的
则将①改为:
[ $[$AA&$CC] -ne $[$BB&$CC] ] && echo $I deffent && break

---------------------------------------------------------------------
【break】 : 提前跳出当前循环
break n :跳出n层循环
【continue】:提前进入下一次循环。
continue n 返回一个n值

A和B想与取反
![A&B]=!A|!B
---------------------------------------------------------------------
【case】 语句:
case $VAR in
PATTERN1)
...
;;
PATTERN2)
. . .
;;
*)
....
;;
esac
检查¥VAR的值,到底能被哪个模式所匹配,一般只能以一个模式所匹配。
-----------
例如: 当用户输入的是Q,则退出,如果输入的是其他,则显示“这是一个其他字符“
read -p "A character" VAR
case $VAR in
q|Q)
echo "$VAR"
;;
*)
echo "Other"
;;
esac
---------------------------------------------------------------------
【function】 : 功能模块
将一个完整的功能放在一个代码块里,然后需要用的时候直接调用。
在shell脚本里,也可以先声明好,需要用的时候直接调用就好了。

格式:
function F_NAME {
函数体
}

或者
F_NAME(){
函数体
}
一般要在数据段结束的时候加指定返回值
return 1-255 : 明确指定返回值是什么。在函数中。exit 是在脚本中明确指定退出脚本的返回值
----------------------------------------
能提醒用户输入两个数,显示想家结果,并循环3次
1.不适用函数:用脚本写:
for I in {1..3};do
read -p "Two integers" A B
echo "The sum is : $[$A+$B]"
done
2.如果使用函数:
function SUM2 {
read -p "Two integers:" A B
echo "Sum is $[$A+$B]."
}
SUM2
SUM2
SUM2 ## 则调用了SUM2函数3次
----------------------------------------------
函数还可以接受参数,跟脚本一样。
这个参数需要通过函数体调用的时候传递给参数

CIP 1 2
通过函数调用两个数,不能在函数体内获取这两个数:
#!/bin/bash
function sum2 [
echo "Sum is $[$1+$2]."
}
read -p "Two intergers:" A B
sum2 $A $B ##这里,$A的将值传递给了$1,$B传递给了$2
---------------------------------------------------------------------
【locate】 :基于某个事先存在的文件数据库来查找的。
【有一个专门用来搜集系统上文件都叫什么的数据库】,模糊匹配
locate FILES
比如,locate passwd,则直接查找出了所有包含passwd的文件/文件夹

如何生成locate数据库?
updatedb 命令:但是生成速度极慢。

常用选项:
-i : 忽略字符大小写
-n N : 搜索到查找到的东西之后,只显示前N行
比如 locate -n 2 passwd 则只显示passwd出来的前2行
---------------------------------------------------------------------
【find】
find [DIR,...] [CRITERIA(标准,查找规则)] [ACTION..]
find [指定路径] [查找标准] [处理办法]

find /root /home 可以指定多个目录,多目录间用空格隔开

ACTION:对于找到的文件如何处理,比如显示,删除。。。
默认是显示。

CRITERIA:
-name :以文件名基本来查找,本身是严格区分大小写的。
-iname : 以文件名来查找,但是不区分大小写
find /etc -name "passwd"
在etc目录以及子目录下,精确查找passwd

支持文件名通配
*任意字符 ?单个字符 [ ]指定范围内的单个字符
find /etc -name "*passwd*"
则在etc目录以及子目录下,查找passwd以及passwd前后都有字符的文件

-user : 查询用户名的文件
用法: -user redhat
比如 : find /home -user redhat
查找所有home下的用户是 redhat 的文件
查看则需要用:
ls -lh `find /home -user redhat`
则将find的内容送给了某命令
-group:查看用户组的文件
-uid : 查询所属用户id的文件(文件还在,但是用户被删,则文件属于用户删前id)
-gid : 查询所属用户组Id的文件

-----------------------------------
-a : 和关系 连接两个查找条件,必须满足两个条件
-o : 或关系 满足之一
-not : 非关系,对一个条件取反的 ,也可以直接写成 “!” 号
查找/tmp目录下,以test开头,后跟任意字符,并且属于redhat用户的文件
find /tmp -name "test*" -a -user redhat
中间的-a此时就表示连接了-a前后的两个条件,一个是 -name "test*" 另一个是 -user redhat 的,必须满足两个条件

find /tmp -not -user root
则表示,取所有用户名不是root的文件

既不属于redhat 又不叫test的文件:
find /tmp -not -user redhat -a -not -name "test*"
或者
find /tmp -not /( -user root -o -name "test*" /)

在tmp下,既不属于root用户,又不属于redhat的文件
find /tmp -not /( -user root -o -user redhat /)

------------------------------------
以时间搜索
-atime 以天为单位
-mtime 以天为单位
-ctime 以天为单位
-amin 以分钟为单位
-mmin
-cmin
[+/-]N :[+/-5]最近多少天 以外访问过 +5天之外访问过 -5五分钟以内访问过
如果只有一个N
则表示,正好在第N天前访问过

在etc下已经有5天没有访问过的文件
find /etc -atime +5
stat `find /etc -atime +5` | head -1

------------------------------------
跟其他文件所作的相对比较
-anewer FILES 比 FILES访问还要近的文件
-cnewer
-newer :文件内容被改变的时间,相当于mnewer
find /etc -anewer /etc/passwd :表示查找比/etc/passwd还要近的文件
-----------------------------------
根据文件类型查找:
-type
f 普通文件
d 目录文件
l 连接文件
s
b
c
p

find /tmp -type d
------------------------------------
根据文件大小查找:
-size
也支持+ 、-, -表示小于,+表示大于
[+/-]N N代表N兆 一般能接受的单位 K G M等
当你指定某个单位之后,可能出现异常状况
find /etc -size 1M : 表示找到/etc下的小于1M的文件
但是
find /etc -size 2M:精确查找2M的文件

意思是,当指定大小为1的时候,找的是小于1M的内容,但是一旦变成2,则是精确的。

find /etc -size -100K 意思是小于100K的,+100K则是大于100k的。

-----------------------------------
根据文件权限来查找:
-perm [+-/]mode : 只不过+号很少用了
不带符号的情况下,mode表示权限的精确匹配
find /tmp -perm 755 表示查找权限为755的文件

“-”号:-755 表示每一类用户【属主,属组,其他人】权限都要匹配
”/“ 号:/755表示,只要某一类用户有那么一类权限就可以。
find /etc -perm /222
则表示在etc目录下查找 权限为 222 的只要有一类用户能匹配此权限的所有文件

使用/777: 只要某一类用户有那么一类权限就可以。所以/777,只要是有一点权限的文件,则都能匹配。

查找/etc目录下,其他用户有执行权限的文件:
ls -l `find /etc -perm /001`
ls -ld `find /etc -perm /001 -not -type d -not -type -l`
查找/etc目录下,权限模糊匹配001 的不是目录,不是链接的文件

--------------------------------------
常用查找选项:没有用户,没有组的文件。
-nouser
-nogroup
----------------------------------------------------------
常用的ACTION:
-ls 选项:相当于 ls -l `find....`
-print : 默认就是这个,显示出来
-ok COMMAND: 每一个命令都需要确认一下
-exec COMMAND:不需要确认,直接执行。

find ./ -perm /001 -not -type d -exec chmod o-x {} /;
{}表示占位符,用于表示find 查找到的文件。结束之后要用 /;结尾

find ./ -name "[[:alpha:]][[:digit:]]" -exec mv {} {}.old /;
表示,在目录下,找到名字以字母开头,后跟数字的,文件并将其改名为“文件名.old”

find /tmp -atime +30 exec rm -rf {} /;
表示查找/tmp下 大于30天没有访问过的 文件并删除,强制删除。
---------------------------------------------------------------------
xargs 命令:
xargs COMMAND FILES
他也能实现把find查找到的文件做一系列的操作的。
find ./ -name "*.old" | xargs chmod 755
将find找到的*.old的文件传递给 xargs 让其进行权限更改为755的操作。
============================================================


网络客户端命令的使用:
【elinks】
【links】
外部网页服务
----------------------------
elinks [option]... [ip]
-dump [0|1] 以纯文本的形式显示,将所有的信息倾倒在屏幕上
-source 以源码的方式显示

elinks http://192.168.0.254
elinks -dump http://192.168.0.254
elinks -source http://192.168.0.254
以后用于实现探测网站服务是否供应正常


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


【wget】 : 基于文本的网络下载工具
一般支持http ftp协议
wget [option] [URL]
--tries=N : 无法一次完整下载的到,可以多来几次
-o file : 将你的连接信息等 整个过程保存在日志里面
-r : 打开递归模式的

所以,wget可以将对方的网站全部下载过来
例子:
wget http://192.168.0.254/workstation.cfg

------------------------------------------------------------
【axel】 : Linux下的多线程下载工具

------------------------------------------------------------
【ssh】: secure SHell
协议,为了取代telnet(远程登录 )而出现的
用户登录的时候,能够实现用户的认证过程和传输过程都是加密的。
C/S的工具。
OpenSSH
sshd
ssh
用于远程连接SSHserver 的工具
ssh 192.168.0.74
默认,以当前你登录的用户的身份登录另一个服务器
ssh USERNAME@192.168.0.74
或者
ssh -l USERNAME 192.168.0.74
都是指定身份然后以指定的身份连入主机
----------------------------------------------------------------
对称
公钥 dsa rsa两种格式
单向
双方在通信之前会有个 host key,用于在主机进行通讯之前,登录之前,先用host key 进行加解密。他们是公钥加密的。
公钥和私钥一般是不能用来加密的。
必须要用对称加密
双方建立通讯之后,会临时加一个对称加密。
为了防止暴力破解,机器会在1个小时每次的状态下,每小时更换一次对称加密的密码
------------------------------------------------------------------
ssh的功能还有
ssh root@192.168.0.182 'ifconfig'
用ssh也可以用非交互的方式,直接让对方使用一个命令,并将其显示出来。

ssh的用户认证。
1.基于口令的认证
2.基于密钥的认证:这样每次以后登录就不需要密码了 S:私钥,P公钥
P-------> 放在打算访问的用户的远程服务器下的 、~USERNAME/.ssh/authorized_keys2 下。

ssh-keygen 命令
ssh_keygen -t rsa ##表示创建密钥认证,然后用rsa格式
问题1:是否更改公钥保存地址
问题2:可以对密钥加密,可以再输入一个密码
显示私钥保存在---->
公钥保存在

ssh-copy-id :我可以把你当前用户的公钥文件,拷贝到一个特定的服务器当中去
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.182

当密钥认证搞定之后,则以后登录之后就会自动传递密钥,然后不用输入密码。
但是这种认证过程是单向的。
-------------------------------------------------
ssh默认工作在22号端口上

netstat -tnl 命令,可以查看现在所有的端口
【7-27 10:40】


------------------------------------------------------------
两主机之间如何传递文件
【scp 】
可以实现跨主机的复制,并且复制过程是加密的
scp SOURCE DEST
可以从自己主机复制到别人主机,也可以从别人主机复制到自己主机。

scp root@192.168.0.182:/root/id_rsa_1024.pub ./
讲别人的东西烤过来
scp ./setif.sh root@192.168.0.182:/root/
将自己的东西拷过去

使用scp命令,如果目标文件夹已经有这个文件,则默认不提示直接覆盖。
和cp命令一样,cp命令支持的基本它也支持
-r -a -p

-C: 先压缩再复制,可以节省带宽。

------------------------------------------------------------
ftp的客户端工具:
【ftp】
ftp 192.168.0.254
5开头的,永久性错误
2开头的,正常的
1开头,正常信息
3开头,正常但是不完整
4开头,临时信息

进去之后,
cd :进入目录
is :查看
put :用于上传
get rhci.iso :则用于下载,下载到哪了?下载到登陆之前的当前目录了。
mput :一次性上传多个
mget :一次性下载多个
!pwd :加叹号,然后跟命令,直接使用你在之前的登陆端的命令
!pwd :则显示登录ftp之前的客户端的命令
lcd : 直接切换你在登录之前的目录
lcd /var/tmp
bye: 退出ftp
help:查看支持哪些命令

但是ftp命令不强大,不能支持tab,不支持目录下载。
所以有了
------------------------------------------------------------
【lftp】 命令
lftp 192.168.0.254
基本都跟ftp命令一样

mirror :镜像,可以直接把某个目录镜像到本机下。(即为下载)
mirror Files/ 则下载了Files目录下的所有文件
-----------------------------
lftp -u ftp,ftp 192.168.0.254
这是匿名登录,用ftp名字,并且以ftp为密码,登录。
--------------------
lftpget : 专门用于下载的。使用方法类似于get
-c 支持断点续传

------------------------------------------------------------
图形界面的ftp工具,【gftp】
yum install gftp 则用于安装
------------------------------------------------------------
【ping】
-c :指定检测次数
-W :指定检测时间
-l :指定数据包长度
------------------------------------------------------------
【traceroute】 : 追踪路由命令
基于ping命令实现的
traceroute URL
------------------------------------------------------------
DNS的客户端工具
【dig】命令
正向的:dig -t A FQDN
反向的:dig -x IP
------------------------------------------------------------
【host】命令
正向:host -t A FQDN
反向:host -t PTR IP
比如我们要知道A记录:
host -t A instructor.example.com
dig -t A instructor.example.com

知道ip地址,如何知道主机名称
host -t PTR 191.168.0.254
dig -x 192.168.0.254
------------------------------------------------------------
【netstat】 :非常强大的网络命令
既可以实现监听的服务,也可以查看连接,查看路由表等等
-t 显示已经建立的tcp的连接
-u 显示正在通信的udp的连接
-l 监听的所有服务
可以命令组合
比如
-lt -lu

-n 表示以数字的方式,解析主机地址。而不要以主机名的形式
-tunl 则以数字的方式显示以tcp udp连接的所有服务

-p 可以显示,正在监听的服务到底是由哪个进程提供的。
----------------------------------
-r 查看本机路由表
比如: netstat -r
等于 route -r
组合
-rn -tnl -unl -tunl -tunlp
---------------------------------------------------------------------
如何去创建连接?
【ln】 命令:ln [options] 源文件 链到什么地方去
-s : 创建软链接
-v :能显示创建过程

例如:
ln /var/tmp/Files/setif.sh /tmp/setif2.sh -v
则创建硬链接:setif.sh到目录中的setif2.sh并显示创建过程
创建后,setif.sh 发现链接数加1.

例如:
ln -sv /var/tmp/Files/rh033.txt /tmp
在tmp下创建软链接rh033.txt。
创建软链接的时候,一定要用绝对路径创建,尽量不用相对路径。
当你复制软链接的时候,复制的其实是链接的原文件。
---------------------------------------------------------------------
【df】:显示分区,文件系统
-h: 单位换算
-i :显示节点号的相关信息
---------------------------------------------------------------------
【du】 : 查看目录/文件大小的
-s : 只看目录统计
-h : 单位换算
---------------------------------------------------------------------
【/dev】 目录下的文件。【特殊文件】:
特殊文件不需要大小。
特殊文件只是访问一个设备的入口而已。而不表示设备文件所对应的内容有哪些。
它不在磁盘的磁盘块中存储,所有的东西都在inode里。
两个数字: 用于表示这个设备的类型。
前一个数字,代表大类, 后一个数字代表小类
主设备号, 次设备号。

创建设备文件:
---------------------------------------------------------------------
【mknod】 : 表示用于创建设备文件的。
mknod mydevice c 201 1
创建 名字 类型 主设备号 次设备号

设备文件不能跨系统重启而存在。
这里的文件是在每一次设备重启的时候自动创建的。
早期的dev目录下有上万个文件,因为他不能判断到底有没有这个设备。
2.6内核之后,除了一个叫UDEV的东西,在系统启动的时候会自动检测硬件信息,并自动创建特殊文件。
---------------------------------------------------------------------
【at】/【batch】
at 能够接受各种各样时间的制定方法,比如在某月某天,或者中午,午夜,或者往后3小时
at [options] TIME 明确制定几点几分时,是下一次的几点几分。
at>
at>
完成后用 Ctrl+d 提交
at作业不会将内容显示到屏幕上,而是将内容发送成邮件
------------------------------------
查看at作业队列
at -i 或者 atq
---------------------------------
如何删除作业
at- d N 用于删除编号为N的作业。
--------------------------------------
如何接受邮件:
只用输入 mail 即可。
在mail 里,按相关数字能直接看相关邮件
输入 d 1 则删除第一封
输入 d * 则删除所有
按 q 则退出
-------------------------------------
比如:从此刻开始过两分钟后执行某个特定任务
at now+2min
at>ls /etc
at>cp /etc/inittab /tmp
用Ctrl+D提交。

-f FILES:at也支持把一个作业命令写在一个文件里,则从文件中读取命令让at执行
---------------------------------------------------------------------
【batch】:跟at基本一样,但是batch 不许要制定时间,它会自动在系统负载比较低的时间运行。
---------------------------------------------------------------------
【crond】 : 按照某个周期固定运行的命令
这属于一个服务可以用
service crond status 来调用查看

一类:系统crond:为了维护系统的正常运行,跟用户无关,所有的作业都规定在/etc/crontab,而这个文件又被列成了N小片
一类:用户crond:用户自己的crond作业。会在跟用户名同名的/var/spool/cron/USERNAME下

系统级别的是定义以哪个身份运行
一般都是由6个字段来定义的
-------------------------------------------
用户crond 6段字符
min hour day month weed COMMAND
min:[0-59]
hour [0-23]
day [1-31]
month [1-12]
week: [0-7]

比如执行ls 命令
10 02 03 * * ls

crond 只搜索/bin ;/sbin; /usr/bin ; /usr/sbin
如果不想将命令写入这些sh里那就使用绝对路径
命令执行结束之后,也是发邮件到邮箱的

比如:每个两分钟就执行一下date命令。
2 * * * * date : 但这是每个小时的第二分钟,并不表示每两分钟
*/2 * * * * date:
数字啊前 加 */ 则能表示“每”

比如:每3个小时:
10 */3 * * * date

/ : 表示除,表示“每”
, : 表示离散时间 表示值中的的第多少分钟/小时/...,
20,50 * * * * date 每小时的第20分钟和50分钟
- : 表示从几到几
10 00 * * 1-5 date 每周一到周五的10:00执行
----------------------------------------------------
crontab
-e : 编辑任务计划
-r :移除任务计划
-l :列出任务计划
-u USERNAME :帮其他人定义计划。

比如:
crontab -e 之后,会打开任务计划
*/1 * * * * /bin/echo "How are you?"
---------------------------------------------------
【系统级别】的crond
min hour day month weed USER COMMAND
分 小时 天 月 周 以谁的身份 什么命令
/etc/crontab
里面
/MAILTO= : 必须指定到底发给谁

run-parts: 每当每个小时的第一分钟到来的时候,他就会把这个目录下的某个脚本执行一下。
目录里,数字越小,越靠前的优先级越高。

每隔两分钟就同步时间

crond 的缺陷
它是用来被设计在服务器上的。它是7x24 开机着得
当命令被关机的时候而不能执行的时候,则就不执行了。

crontab有个服务,能够判断你的任务到底执行了没有,如果没有执行,则会寻求某个时间点来执行。通常可以定义开机后多长时间来执行。
这个服务叫
anacron :只能用作cron的补充,服务默认是关闭的。
比如查看一下 service anacron status
它所有的配置都在 /etc/anacrontab下
格式如下:
周期多长(天) 开机之后多长时间执行 作业描述符 执行什么命令
比如 1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly

============================================================
如何在脚本中实现信号捕捉:
【trap】 命令:
trap 'COMMAND' SIGNAL
比如,要捕捉对方发的ctrl+C 而且不让他退出,并显示:我就不退出
脚本:
trap 'echo "NO quit..."' 2 ## ctrl+C的信号是 2 或者写成 SIGINT

trap 'echo "NO quit..." ; exit 1' 2
kill 信号是无法捕捉的,不能让自己就不死。

但是如果trap想要执行的东西太多的话,光靠写一个句子已经不行了,所以要调用函数!
CLEANUP () { ## 先写一个函数
echo ""
echo ""
exit
}

trap 'CLEANUP' SIGINT #捕捉到信号,调用函数
---------------------------------------------------------------------
【bashname】,可以快速的取出这种基名。
---------------------------------------------------------------------
作者 “For The Dream”

上一篇:帐号管理
下一篇:Linux命令技巧