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,N | n表示下一个匹配,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,N | n表示下一个匹配,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' |
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文件里面。
相关文章推荐
- Linux常用命令简介
- Linux/UNIX命令dd简介
- linux 中网卡配置命令 ifconfig简介
- linux: source 命令简介
- Linux/UNIX命令dd简介
- Linux的mount命令简介
- Linux创建文件命令的方法与特殊目录简介
- Linux/UNIX命令dd简介
- Linux常用命令简介
- Linux/UNIX命令dd简介
- crontab命令简介 linux定时设置 Cron实现自动任务
- 扫盲行动之一:Linux常用命令简介
- Linux常用命令简介
- linux日志系统及命令简介
- Linux部分命令简介
- 扫盲行动之一:Linux常用命令简介
- Linux的mount命令简介
- Linux的mount命令简介
- Linux的mount命令简介
- linux监控与调优命令简介