linux-基本命令1

来源:互联网 发布:网络语言橘子什么意思 编辑:程序博客网 时间:2024/05/18 00:01

1 Linux命令简介

1.1 命令格式

[root@test root]# command [-options] parameter1 parameter2 ...                    指令    选项       参数(1)     参数(2) 

说明:

1. 提示符:root账户提示符为#,一般身份用户提示符为$ 
2. 指令:区分大小写
3. 选项:可以使用-h或者--help
4. 指令太长:可使用\符号使指令连续到下一行
5. 使用分号表示连续执行:ll bashrc ; ll --time=atime bashrc ; ll --time=ctime bashrc

命令转义:

[root@test root]# \command
这样就使用原来的命令而不是alias

1.2 参数含义

一般来说,linux的命令参数有其一般含义:

-f       --force          略过不存在的文件,不显示任何信息-i       --interactive    进行任何删除操作前必须先确认-r/R     --recursive      同时删除该目录下的所有目录层-h       --h是可以以k M G 等等为单位,不是只显示一个数字-h       --help           显示此帮助信息并离开-v       --verbose        详细显示进行的步骤-v       --version        显示版本信息并离开

1.3 切换终端

切换文字终端和图形界面:

 [Ctrl] + [Alt] + [F1] ~ [F6] :文字界面登陆 tty1 ~ tty6 终端机; [Ctrl] + [Alt] + [F7] :图形桌面。

1.4 基础命令练习

date日期cal日历bc计算器Ctrl + c中断目前程序Ctrl + d退出exit[Tab]命令与档案补全,ca[tab][tab] ,显示所有以ca开头的文件q很多指令常定义的退出钮

1.5 linux快捷键

ctrl-c 发送 SIGINT    信号给前台进程组中的所有进程。常用于终止正在运行的程序
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF
ctrl-l 清屏
ctrl-r 逆向搜索包含输入字符串的命令,继续按 Ctrl+r,再向上搜索,可使用 Ctrl+c 中断命令

在终端直接上翻,下翻【比如ls输出太多,看不到上面显示的】

SHIFT+ PAGEUP
SHIFT + PAGEDOWN

1.6 linux查询命令man_info

man的脚本:
/usr/man/man1   一般命令─在shell中执行的命令 
/usr/man/man2   系统调用─关于核心函数的文档 
/usr/man/man3    C库调用─libc函数的使用手册页 
/usr/man/man4   特殊文件─关于/dev目录中的文件的信息 
/usr/man/man5   文件格式─/etc/passwd和其他文件的详细格式 
/usr/man/man6   游戏 
/usr/man/man7   宏命令包─对Linux文件系统、使用手册页等的说明 
/usr/man/man8   系统管理─根操作员操作的使用手册页 
/usr/man/man9   核心例程─关于Linux操作系统内核源例程或者内核模块技术指标的文档
查询linux c函数open#man 2 open

man命令的文档目录在/usr/share/doc 

空格下翻一页[Page Up]上翻一页[Page Down]下翻一页[Home]第一页[End]末页/String向下查询String?String向上查询Stringn,Nn表示下一个匹配,N表示上一个匹配q退出

1.7 linux查看文件命令

1.7.1 直接查看cat_tac_nl

cat: 由第一行开始显示文件内容  

cat -n  显示行号 cat -A  显示特殊字符

tac: 从最后一行开始显示文件内容,可以看出 tac 是 cat 倒写形式
nl  : 显示的时候,顺便输出行号!

1.7.2 可翻页查看more_less

more: 一页一页的显示文件内容
less:与more 类似,但是比 more 更好的是,他可以往前翻页!
空格下翻一页[Page Up]上翻一页[Page Down]下翻一页[Home]第一页[End]末页/String向下查询String?String向上查询Stringn,Nn表示下一个匹配,N表示上一个匹配q退出

1.7.3 数据选取head_tail

head: 只看头几行

#假设a.txt有100行head a.txt       #默认显示前10行(L1~L10)head -n 20 a.txt #显示前20行(L1~L20)head -n -10 a.txt#打印末尾10行之前(L1~L90)

tail: 只看结尾几行

#假设a.txt有100行tail a.txt   #默认显示最后10行(L91~L100)tail -n 20 a.txt #显示最后20行(L81~L100)tail -n +50 a.txt #显示50行以后内容(L51~L100)tail -f tester.log #动态追踪tester.log的最后10行,直到用户输入Ctrl+c
综合示例:

查看a.txt的L11~L20head -n 20 a.txt | tail -n 10 

1.8 命令file:查看文件类型

查看文件类型
file 文件名

查找文件三种方法的比较:
which  cd      #查找的是命令,参数-a将所有可以找到的指令均列出,而非第一个。whereis passwd #查找的是档案名(命令)     从数据库中找,快,非最新,系统的一般有,临时新建的不一定。不能通配符locate  passwd #查找的是档案名(命令)       从数据库中找,快,非最新,系统的一般有,临时新建的不一定。不能通配符find  /etc  -name '*passwd*' #查找的是档案名(命令)  遍历硬盘,慢,最新,能通配符。

1.9 命令history:搜索历史命令

bash将使用过的旧命令记录在家目录下的~/.bash_history 文件下(默认1000条)。特别的,~/.bash_history 记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在暂内存中,当您成功的注销系统后,该指令记忆才会记录到 .bash_history 当中!

定义命令别名:alias ll='ls -al',定义过的别名可以用alias 来查询。

列出目前最近的 3 笔资料
[root@linux ~]#history 3
 
利用history执行命令
[root@linux ~]#!number[root@linux ~]#!command[root@linux ~]#!!
参数:
number:执行第几笔指令的意思;
command :由最近的指令向前搜寻"指令串开头为 command"的那个指令,并执行;
!!:就是执行上一个指令(相当于按↑按键后,按 Enter)


统计命令使用频率

cat history.bak | awk '{for(i=1;i<=5;i++) $i=""; print}' | sort | uniq -c | sort -r -n > history.sort.bak 

1.10 命令time:测量程序运行时间

#time find . -name "mysql.sh" real    0m5.064s      <== 实际使用时间(real time) user    0m0.020s      <== 用户态使用时间(the process spent in user mode) sys     0m0.040s      <== 内核态使用时间(the process spent in kernel mode)


1.11  命令alias:加入命令别名

系统设置永久,给全系统使用/etc/bashrc
source /etc/bashrc用户设置永久,给个人用户使用~/.bashrc
source /home/xxx/.bashrc 命令行设置临时,当次有效#alias cl='clear'

BASH Shell的配置文件:

1,系统设定值
所谓的系统设定值,也就是每个用户进入到bash shell之后先读取的配置文件.默认有以下几个:
    (1),/etc/profile:  此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
    (2),/etc/bashrc:   为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
    (3),/etc/man.config: 此文件的内容规范了使用man时man page的路径在哪里.
2,个人设定值
个人设定值就是存在个人根目录的那几个隐藏文件.
    (1),~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
    (2),~/.bashrc:  该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.(每个用户都有一个.bashrc文件,在用户目录下)
    (3),~/.bash_history: 此文件用于记录曾经用过的命令.
    (4),~/.bash_logout:  当每次退出系统(退出bash shell)时,执行该文件. 

3,加载过程

在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

常用的alias(可以作为临时alias,命令行输入)

alias ..='cd ..'alias ...='cd ../..'alias cd..='cd ..'alias l='ls -lthr'alias la='ls -la'alias ll='ls -l'alias ls='ls --color'alias ls-l='ls -l'alias md='mkdir -p'alias rd='rmdir'alias mv='mv -i'alias cp='cp -i'alias rm='rm -i'alias mydf='df -h && df -ih'alias o='less'alias p='ps ux'alias cl='clear'alias vi='vim'alias mks='make 2>&1 | grep -v "#warn" | grep '\''warning\|error\|undefined'\'''#命令拓展alias datee='date +'\''%Y-%m-%d %H:%M:%S , tp=%s'\'''alias ip='/sbin/ifconfig | grep -a '\''inet addr'\'' | sed -e '\''/127\.0\.0\.1/d;s/.*inet addr:\([0-9\.]\+\).*/\1/'\'''#用户设置alias cci='cd /data/home/xxx/; ./cci.sh'

1.12 命令useradd

新加一个用户:

useradd book -d /data/home/book -m
其中-d表示指定主目录,-m表示如果主目录不存在则新建主目录。

passwd book

设置密码

1.13 命令id

显示用户的ID,以及所属群组的ID。

#id rootuid=0(root) gid=0(root) groups=0(root)


1.14 命令who:查看谁在线

请使用who这个命令来查看当前正在登录的用户

[root@localhost http]# whoroot     tty1         Apr  9 13:17http     pts/0        Apr 16 15:13 (192.168.8.235)http     pts/1        Apr 16 15:13 (192.168.8.235)

1.16 命令screen:多窗口

功能说明: 

使用telnet或SSH远程登录linux时,如果连接非正常中断(远程机器关闭),重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。


我的用法:

1,开启一个screen并进入:

screen -S test1        #这里用-S表示给screen起名字,以后切换的时候比较方便。这时就进去了screen test1了。里面可以跑一些程序。

2,退出该screen:

Ctrl-a d                       #这里的ctrl-a表示同时按ctrl键和a键,然后再单独按d键。这时退到跟终端。

3,在根下查看开启的所有screen:

screen -ls                  # 比如会有25764.test1     (Detached)等。

4,在根下进入某个screen:

screen -r test1          #这时又进入到指定的screen session中,或者screen -r 25764。

5,关闭该session:

exit                              #在该screen中退出,退到根下。

6,强制连接,踢掉原来的

screen -D -r 20791

screen -x -r 20791(共享原来的)

7,当前窗口假死,强制关闭当前窗口,跳到下一个

Ctrl-a  K

8,上翻

Ctrl-a  Ctrl-[  

语  法:

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

补充说明:

screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。

参  数:

-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

常用screen参数:

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> Help,显示简单说明
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window 
C-a p -> Previous,前一个 window 
C-a 0..9 -> 切换到第 0..9 个window
Ctrl+a [Space] -> 由視窗0循序換到視窗9
C-a C-a -> 在两个最近使用的 window 间切换 
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里    每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令則可回去。
C-a w -> Windows,列出已开启的 windows 有那些 
C-a t -> Time,显示当前时间,和系统的 load 
C-a K -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
    C-b Backward,PageUp 
    C-f Forward,PageDown 
    H(大写) High,将光标移至左上角 
    L Low,将光标移至左下角 
    0 移到行首 
    $ 行末 
    w forward one word,以字为单位往前移 
    b backward one word,以字为单位往后移 
    Space 第一次按为标记区起点,第二次按为终点 
    Esc 结束 copy mode 

C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上

C-a : ->输入命令(quit/split等):

除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。

--End--


~/.screenrc的配置

# ~/.screenrc##  用系统的一些设置shell -$SHELL# 避免类似进入vi退出后屏幕刷新不完altscreen on## 启动时不显示欢迎屏幕startup_message off## hangup时自动detachautodetach on## 一个screen die,不冻结整个screennonblock on## UTF-8 is necessary.defutf8 on## Change default scrollback value for new windows: scrollback 10000defscrollback 10000## start with visual bell as defaultvbell offvbell_msg "Bell on %t (%n)"## 在最下一行显示窗口列表和时钟hardstatus onhardstatus alwayslastlinehardstatus string "%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d %c:%s "## default windowsscreen -t shell 0screen -t vim 1## 按 Ctrl-Z w 或 Ctrl-Z Ctrl-W 显示窗口列表bind w windowlist -bbind ^w windowlist -b## 定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按 Ctrl-Z z。默认是Ctrl-a#escape ^Zz




【注】:

问题:
在使用screen的时候,相信不少同学碰到过这样的问题:使用screen启动一个新窗口之后,之前shell配置文件(比如:~/.bashrc)里定义的变量和alias全部失效。自己不得不使用“. ~/bashrc”又重新加载一遍配置,就这样,启动一个窗口,手动加载一次,非常繁琐麻烦。
解决方案:
在screen的配置文件.screenrc里增加配置项
shell -$SHELL
这句话的意思是:screen启动窗口后,自动加载当前shell的配置文件(比如:~/.bashrc),当然SHELL变量已经是定义好的


问题:
linux中显示中文OK:
echo $LANG
en_US.UTF-8
但是screen中不能正确显示中文,

解决方法:
设置~/.screenrc
defencoding GBK
encoding UTF-8 GBK


遇到一个问题,每次一关闭SecureCRT screen中的字体设置就有问题,需要重新关闭screen,再开启。【未解决】



5 系统服务

5.1 命令ps:进程管理

5.1.1 三种常用范式

查阅仅自己bash相关进程:
#ps ux
查阅所有运行进程命令:
#ps aux  #ps -ef   //多了一项ppid#ps -axj  //包括 PPID   PID  PGID   SID#ps -o pid,ppid,pgid,tpgid,sid,comm  //指定选项

5.1.2 “ps aux” 说明

“ps -ef”比“ps aux”多一项PPID

$ps aux |moreUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot         1  0.0  0.0  10348   624 ?        Ss   Apr29   0:22 init [3]root         2  0.0  0.0      0     0 ?        S<   Apr29   0:40 [migration/0]root         3  0.0  0.0      0     0 ?        SN   Apr29   0:25 [ksoftirqd/0]root         4  0.0  0.0      0     0 ?        S<   Apr29   0:00 [watchdog/0]root         5  0.0  0.0      0     0 ?        S<   Apr29   0:12 [migration/1]root         6  0.0  0.0      0     0 ?        SN   Apr29   0:18 [ksoftirqd/1]root         7  0.0  0.0      0     0 ?        S<   Apr29   0:00 [watchdog/1]root         8  0.0  0.0      0     0 ?        S<   Apr29   0:10 [migration/2]root         9  0.0  0.0      0     0 ?        SN   Apr29   0:16 [ksoftirqd/2]root        10  0.0  0.0      0     0 ?        S<   Apr29   0:00 [watchdog/2]
上述解释如下:
USER  用户名PID   进程ID(Process ID)PPID  父进程的进程ID(Parent Process id)%CPU  进程的cpu占用率%MEM  进程的内存占用率VSZ   进程所使用的虚存的大小(Virtual Size)RSS   进程使用的驻留集大小或者是实际内存的大小,Kbytes字节TTY   与进程关联的终端(tty),若与终端无关,则显示(?),否则显示类似(pts/0)等STAT  进程的状态:进程状态使用字符表示的(STAT的状态码)START 进程启动时间和日期TIME  进程使用的总cpu时间COMMAND  正在执行的命令行命令
STAT狀態位常見的狀態字符
D (Uninterruptible sleep)无法中断的休眠状态(通常 IO 的进程)【比如写core的时候】;R (Runnable)正在运行或在运行队列中等待S (Sleeping)休眠中, 受阻, 在等待某个条件的形成或接受到信号T (Terminate)停止或被追踪;W 进入内存交换  (从内核2.6开始无效);X 死掉的进程   (基本很少見);Z (Zombie)僵尸进程;< 优先级高的进程N 优先级较低的进程L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);+ 位于后台的进程组;

5.1.3 未知执行命令时:pgrep

根据关键字查找进程

$ pgrep chrome3257532580...


或使用pstree查看

$ pstree -p | grep chrome           |-chrome-sandbox(32582)---chrome(32583)-+-chrome(32622)-+-{chrome}(32625)           |                                       |               |-{chrome}(32627)...

5.1.4 已知执行命令时:ps

2.1 直接查找命令:

【已知:跑了以python2.7开头的很多命令】

ps -ef | grep python2.7

$ps -ef | grep python2.7admin    18535 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18536 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18537 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18538 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18539 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    19218  8361  0 14:24 pts/0    00:00:00 grep python2.7
2.2 过滤命令:
ps -ef | grep python2.7 | grep -v grep | grep tester.py
$ps -ef | grep python2.7|grep tester.pyadmin    18535 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18536 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18537 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18538 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan runadmin    18539 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run

2.3 打印进程号:

ps -ef | grep python2.7|  grep -v grep | grep tester.py | awk'{print $2}'

$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'1853518536185371853818539
ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}' | wc -l 
$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'| wc -l5

2.4 杀死进程

ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}' | xargs kill -9

$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'| xargs kill -9

【另,如果确认之生成了进程python2.7 balabala】

亦可以killall python2.7

5.1.5 杀死进程:kill_killall

强制杀掉父进程

$ kill -9 32582
根据约定,当您发送一个挂起信号(信号 1 或 HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作(不需停止并重新启动服务)并重新加载它们的配置文件(动态更新服务配置)。
$ kill -HUP 32582$ kill -1 32582
或者删除与之相关所有进程
killall 杀的是运行命令的名字,比如起一个服务叫./newworld xxx xxx ,则killall newworld   会把这个杀掉,不用担心杀掉其他人的,因为没有权限。而这些启动命令可以在ps ux中看到【最后】。
$ killall chrome

5.2 命令crontab:定时作业

1,命令at:脱机+仅执行一次的job调度

服务名称:atd
服务启动:/etc/init.d/atd restart
设置开机时启动:chkconfig atd on
job默认写入位置:/var/spool/at/
使用限制文件:/etc/at.allow和/etc/at.deny
例1:5分钟后,将 /root/.bashrc 寄给 root 自己[root@www ~]# at now + 5 minutes  at> /bin/mail root -s "testing at job" < /root/.bashrcat> <EOT>   <==这里输入 [ctrl] + d 就会出现 <EOF> ,代表结束!job 4 at 2009-03-14 15:38# 说明第 4 个 at 工作将在 2009/03/14 的 15:38 进行!例2:设置 2009/03/17 23:00 关机?[root@www ~]# at 23:00 2009-03-17at> /bin/syncat> /bin/syncat> /sbin/shutdown -h nowat> <EOT>job 5 at 2009-03-17 23:00

2,命令crontab:循环执行例行性job

服务名称:crond
服务启动:/etc/init.d/crond restart
设置开机时启动:chkconfig atd on
job默认写入位置:/var/spool/cron/
使用限制文件:/etc/cron.allow和/etc/cron.deny

crontab命令格式:
crontab [-u username] [-l|-e|-r] -u :root帮其他使用者建立/移除 crontab 工作排程; -e :编辑 crontab的内容 -l :查阅 crontab 的内容 -r :移除所有的 crontab 的内容。(若仅要移除一项,请用 -e 去编辑)

针对用户的例行性job:
#crontab -e*  *  *  *  *  /usr/local/src/analog-5.32-lh/analog分 时 日 月 周 |<=============指令串=============>|
第1列表示分钟1~59 每分钟用*或者 */1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行的命令或脚本文件
表示日期的部分除了可以是数字外,还可以是一下特殊字符:
特殊字符代意义*(星号) 代表任何时刻。 如:52  12  *   *  * 表示任何月/周/日的5点52分,(逗号)代表分隔时段。如: 52  5,22  *  *  *表示任何月/周/日的5点或22点52分-(减号) 代表一段时间范围内。如: 52  5-8  *  *  *表示任何月/周/日的5点到8点内每个小时的52分。/n(斜线) 每隔 n 单位。如:20 */2  *  *  * 表示任意月/周/日的2、4、6...24等点20分
一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart上面的例子表示每晚的21:30重启apache。45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart上面的例子表示每月1、10、22日的4 : 45重启apache。10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart上面的例子表示每周六、周日的1 : 10重启apache。0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart上面的例子表示每星期六的11 : 00 pm重启apache。* */1 * * * /usr/local/etc/rc.d/lighttpd restart每一小时重启apache* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart晚上11点到早上7点之间,每隔一小时重启apache0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart每月的4号与每周一到周三的11点重启apache0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart一月一号的4点重启apache

针对系统的例行性job:
以root身份编辑主配置文件/etc/crontab文本文件,每隔一分钟,cron服务会读取一次/etc/crontab与/var/spool/cron里面的数据内容。并自动执行。
#cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root    #如果出现错误,或者有数据输出,数据作为邮件发给这个帐号HOME=/    #使用者运行的路径,这里是根目录# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly
/etc/crontab 文件使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。如果你想要增加一个任务到cron里,把运行任务的脚本(或者脚本的连接)放在对应的目录里;如果去掉run-parts这个参数的话,后面就可以写要运行的某个脚本的完整路径名,而不是文件夹名了。

3,命令\&:后台提交作业

command &

4,命令nohup:脱机+后台提交作业

nohup command &

5.3 命令jobs:作业管理

1,作业放在后台运行:&

#command &[1] 234     # [job number] PID

2,作业放到后台并暂停:Ctrl+z

#command[Ctrl+z][1]+ Stopped   ...

3,观察当前后台作业状况:jobs

#jobs -l[1]+ Stopped   /usr/bin/vim /etc/profile[2]- Stopped   /usr/bin/vim /etc/profile.conf
说明:上面的 -l 表示让列表现示作业号的PID,另外(+-)号,(+)号表示默认的作业,如我在bash中输入fg,则[1] 会被自动执行。

4,后台作业拿到前台处理:fg

#fg %jobnumber

5,让作业在后台运行:bg

#bg %jobnumber

6,杀死后台作业:kill

#kill -9 %jobnumber  #-9:立刻强制删除一个作业#kill -15 %jobnumber  #-15:以正常的程序方式终止一项作业.

5.4 命令chkconfig:将服务加入开机自启动

使用这个命令来设置系统在启动时候应该自动启动那些服务进程,该设置不会立即生效,只有等到下次系统重启的时候才会生效。

用法: 

# chkconfig --list         #查看系统中所有的服务在各个运行等级的情况。NetworkManager  0:off   1:off   2:on    3:on    4:on    5:on    6:offabrtd           0:off   1:off   2:off   3:on    4:off   5:on    6:offacpid           0:off   1:off   2:on    3:on    4:on    5:on    6:offatd             0:off   1:off   2:off   3:on    4:on    5:on    6:offauditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

#chkconfig --list mysqld   #查看系统中特定的服务在各个运行等级的情况。mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off

一般情况下在linux 系统中有7 个run levels。run level 的意思就是定义什么服务或者进程运行在系统中。每个运行等级在系统启动的时候启动的进程数量或者服务是不同的,所以这个运行等级是和服务进程密切相关的。init 进程一次只能运行在一个run level。

 --level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。      等级0表示:表示关机      等级1表示:单用户模式      等级2表示:无网络连接的多用户命令行模式      等级3表示:有网络连接的多用户命令行模式(文本模式)      等级4表示:不可用      等级5表示:带图形界面的多用户模式(图形模式)      等级6表示:重新启动

大部分的桌面系统都启动到运行等级5。大部分的服务器系统都启动到运行等级3。/etc/inittab 配置文件用户设置系统默认启动到的运行等级。

#chkconfig mysqld on        #启动mysqld服务。也可以后加--level 3


5.5 命令service:管理linux服务(其实是去/etc/init.d下读脚本)

service 使用这个命令来启动关闭服务只在本次系统运行期间有效,系统关闭重启以后上次所做的设置就无效了。

用file命令查看此命令会发现它是一个脚本命令(命令位于/sbin/service)。分析脚本可知此命令的作用是去/etc/init.d目录下寻找相应的服务,然后调用该服务脚本来进行开启和关闭等操作强烈建议大家将service命令替换为/etc/init.d/mysqld stop (因为有一些linux的版本不支持service),即:service mysqld start == /etc/init.d/mysqld start。

/etc/init.d目录在Linux系统中可是大名鼎鼎。它只负责一件事情,但却涉及到全系统。它包含系统中各种服务的start/stop脚本。init.d初始化脚本称之为System V风格初始化,是System V系统传统之一,后来成为一些Unix系统的共同特性的源头。

/etc/init.d这个目录下的脚本就类似于windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别),有选择的(根据运行级别)执行其中的服务脚本,因为系统并不需要启动所有的服务。

例如:开启httpd服务器

#service httpd {start|stop|status|restart|reload|force-reload}

主要选项包括:start表示启动,restart表示重新启动,stop表示关闭,reload表示重新载入配置,status表示给出状态。

如何知道现在系统中在跑的服务有那些?

#service --status-all| grep running

如何知道服务的名字?

你当然可以ll /etc/init.d

如果没有在/etc/init.d下找到服务脚本?

cp  /usr/local/mysql/share/mysql/mysql.server     /etc/init.d/mysql #把msql的脚本文件拷到系统的启动目录下chkconfig --add mysql           #将mysql加到启动服务列表里chkconfig mysql on              #让系统启动时自动打开mysql服务
概括为一般的步骤就是:写或找到该服务的启动脚本(不是简单的启动命令,而是有特定格式的),然后拷贝该文件到/etc/init.d/目录下,这个时候就可以用service name start来启动它了,因为service命令就是去查找该目录下的文件的。

service命令和chkconfig命令重启的区别?

service xxx start/stop  即刻生效,重启后失效
chkconfig xxx on/off    重启后永久生效

完整的服务测试流程

例1:【stand alone 的启动方式】观察 httpd ,再观察默认有无启动,之后以 chkconfig 配置为默认启动,并立即启动

#/etc/init.d/httpd status                      #查看发现该服务已停止httpd 已停止 #chkconfig --list httpd                        #查看发现不是默认开机自启动的httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off#chkconfig httpd on; chkconfig --list httpd    #配置为默认开机自启httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off#/etc/init.d/httpd start                       #配置为立刻启动# /etc/init.d/httpd status                     #查看状态发现的确开启了httpd 已启动
例2:【super deamon启动方式】查看 rsync 是否启动(rsync 是 super daemon 管理的),并将其设置为默认不启动,并关闭
#netstat -tlup | grep rsync                   #查看发现的确是由xinetd管理的,并且开启着tcp  0 0 192.168.201.110:rsync  *:*     LISTEN     4618/xinetdtcp  0 0 www.vbird.tsai:rsync   *:*     LISTEN     4618/xinetd#chkconfig --list rsync                       #查看发现时默认自启动的rsync           on  #chkconfig rsync off; chkconfig --list rsync  #配置为默认开机不启动rsync           off #/etc/init.d/xinetd restart                   #配置立刻重启(注意是xinetd)#netstat -tlup | grep rsync                   #查看发现的确关闭了
注:在linux 中/etc/services 配置文件中记录了各个服务的端口号

守护进程 (daemon) 简介?
1,stand alone (服务可单独启动) 
各服务脚本位置:/etc/init.d/*
各服务初始化配置文件:/etc/sysconfig/*
各服务各自的配置文件:/etc/*.conf
各服务启动方式:/etc/init.d/mysqld start  或用 service mysqld start

xinet(超级守护进程)本身是一个stand alone的服务:
xinetd脚本位置:/etc/init.d/xinet
xinetd配置文件:/etc/xinet.conf
xinetd启动方式:/etc/init.d/xinet start  或用 service xinetd restart 


2,super daemon (透过 xinetd 统一管理的服务) ,它是经过一个统一的 xinetd 来管理,因此可以具有类似防火墙管理功能。此外,管理的联机机制又可以分为 multi-threaded 及 single-threaded。
各服务初始化配置文件:xinetd管理的其他子服务的配置文件/etc/xinetd.d/*

启动方式:/etc/init.d/xinetd restart

5.6 命令strace:查看系统调用

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

>>strace touch 3.txtexecve("/usr/bin/touch", ["touch", "3.txt"], [/* 63 vars */]) = 0brk(0)                                  = 0x50a000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b9f5745a000uname({sys="Linux", node="Tencent64", ...}) = 0access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)open("tls/x86_64/librt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)open("tls/librt.so.1", O_RDONLY)        = -1 ENOENT (No such file or directory)
每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。

常用参数:

-c 统计每一系统调用的所执行的时间,次数和出错的次数等. -t 在输出中的每一行前加上时间信息. -tt 在输出中的每一行前加上时间信息,微秒级. -ttt 微秒级输出,以秒了表示时间. -T 显示每一调用所耗的时间. -e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. -e trace=file 只跟踪有关文件操作的系统调用. -e trace=process 只跟踪有关进程控制的系统调用. -e trace=network 跟踪与网络有关的所有系统调用. -e strace=signal 跟踪所有与系统信号有关的 系统调用 -e trace=ipc 跟踪所有与进程通讯有关的系统调用 -e abbrev=set 设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. -e raw=set 将指 定的系统调用的参数以十六进制显示. -e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. -e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5 -e write=set 输出写入到指定文件中的数据. -o filename 将strace的输出写入文件filename -p pid 跟踪指定的进程pid. 
典型用法:

#strace -o output.txt -T -tt -e trace=all -p 28979
跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。





原创粉丝点击