您的位置:首页 > 运维架构 > Linux

Linux命令简介

2014-12-24 09:46 190 查看

1 Linux命令简介

1.1 命令格式

[python]
view plaincopy

[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

1.2 参数含义

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

[plain]
view plaincopy

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

1.3 切换终端

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

[plain]
view plaincopy

[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 库调用─libc函数的使用手册页

/usr/man/man4 特殊文件─关于/dev目录中的文件的信息

/usr/man/man5 文件格式─/etc/passwd和其他文件的详细格式

/usr/man/man6 游戏

/usr/man/man7 宏命令包─对Linux文件系统、使用手册页等的说明

/usr/man/man8 系统管理─根操作员操作的使用手册页

/usr/man/man9 核心例程─关于Linux操作系统内核源例程或者内核模块技术指标的文档

[plain]
view plaincopy

查询linux c函数open
#man 2 open

man命令的文档目录在/usr/share/doc
空格下翻一页
[Page Up]上翻一页
[Page Down]下翻一页
[Home]第一页
[End]末页
/String向下查询String
?String向上查询String
n,Nn表示下一个匹配,N表示上一个匹配
q退出

1.7 linux查看文件命令

1.7.1 直接查看cat_tac_nl

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

[plain]
view plaincopy

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向上查询String
n,Nn表示下一个匹配,N表示上一个匹配
q退出

1.7.3 数据选取head_tail

head: 只看头几行

[plain]
view plaincopy

#假设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: 只看结尾几行

[plain]
view plaincopy

#假设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

综合示例:

[plain]
view plaincopy

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

1.8 命令file:查看文件类型

查看文件类型

[python]
view plaincopy

file 文件名

查找文件三种方法的比较:

[python]
view plaincopy

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 笔资料

[python]
view plaincopy

[root@linux ~]#history 3



利用history执行命令

[python]
view plaincopy

[root@linux ~]#!number
[root@linux ~]#!command
[root@linux ~]#!!

参数:

number:执行第几笔指令的意思;

command :由最近的指令向前搜寻"指令串开头为 command"的那个指令,并执行;

!!:就是执行上一个指令(相当于按↑按键后,按 Enter)

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

[plain]
view plaincopy

#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,命令行输入)

[plain]
view plaincopy

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 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

新加一个用户:

[plain]
view plaincopy

useradd book -d /data/home/book -m

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

[plain]
view plaincopy

passwd book

设置密码

1.13 命令id

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

[plain]
view plaincopy

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

2 文件与目录管理

2.1 命令ls

ls=Listing Files/SubFolders:列出文件/子目录

ls

ls -al

ls -alh

参数 :

-a显示全部文件(包括.开头的隐藏文件)

-l比较详细的列表

-h人类能看懂的比如把1024显示为1K

ls b*

列出以b开头的所有文件或文件夹(及其下的所有文件)

举例:

gexing111@gexing111-Lenovo-IdeaPad-Y470 ~ $ ls

Desktop latest.zip nox-dependencies.deb.1 Templates workspace

Documents Music Pictures test

Downloads newtxt Public Videos

eclipse nox-dependencies.deb swig-1.3.40 wordpress

其中有文件 latest.zip

则 :

gexing111@gexing111-Lenovo-IdeaPad-Y470 ~ $ ll l*

-rw-rw-r-- 1 gexing111 gexing111 4247824 2012-03-05 12:48 latest.zip

其中有文件夹Music

gexing111@gexing111-Lenovo-IdeaPad-Y470 ~ $ ll M*

total 0

-rw-rw-r-- 1 gexing111 gexing111 0 2012-03-09 14:31 1.txt

因为M开头的没有该文件,只有一个Music文件夹,这是唯一的,其实这时(M*)按Tab键就可以直接补全了,所以就不会显示文件夹名字。

其中的文件夹Pictures和Public都以P开头:

gexing111@gexing111-Lenovo-IdeaPad-Y470 ~ $ ll P*

Pictures:

total 456

-rw-rw-r-- 1 gexing111 gexing111 349353 2012-03-06 20:26 Screenshot at 2012-03-06 20:26:29.png

-rw-rw-r-- 1 gexing111 gexing111 105610 2012-03-08 23:12 Screenshot at 2012-03-08 23:12:19.png

Public:

total 0

注意 total是文件总大小。

有时ll是 ls -al的简写

[plain]
view plaincopy

ls -Sl :按照文件大小大到小排序是
ls -Slr :按照文件大小从小到大排就加个-r

所有参数 :

-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来

-A :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录,一起列出来

-l :除文件名称外,亦将文件类型、权限、拥有者、文件大小等信息详细列出

-h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;

-r :将排序结果反向输出,例如:原本文件按英文字母顺序由小到大,反向则为由大到小;

-R :递归连同子目录内容一起列出来;

-t :依时间排序

2.2 命令cd

cd=Change Directory :更改目录
. 代表此层目录

.. 代表上一层目录

- 代表前一个工作目录

~ 代表“目前用户身份”所在的主目录

~account 代表 account 这个使用者的主目录

与此相关的命令:

[plain]
view plaincopy

cd [相对路径或绝对路径]
cd #表示进入家目录
cd ~ #表示进入家目录
cd - #表示进入前一个目录
cd .ssh #因为.ssh前面的点表示隐藏的文件夹 可以从 ls -al 看出来

2.3 命令pwd

pwd=Print Working Directory:显示当前目录

[plain]
view plaincopy

pwd [-P]
pwd -P #-P表示打印真正的路径,而非链接路径。

2.4 命令mkdir

mkdir=Make Directories:新建文件夹

[plain]
view plaincopy

mkdir [-mp] 目录名称
mkdir -p test1/test2/test3 #-p表示递归的建立目录
mkdir -m 711 test #-m表示建立目录同时设置权限

2.5 命令rmdir

rmdir=Remove Directories:删除文件夹

[plain]
view plaincopy

rmdir [-p] 目录名称
rmdir -pv test1/test2/test3 #-p表示连同上层的空目录也一起删除; -v表示显示过程

2.6 命令rm

rm=Remove Files:删除文件/文件夹

rm -vf backup.zip

强制删除backup.zip这个文件并不需确认,列出删除文件列表,一般还是别强制删除,除非你知道你在干嘛…

-v一般v参数都是显示过程的意思

-f 一般force的意思,即强制删除

rm -rf backup

删除backup这个文件夹,包含它的子文件和子文件夹

删除文件用上面的命令,但删除文件夹的时候就需要跑下遍历了

-r 在所有命令里都是 recursive 的意思,有些命令是大写的 R 需要注意

2.7 命令mv

mv=Move:移动文件/重命名
mv backup.zip sayhosts.com

重命名backup.zip为sayhosts.com

如果加路径,就是移动到某个路径并重命名为sayhosts.com

2.8 命令cp

cp=Copy:拷贝文件
cp backup.zip sayhosts.com

复制backup.zip这个文件并重命名为sayhosts.com

cp -r test test2

递归将文件夹test拷贝到test2

cp -a test test2

参数-a :相当于 -pdr 的意思,即递归将所有文件包括时间等属性都复制过来。

2.9 命令chmod:更改文件权限

chmod 777 backup.zip

默认文件为644,文件夹为755,用这个命令就可以改成我们常用的777权限了

2.10 命令chown:更改属主

如果路径/var/www/html/lineage没有权限访问,可以更改其属性:

chown admin:admin /var/www/html/lineage -R

2.11 命令df:显示磁盘使用率

df -h

显示整个主机的总容量以及比率

2.12 命令du:查看文件夹总容量

du -sh dir

-s就是summary,只输出当前文件夹总容量

-h一般在linux就是human给人看的意思,会把1048580b转换为1mb显示

du -h --max-depth=1
只列出当前文件夹和第一级子目录占用大小

而用ls dir的话只是列出其目录(而非其下所有文件)的大小,一般一个目录大小<=4K都记为4K。

2.12 命令ln:硬链接软链接

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。



前提必须清楚一点,当指向数据的文件个数为0 时,数据块就会被释放掉,硬链接相当于硬盘上一块数据的多个指针,而软链接相当于指向数据指针的指针。

【硬连接】

硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

【软连接】

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

实验






[plain]
view plaincopy

[oracle@Linux]$ touch test #创建一个测试文件test
[oracle@Linux]$ ln test f1 #创建test的一个硬连接文件f1
[oracle@Linux]$ ln -s test f2 #创建test的一个软连接文件f2(符号链接)
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 test
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f2 -> test

从上面的结果中可以看出,硬连接文件f1与原文件test的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

[plain]
view plaincopy

[oracle@Linux]$ echo "I am test file" >>test
[oracle@Linux]$ cat test
I am test file
[oracle@Linux]$ cat f1
I am test file
[oracle@Linux]$ cat f2
I am test file
[oracle@Linux]$ rm -f test
[oracle@Linux]$ cat f1
I am test file
[oracle@Linux]$ cat f2
cat: f2: No such file or directory

通过上面的测试可以看出:当删除原始文件test后,硬连接f1不受影响,但是符号连接f2文件无效

总结

依此您可以做一些相关的测试,可以得到以下全部结论:

1).删除符号连接f2,对test,f1无影响;

2).删除硬连接f1, 对test,f2也无影响;

3).删除原文件test,对硬连接f1没有影响,导致符号连接f2失效;

4).同时删除原文件test,硬连接f1,整个文件会真正的被删除。

使用

比如我要建立一个目录 xiaobao->/asp/disk8/xiaobao

[plain]
view plaincopy

[admin@r42h06021.xy2.xxx.com]$df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 1.8T 13G 1.8T 1% /aps/disk1
/dev/sdc1 1.8T 13G 1.8T 1% /aps/disk2
/dev/sdd1 1.8T 13G 1.8T 1% /aps/disk3
[admin@r42h06021.xy2.xxx.com]$cd /aps/disk3
[admin@r42h06021.xy2.xxx.com]$mkdir xiaobao
[admin@r42h06021.xy2.xxx.com]$cd -
[admin@r42h06021.xy2.xxx.com]$ln -s /aps/disk3/xiaobao xiaobao
[admin@r42h06021.xy2.aliyun.com]$ll
lrwxrwxrwx 1 admin admin 30 Nov 20 11:31 xiaobao -> /apsarapangu/disk3/xiaobao

2.13 命令dd:指定块拷贝

dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

[plain]
view plaincopy

#创建一个100M的空文件
dd if=/dev/zero of=hello.txt bs=100M count=1

2.14 命令mount:挂载设备

以Linux挂载U盘为例(默认设备最开始在/dev/下,需要挂载到/mnt/usb下):

1、插入u盘到计算机,如果目前只插入了一个u盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件名称为:sda1。

2、在mnt目录下先建立一个usb的目录 mkdir /mnt/usb

3、挂载U盘:mount -t vfat /dev/sda1 /mnt/usb

4、卸载U盘:umount /mnt/usb

5、删除usb目录:rm -rf /mnt/usb

3 基本命令

3.1 shell脚本:在一堆JAR包中找CLASS

for f in `find *.jar`; do jar tvf $f |grep -i GrammarSanity.class ; echo $f; done



另,find:可以列出目录下的相对目录
find ./lib/*

3.2 命令wget
:获取远程文件

wget http://wordpress.org/latest.zip
这样便可以非常方便的将wordpress最新版下载到服务器上当前目录,免去了下载、上传的麻烦。而且通过服务器去另外的服务器下载东东.

3.3 命令tar:压缩/解压缩

常见到的压缩文件的扩展名:

• *.Z compress 程序压缩的文件;

• *.bz2 bzip2 程序压缩的文件;

• *.gz gzip 程序压缩的文件;

• *.tar tar 程序打包的文件,并没有压缩过;

• *.tar.gz tar 程序打包的文件,并且经过 gzip 的压缩

[python]
view plaincopy

unzip latest.zip

如果压缩文档是zip格式的,那么就可以用unzip这个命令来解压。

[python]
view plaincopy

tar -czvf backup.tar.gz *

该命令就是将当前目录下所有文件打包保存成backup.tar.gz压缩包

-c创建

-z用gzip压缩方式

-v显示压缩过程

-f后接文件名

[python]
view plaincopy

tar -xzvf backup.tar.gz

把刚才打包成的一坨文件解压出来放到当前目录下

-x解压缩

-z用gzip压缩方式

-v显示压缩过程

-f后接文件名

3.4 命令uniq:进行文本排序

文本内容:

[python]
view plaincopy

good
nice
room
nice
nice
good

进行排序,并统计单词数目:

[python]
view plaincopy

sort 1.txt | uniq -c | sort -n -r | tee 2.txt

其中第一步sort 1.txt,先进行字母排序:

[python]
view plaincopy

good
good
nice
nice
nice
room

然后进行uniq -c 统计:

[python]
view plaincopy

2 good
3 nice
1 room

然后再进行按数字大小由大到小排序sort的-n表示按数值比较,-r表示反序:

[python]
view plaincopy

3 nice
2 good
1 room

最后tee保存到文件同时输出。

3.5 命令tail:即时显示文件内容

[plain]
view plaincopy

tail -f tester.log

3.6 命令reset:shell屏幕字符乱掉

[plain]
view plaincopy

reset

可能是屏幕的缓冲区满了,原因未细究。

3.7 命令xargs:过滤器

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

[plain]
view plaincopy

find . -name "*.py" | xargs ls –l

如果“find . -name "*.py"”有两个结果a.py和b.py。那么这里xargs的作用就是将这两个结果分割并传递给ls -l。【结果默认都在结尾!】所以这里相当于:

[plain]
view plaincopy

ls -l a.py
ls -l b.py

xargs特别适合与find(find其实功能非常强大)一起使用,以下是两个例子:
xargs+cp/mv

因为这种的结果都不是在末尾处,而是在cp/mv命令的中间。

[cpp]
view plaincopy

find . -newer meta.h | xargs -i{} cp {} ../testMYSQL/
find . -newer meta.h | while read line; do mv $line ../testMYSQL/ ; done

3.8 命令md5sum:检验两个文件是否相同

如检验Jar包是否更新过代码

[plain]
view plaincopy

[admin@r42h06016.xy2.xxx.com]$md5sum myJar.jar
061ea1d09a2e52036359a008e27efefe myJar.jar

也可以把多个文件的报文摘要输出到一个md5文件中,这要使用通配符*,比如某目录下有几个sh文件,要把这几个sh文件的摘要输出到sh.md5文件中,命令如下:

[plain]
view plaincopy

[admin@r42h06016.xy2.xxx.com]$md5sum *.sh > sh.md5
c79f5d1a2625475790ac374b6a92cded oneKey.sh
412b7b3fdfdbc9ef493e6cde3fa3254f run_mr.sh
e63c74df12477857364db4c0245559da trans_file.sh

3.9 命令grep:文本字符串查找

[plain]
view plaincopy

cat file | grep -i '\<nice\>'

-i选项忽略大小写,一般正则表达式用单引号‘ ’括起来,后面的‘\<word\>’是正则表达式匹配一个完成单词,前后有空格的。

[plain]
view plaincopy

ps aux| grep -v grep | grep python

-v选项表示反选后面的单词

命令格式:

[python]
view plaincopy

[root@linux ~]# grep [-acinv] 'pattern' filename

参数:

-a :将 binary 档案以 text 档案的方式搜寻数据

-c :计算找到 '搜寻字符串' 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

3.10 命令cut:文本行处理

[plain]
view plaincopy

[root@linux ~]# cut -d '分隔字符' -f fields
[root@linux ~]# cut -c 字符区间

参数:

-d :后面接分隔字符。与 -f 一起使用;

-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;

-c :以字符 (characters) 的单位取出固定字符区间;
示例1:将 PATH 变量取出,我要找出第三个路径。

[python]
view plaincopy

[root@linux ~]# echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games:
[root@linux ~]# echo $PATH | cut -d ':' -f 5 #以:作为分隔符,取第5个,输出:/usr/local/bin
[root@linux ~]# echo $PATH | cut -d ':' -f 3,5 #取第3个~第5个
[root@linux ~]# export
declare -x HISTSIZE="1000"
......其它省略......
[root@linux ~]# export | cut -c 12-
HISTSIZE="1000"
......其它省略......
# 知道怎么回事了吧?用 -c 可以处理比较具有格式的输出数据!我们还可以指定某个范围的值,例如第 12-20 的字符,就是 cut -c 12-20 等等!

3.11 命令awk:文本行处理

[plain]
view plaincopy

awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]

[plain]
view plaincopy

$awk -F: '$2!="x" {printf("%s no password!\n",$1)}' /etc/passwd
$awk '/sun/{print}' mydoc

其中-F 表示用什么来分割字段,'prog'= 'pattern {action}' 用来处理以什么模式来匹配,和怎么进行处理。

3.12 命令sed:文本行处理

[plain]
view plaincopy

sed [options] 'command' file(s)

将文件第20行~第80行转存到1.txt sed

[plain]
view plaincopy

$sed -n '20,80p' home/temp.txt > 1.txt

所有以file开头的文件中的a都替换为b:

[plain]
view plaincopy

$sed -i "s/a/b/g" file*

3.13 命令find:递归搜索文件名

[plain]
view plaincopy

find <指定目录> <指定条件> <指定动作>

1,最一般

[plain]
view plaincopy

$find /tmp -name "*.sh" -ls

2,忽略大小写

[plain]
view plaincopy

$find . -iname abcd

3.14 命令tee:打印并同时输出到文件

tee 命令读取标准输入,然后将程序的输出写到标准输出,并同时将其复制到指定的一个或多个文件。

主要参数

-a 将输出添加到 File 的末尾而不是覆盖写入。

-i 忽略中断

实验

1,要同时查看和保存一个命令的输出:

[plain]
view plaincopy

lint program.c | tee program.lint

它在工作站上显示命令 lint program.c 的标准输出,同时在文件 program.lint 中保存输出的一个副本。 如果program.lint 文件早已存在,它将被删除并替换。

2,要同时查看一个命令的输出并保存到一个现有文件:

[plain]
view plaincopy

lint program.c | tee -a program.lint

它将在工作站上显示 lint program.c 命令的标准输出,同时在 program.lint 文件尾部添加输出的一个副本。 如果 program.lint 文件不存在,它将被创建。

3,同时拷贝三份文件

[plain]
view plaincopy

cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3

列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1、ss-copy2、ss-copy3

3.15 命令diff_patch:比较文件并打补丁

diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。

一般A是原始文件,B是修改后的文件,C称为A的补丁文件。

[plain]
view plaincopy

#修改文件B - 原文件A = 补丁文件C
diff A B >C
#原文件A + 补丁文件C = 修改文件B(此时A被覆盖)
patch A C
#修改文件B - 补丁文件C = 原文件A(此时B被覆盖)
patch -R B C

3.16 命令pstack:查看某进程下所有线程

Linux下打印出他所有线程的调用栈,从栈再配合程序代码就知道程序行为。事实上pstack雷人的是,这个程序竟然是个shell脚本,核心实现是gdb的 thread apply all bt。

查看某进程号pid下所有线程:

[plain]
view plaincopy

pstack pid

3.17 命令jar:打成jar包

JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件非常类似 ZIP 文件,准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。

创建Jar包

[plain]
view plaincopy

jar -cvfM0 test.jar ./*

-c 创建jar包

-v 显示过程信息

-f 指定 JAR 文件名,通常这个参数是必须的

-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数

-0 数字0,表示只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快

解压Jar包:

[plain]
view plaincopy

jar -xvf test.jar

-x 展开 JAR 文件包的指定文件或者所有文件

-v 显示过程信息

-f 指定 JAR 文件名,通常这个参数是必须的
列出目录:

[plain]
view plaincopy

jar -tf test.jar

-t 列出 JAR 文件包的内容列表

-f 指定 JAR 文件名,通常这个参数是必须的

将两个Jar包合并为一个

先将两个Jar包都解压,然后再打成一个,注意,里面的MANIFEST可以不要,即重新打包的时候不需要参数-M了。

[plain]
view plaincopy

jar -xvf gson-1.7.1.jar#得到META-INF和com
rm -rf META-INF
jar -xvf log4j-1.2.16.jar#得到META-INF和org
rm -rf META-INF
jar -cvf my.jar com org#将com和org打包成my.jar

3.18 命令java -cp:爪哇运行Jar包

[plain]
view plaincopy

java -cp .:./*:./lib/* package.app.Tool -f ./1.file

用冒号分割目录,必须要加入当前目录".",-cp表示-classpath指明了class文件路径

3.19 命令scp:远程传输文件

1,从本地服务器复制到远程服务器

scp local_file remote_username@remote_ip:remote_folder

[plain]
view plaincopy

#scp /home/administrator/news.txt root@192.168.6.129:/etc/squid

2,从远程服务器复制到本地服务器

scp remote_username@remote_ip:remote_folder local_file

[plain]
view plaincopy

#scp remote@www.abc.com:/usr/local/sin.sh /home/administrator

对于递归复制文件夹,则需要-r参数,注意-r参数应放置的位置是:scp -r ....

5 系统服务

5.1 命令ps:进程管理

5.1.1 三种常用范式

查阅仅自己bash相关进程:

[plain]
view plaincopy

#ps -l

查阅所有运行进程命令:

[plain]
view plaincopy

#ps aux
或者
#ps -ef

5.1.2 “ps aux” 说明

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

[plain]
view plaincopy

$ps aux |more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 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]

上述解释如下:

[plain]
view plaincopy

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狀態位常見的狀態字符

[plain]
view plaincopy

D (Uninterruptible sleep)无法中断的休眠状态(通常 IO 的进程);
R (Runnable)正在运行或在运行队列中等待
S (Sleeping)休眠中, 受阻, 在等待某个条件的形成或接受到信号
T (Terminate)停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z (Zombie)僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;

5.1.3 未知执行命令时:pgrep

根据关键字查找进程

[plain]
view plaincopy

$ pgrep chrome
32575
32580
...

或使用pstree查看

[plain]
view plaincopy

$ 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

[plain]
view plaincopy

$ps -ef | grep python2.7
admin 18535 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 18536 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 18537 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 18538 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 18539 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 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

[plain]
view plaincopy

$ps -ef | grep python2.7|grep tester.py
admin 18535 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 18536 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 18537 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 18538 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
admin 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}'

[plain]
view plaincopy

$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'
18535
18536
18537
18538
18539

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

[plain]
view plaincopy

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

2.4 杀死进程

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

[plain]
view plaincopy

$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

强制杀掉父进程

[plain]
view plaincopy

$ kill -9 32582

根据约定,当您发送一个挂起信号(信号 1 或 HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作(不需停止并重新启动服务)并重新加载它们的配置文件(动态更新服务配置)。

[plain]
view plaincopy

$ kill -HUP 32582
$ kill -1 32582

或者删除与之相关所有进程

[plain]
view plaincopy

$ 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

[plain]
view plaincopy

例1:5分钟后,将 /root/.bashrc 寄给 root 自己
[root@www ~]# at now + 5 minutes
at> /bin/mail root -s "testing at job" < /root/.bashrc
at> <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-17
at> /bin/sync
at> /bin/sync
at> /sbin/shutdown -h now
at> <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命令格式:

[plain]
view plaincopy

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

针对用户的例行性job:

[plain]
view plaincopy

#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分
一些例子:

[plain]
view plaincopy

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点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache

针对系统的例行性job:
以root身份编辑主配置文件/etc/crontab文本文件,每隔一分钟,cron服务会读取一次/etc/crontab与/var/spool/cron里面的数据内容。并自动执行。

[plain]
view plaincopy

#cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root #如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ #使用者运行的路径,这里是根目录

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 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,命令\&:后台提交作业

[plain]
view plaincopy

command &

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

[plain]
view plaincopy

nohup command &

5.3 命令jobs:作业管理

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

[plain]
view plaincopy

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

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

[plain]
view plaincopy

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

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

[plain]
view plaincopy

#jobs -l
[1]+ Stopped /usr/bin/vim /etc/profile
[2]- Stopped /usr/bin/vim /etc/profile.conf

说明:上面的 -l 表示让列表现示作业号的PID,另外(+-)号,(+)号表示默认的作业,如我在bash中输入fg,则[1] 会被自动执行。

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

[plain]
view plaincopy

#fg %jobnumber

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

[plain]
view plaincopy

#bg %jobnumber

6,杀死后台作业:kill

[plain]
view plaincopy

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

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

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

用法:

[plain]
view plaincopy

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

[plain]
view plaincopy

#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。

[plain]
view plaincopy

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

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

[plain]
view plaincopy

#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服务器

[plain]
view plaincopy

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

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

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



[plain]
view plaincopy

#service --status-all| grep running

如何知道服务的名字?

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

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

[plain]
view plaincopy

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 配置为默认启动,并立即启动

[plain]
view plaincopy

#/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 管理的),并将其设置为默认不启动,并关闭

[plain]
view plaincopy

#netstat -tlup | grep rsync #查看发现的确是由xinetd管理的,并且开启着
tcp 0 0 192.168.201.110:rsync *:* LISTEN 4618/xinetd
tcp 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可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

[plain]
view plaincopy

>>strace touch 3.txt
execve("/usr/bin/touch", ["touch", "3.txt"], [/* 63 vars */]) = 0
brk(0) = 0x50a000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b9f5745a000
uname({sys="Linux", node="Tencent64", ...}) = 0
access("/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)

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。
常用参数:

[plain]
view plaincopy

-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.

典型用法:

[plain]
view plaincopy

#strace -o output.txt -T -tt -e trace=all -p 28979

跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: