linux命令行

来源:互联网 发布:net域名为什么遇冷 编辑:程序博客网 时间:2024/06/05 01:00

转载自http://blog.csdn.net/macdroid/article/details/17139895


1 Linux命令简介

1.1 命令格式

[python] view plaincopy
  1. [root@test root]# command [-options] parameter1 parameter2 ...   
  2.                    指令    选项       参数(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
  1. -f       --force          略过不存在的文件,不显示任何信息  
  2. -i       --interactive    进行任何删除操作前必须先确认  
  3. -r/R     --recursive      同时删除该目录下的所有目录层  
  4. -h       --h是可以以k M G 等等为单位,不是只显示一个数字  
  5. -h       --help           显示此帮助信息并离开  
  6. -v       --verbose        详细显示进行的步骤  
  7. -v       --version        显示版本信息并离开  

1.3 切换终端

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

[plain] view plaincopy
  1. [Ctrl] + [Alt] + [F1] ~ [F6] :文字界面登陆 tty1 ~ tty6 终端机;  
  2. [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
  1. 查询linux c函数open  
  2. #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: 由第一行开始显示文件内容  

[plain] view plaincopy
  1. cat -n  显示行号   
  2. 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: 只看头几行
[plain] view plaincopy
  1. #假设a.txt有100行  
  2. head a.txt       #默认显示前10行(L1~L10)  
  3. head -n 20 a.txt #显示前20行(L1~L20)  
  4. head -n -10 a.txt#打印末尾10行之前(L1~L90)  
tail: 只看结尾几行
[plain] view plaincopy
  1. #假设a.txt有100行  
  2. tail a.txt   #默认显示最后10行(L91~L100)  
  3. tail -n 20 a.txt #显示最后20行(L81~L100)  
  4. tail -n +50 a.txt #显示50行以后内容(L51~L100)  
  5. tail -f tester.log #动态追踪tester.log的最后10行,直到用户输入Ctrl+c  
综合示例:
[plain] view plaincopy
  1. 查看a.txt的L11~L20  
  2. head -n 20 a.txt | tail -n 10   

1.8 命令file:查看文件类型

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

1.9 命令history:搜索历史命令

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

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

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


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

[plain] view plaincopy
  1. #time find . -name "mysql.sh"   
  2. real    0m5.064s      <== 实际使用时间(real time)   
  3. user    0m0.020s      <== 用户态使用时间(the process spent in user mode)   
  4. 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
  1. alias ..='cd ..'  
  2. alias ...='cd ../..'  
  3. alias cd..='cd ..'  
  4.   
  5. alias l='ls -lthr'  
  6. alias la='ls -la'  
  7. alias ll='ls -l'  
  8. alias ls='ls --color'  
  9. alias ls-l='ls -l'  
  10.   
  11. alias md='mkdir -p'  
  12. alias rd='rmdir'  
  13. alias mv='mv -i'  
  14. alias cp='cp -i'  
  15. alias rm='rm -i'  
  16.   
  17. alias mydf='df -h && df -ih'  
  18. alias o='less'  
  19. alias p='ps ux'  
  20. alias cl='clear'  
  21.   
  22. alias vi='vim'  
  23.   
  24. #命令拓展  
  25. alias datee='date +'\''%Y-%m-%d %H:%M:%S , tp=%s'\'''  
  26. alias ip='/sbin/ifconfig | grep -a '\''inet addr'\'' | sed -e '\''/127\.0\.0\.1/d;s/.*inet addr:[09\.]\+.*/\1/'\'''  
  27. #用户设置  
  28. alias cci='cd /data/home/xxx/; ./cci.sh'  

1.12 命令useradd

新加一个用户:

[plain] view plaincopy
  1. useradd book -d /data/home/book -m  
其中-d表示指定主目录,-m表示如果主目录不存在则新建主目录。
[plain] view plaincopy
  1. passwd book  

设置密码

1.13 命令id

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

[plain] view plaincopy
  1. #id root  
  2. 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
  1. ls -Sl   :按照文件大小大到小排序是  
  2. ls -Slr :按照文件大小从小到大排就加个-r  

所有参数 : 

-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来
-A :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录,一起列出来
-l :除文件名称外,亦将文件类型、权限、拥有者、文件大小等信息详细列出 
-h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
-r :将排序结果反向输出,例如:原本文件按英文字母顺序由小到大,反向则为由大到小;
-R :递归连同子目录内容一起列出来;
-t :依时间排序

2.2 命令cd

cd=Change Directory :更改目录
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前用户身份”所在的主目录
~account 代表 account 这个使用者的主目录
与此相关的命令:
[plain] view plaincopy
  1. cd [相对路径或绝对路径]  
  2. cd      #表示进入家目录       
  3. cd ~    #表示进入家目录        
  4. cd -    #表示进入前一个目录  
  5. cd .ssh #因为.ssh前面的点表示隐藏的文件夹  可以从 ls -al 看出来  

2.3 命令pwd

pwd=Print Working Directory:显示当前目录
[plain] view plaincopy
  1. pwd [-P]       
  2. pwd -P                      #-P表示打印真正的路径,而非链接路径。  

2.4 命令mkdir

mkdir=Make Directories:新建文件夹
[plain] view plaincopy
  1. mkdir [-mp] 目录名称   
  2. mkdir -p test1/test2/test3  #-p表示递归的建立目录  
  3. mkdir -m 711 test           #-m表示建立目录同时设置权限  

2.5 命令rmdir

rmdir=Remove Directories:删除文件夹
[plain] view plaincopy
  1. rmdir [-p] 目录名称   
  2. 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
  1. [oracle@Linux]$ touch test        #创建一个测试文件test  
  2. [oracle@Linux]$ ln test f1        #创建test的一个硬连接文件f1  
  3. [oracle@Linux]$ ln -s test f2     #创建test的一个软连接文件f2(符号链接)  
  4. [oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息  
  5. total 0  
  6. 9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 test  
  7. 9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1  
  8. 9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f2 -> test  

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

[plain] view plaincopy
  1. [oracle@Linux]$ echo "I am test file" >>test  
  2. [oracle@Linux]$ cat test  
  3. I am test file  
  4. [oracle@Linux]$ cat f1  
  5. I am test file  
  6. [oracle@Linux]$ cat f2  
  7. I am test file  
  8. [oracle@Linux]$ rm -f test  
  9. [oracle@Linux]$ cat f1  
  10. I am test file  
  11. [oracle@Linux]$ cat f2  
  12. 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
  1. [admin@r42h06021.xy2.xxx.com]$df -h  
  2. Filesystem            Size  Used Avail Use% Mounted on  
  3. /dev/sdb1             1.8T   13G  1.8T   1% /aps/disk1  
  4. /dev/sdc1             1.8T   13G  1.8T   1% /aps/disk2  
  5. /dev/sdd1             1.8T   13G  1.8T   1% /aps/disk3  
  6. [admin@r42h06021.xy2.xxx.com]$cd /aps/disk3  
  7. [admin@r42h06021.xy2.xxx.com]$mkdir xiaobao  
  8. [admin@r42h06021.xy2.xxx.com]$cd -  
  9. [admin@r42h06021.xy2.xxx.com]$ln -s /aps/disk3/xiaobao xiaobao  
  10. [admin@r42h06021.xy2.aliyun.com]$ll  
  11. lrwxrwxrwx  1 admin admin        30 Nov 20 11:31 xiaobao -> /apsarapangu/disk3/xiaobao  

2.13 命令dd:指定块拷贝

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

[plain] view plaincopy
  1. #创建一个100M的空文件  
  2. 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
  1. unzip latest.zip  

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


[python] view plaincopy
  1. tar -czvf backup.tar.gz     *  
该命令就是将当前目录下所有文件打包保存成backup.tar.gz压缩包
-c创建
-z用gzip压缩方式
-v显示压缩过程
-f后接文件名


[python] view plaincopy
  1. tar -xzvf backup.tar.gz  
把刚才打包成的一坨文件解压出来放到当前目录下
-x解压缩
-z用gzip压缩方式
-v显示压缩过程
-f后接文件名

3.4 命令uniq:进行文本排序

文本内容:

[python] view plaincopy
  1. good  
  2. nice  
  3. room  
  4. nice  
  5. nice  
  6. good  

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

[python] view plaincopy
  1. sort 1.txt  | uniq -c  | sort -n -r | tee 2.txt  
其中第一步sort 1.txt,先进行字母排序:
[python] view plaincopy
  1. good  
  2. good  
  3. nice  
  4. nice  
  5. nice  
  6. room  

然后进行uniq -c 统计:

[python] view plaincopy
  1. 2 good  
  2. 3 nice  
  3. 1 room  
然后再进行按数字大小由大到小排序sort的-n表示按数值比较,-r表示反序:
[python] view plaincopy
  1. 3 nice  
  2. 2 good  
  3. 1 room  
最后tee保存到文件同时输出。

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

[plain] view plaincopy
  1. tail -f tester.log  

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

[plain] view plaincopy
  1. reset  
可能是屏幕的缓冲区满了,原因未细究。

3.7 命令xargs:过滤器

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

[plain] view plaincopy
  1. find . -name "*.py" | xargs ls –l  

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

[plain] view plaincopy
  1. ls -l a.py  
  2. ls -l b.py  
xargs特别适合与find(find其实功能非常强大)一起使用,以下是两个例子:

xargs+cp/mv 

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

[cpp] view plaincopy
  1. find . -newer meta.h | xargs -i{} cp {} ../testMYSQL/  
  2. find . -newer meta.h | while read line; do mv $line ../testMYSQL/ ; done   

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

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

[plain] view plaincopy
  1. [admin@r42h06016.xy2.xxx.com]$md5sum myJar.jar  
  2. 061ea1d09a2e52036359a008e27efefe  myJar.jar  

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

[plain] view plaincopy
  1. [admin@r42h06016.xy2.xxx.com]$md5sum *.sh > sh.md5  
  2. c79f5d1a2625475790ac374b6a92cded  oneKey.sh  
  3. 412b7b3fdfdbc9ef493e6cde3fa3254f  run_mr.sh  
  4. e63c74df12477857364db4c0245559da  trans_file.sh  


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

[plain] view plaincopy
  1. cat file | grep -i '\<nice\>'  

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

[plain] view plaincopy
  1. ps aux| grep -v grep | grep python  

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


命令格式:

[python] view plaincopy
  1. [root@linux ~]# grep [-acinv] 'pattern' filename  
参数:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

3.10 命令cut:文本行处理

[plain] view plaincopy
  1. [root@linux ~]# cut -d '分隔字符' -f fields  
  2. [root@linux ~]# cut -c 字符区间  
参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;

示例1:将 PATH 变量取出,我要找出第三个路径。

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


3.11 命令awk:文本行处理

[plain] view plaincopy
  1. awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]   
[plain] view plaincopy
  1. $awk -F: '$2!="x" {printf("%s no password!\n",$1)}' /etc/passwd  
  2. $awk '/sun/{print}' mydoc  

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

3.12 命令sed:文本行处理

[plain] view plaincopy
  1. sed [options] 'command' file(s)  

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

[plain] view plaincopy
  1. $sed -n '20,80p' home/temp.txt > 1.txt  

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

[plain] view plaincopy
  1. $sed -i "s/a/b/g" file*  

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

[plain] view plaincopy
  1. find <指定目录> <指定条件> <指定动作>   
1,最一般
[plain] view plaincopy
  1. $find /tmp -name "*.sh" -ls  
2,忽略大小写
[plain] view plaincopy
  1. $find . -iname abcd  

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

tee 命令读取标准输入,然后将程序的输出写到标准输出,并同时将其复制到指定的一个或多个文件。
主要参数
-a 将输出添加到 File 的末尾而不是覆盖写入。 
-i 忽略中断
实验
1,要同时查看和保存一个命令的输出:

[plain] view plaincopy
  1. lint program.c | tee program.lint   
它在工作站上显示命令 lint program.c 的标准输出,同时在文件 program.lint 中保存输出的一个副本。 如果program.lint 文件早已存在,它将被删除并替换。
2,要同时查看一个命令的输出并保存到一个现有文件:
[plain] view plaincopy
  1. lint program.c | tee -a program.lint   
它将在工作站上显示 lint program.c 命令的标准输出,同时在 program.lint 文件尾部添加输出的一个副本。 如果 program.lint 文件不存在,它将被创建。
3,同时拷贝三份文件
[plain] view plaincopy
  1. 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
  1. #修改文件B - 原文件A = 补丁文件C  
  2. diff A B >C  
  3. #原文件A + 补丁文件C = 修改文件B(此时A被覆盖)  
  4. patch A C   
  5. #修改文件B - 补丁文件C = 原文件A(此时B被覆盖)  
  6. patch -R B C   

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

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

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

[plain] view plaincopy
  1. 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
  1. jar -cvfM0 test.jar  ./*  
-c   创建jar包
-v   显示过程信息
-f   指定 JAR 文件名,通常这个参数是必须的
-M   不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
-0   数字0,表示只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快

解压Jar包:
[plain] view plaincopy
  1. jar -xvf test.jar   
-x   展开 JAR 文件包的指定文件或者所有文件
-v   显示过程信息
-f   指定 JAR 文件名,通常这个参数是必须的

列出目录:

[plain] view plaincopy
  1. jar -tf test.jar   
-t 列出 JAR 文件包的内容列表 
-f   指定 JAR 文件名,通常这个参数是必须的

将两个Jar包合并为一个

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

[plain] view plaincopy
  1. jar -xvf gson-1.7.1.jar#得到META-INF和com  
  2. rm -rf META-INF  
  3. jar -xvf log4j-1.2.16.jar#得到META-INF和org  
  4. rm -rf META-INF  
  5. jar -cvf my.jar com org#将com和org打包成my.jar  

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

[plain] view plaincopy
  1. 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
  1. #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
  1. #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
  1. #ps -l  
查阅所有运行进程命令:
[plain] view plaincopy
  1. #ps aux  
  2. 或者  
  3. #ps -ef  

5.1.2 “ps aux” 说明

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

5.1.3 未知执行命令时:pgrep

根据关键字查找进程
[plain] view plaincopy
  1. $ pgrep chrome  
  2. 32575  
  3. 32580  
  4. ...  


或使用pstree查看

[plain] view plaincopy
  1. $ pstree -p | grep chrome  
  2.            |-chrome-sandbox(32582)---chrome(32583)-+-chrome(32622)-+-{chrome}(32625)  
  3.            |                                       |               |-{chrome}(32627)  
  4. ...  

5.1.4 已知执行命令时:ps

2.1 直接查找命令:

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

ps -ef | grep python2.7

[plain] view plaincopy
  1. $ps -ef | grep python2.7  
  2. admin    18535 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  3. admin    18536 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  4. admin    18537 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  5. admin    18538 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  6. admin    18539 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  7. 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
  1. $ps -ef | grep python2.7|grep tester.py  
  2. admin    18535 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  3. admin    18536 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  4. admin    18537 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  5. admin    18538 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run  
  6. 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
  1. $ps -ef | grep python2.7|grep tester.py | awk '{print $2}'  
  2. 18535  
  3. 18536  
  4. 18537  
  5. 18538  
  6. 18539  
ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}' | wc -l 
[plain] view plaincopy
  1. $ps -ef | grep python2.7|grep tester.py | awk '{print $2}'| wc -l  
  2. 5  

2.4 杀死进程

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

[plain] view plaincopy
  1. $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
  1. $ kill -9 32582  
根据约定,当您发送一个挂起信号(信号 1 或 HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作(不需停止并重新启动服务)并重新加载它们的配置文件(动态更新服务配置)。
[plain] view plaincopy
  1. $ kill -HUP 32582  
  2. $ kill -1 32582  
或者删除与之相关所有进程
[plain] view plaincopy
  1. $ 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. 例1:5分钟后,将 /root/.bashrc 寄给 root 自己  
  2. [root@www ~]# at now + 5 minutes    
  3. at> /bin/mail root -s "testing at job" < /root/.bashrc  
  4. at> <EOT>   <==这里输入 [ctrl] + d 就会出现 <EOF> ,代表结束!  
  5. job 4 at 2009-03-14 15:38  
  6. # 说明第 4 个 at 工作将在 2009/03/14 的 15:38 进行!  
  7.   
  8.   
  9. 例2:设置 2009/03/17 23:00 关机?  
  10. [root@www ~]# at 23:00 2009-03-17  
  11. at> /bin/sync  
  12. at> /bin/sync  
  13. at> /sbin/shutdown -h now  
  14. at> <EOT>  
  15. 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
  1. crontab [-u username] [-l|-e|-r]   
  2. -u :root帮其他使用者建立/移除 crontab 工作排程;   
  3. -e :编辑 crontab的内容   
  4. -l :查阅 crontab 的内容   
  5. -r :移除所有的 crontab 的内容。(若仅要移除一项,请用 -e 去编辑)  

针对用户的例行性job:
[plain] view plaincopy
  1. #crontab -e  
  2. *  *  *  *  *  /usr/local/src/analog-5.32-lh/analog  
  3. 分 时 日 月 周 |<=============指令串=============>|  
第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
  1. 30 21 * * * /usr/local/etc/rc.d/lighttpd restart  
  2. 上面的例子表示每晚的21:30重启apache。  
  3.   
  4. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart  
  5. 上面的例子表示每月1、10、22日的4 : 45重启apache。  
  6.   
  7. 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart  
  8. 上面的例子表示每周六、周日的1 : 10重启apache。  
  9.   
  10. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart  
  11. 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。  
  12.   
  13. 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart  
  14. 上面的例子表示每星期六的11 : 00 pm重启apache。  
  15.   
  16. * */1 * * * /usr/local/etc/rc.d/lighttpd restart  
  17. 每一小时重启apache  
  18.   
  19. * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart  
  20. 晚上11点到早上7点之间,每隔一小时重启apache  
  21.   
  22. 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart  
  23. 每月的4号与每周一到周三的11点重启apache  
  24.   
  25. 0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart  
  26. 一月一号的4点重启apache  

针对系统的例行性job:
以root身份编辑主配置文件/etc/crontab文本文件,每隔一分钟,cron服务会读取一次/etc/crontab与/var/spool/cron里面的数据内容。并自动执行。
[plain] view plaincopy
  1. #cat /etc/crontab  
  2. SHELL=/bin/bash  
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  4. MAILTO=root    #如果出现错误,或者有数据输出,数据作为邮件发给这个帐号  
  5. HOME=/    #使用者运行的路径,这里是根目录  
  6.   
  7. # run-parts  
  8. 01 * * * * root run-parts /etc/cron.hourly  
  9. 02 4 * * * root run-parts /etc/cron.daily  
  10. 22 4 * * 0 root run-parts /etc/cron.weekly  
  11. 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
  1. command &  

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

[plain] view plaincopy
  1. nohup command &  

5.3 命令jobs:作业管理

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

[plain] view plaincopy
  1. #command &  
  2. [1] 234     # [job number] PID  

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

[plain] view plaincopy
  1. #command  
  2. [Ctrl+z]  
  3. [1]+ Stopped   ...  

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

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

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

[plain] view plaincopy
  1. #fg %jobnumber  

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

[plain] view plaincopy
  1. #bg %jobnumber  

6,杀死后台作业:kill

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

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

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

用法: 

0 0
原创粉丝点击