Linux命令

这篇文章旨在收集平时常用的Linux命令,慢慢补充。

1.ps -ef  [ | grep ]

作用:用全格式的System V格式显示正在运行的进程,grep后面可以跟特定字符串以过滤相应进程。格式如下:

UID 用户ID   PID 进程ID   PPID 父进程ID    C CPU占用率    STIME 开始时间   TTY 开始此进程的TTY    TIME 此进程运行的总时间   CMD 命令名

2.nohup command &

作用:不挂断地运行命令。如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( nohang up)。如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:nohup command > myout.file 2>&1 &

使用nohup运行后台任务后,如果想追踪日志,则可以使用

tailf nohup.out 即可动态查看运行该任务产生的输出。
在上面的例子中,输出被重定向到myout.file文件中。使用nohup命名执行后台任务后,想查看该进程是否运行完,可以执行 jobs -l  ,即可显示该进程的状态。另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和,这样我就可以利用这些命令在后台上传和下载文件了。

3.md5sum filename

作用:是用来计算和校验文件报文摘要(md5)的工具程序。命令格式如下:

md5sum filename > filename.md5或者

md5sum filename >> filename.md5  ,后者表示追加文件md5到filename.md5 。

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

md5sum *.iso > iso.md5

使用md5报文摘要验证文件,方法是:把下载的文件file和该文件的file.md5报文摘要文件放在同一个目录下,然后用如下命令进行验证:

md5sum -c file.md5

如果验证成功,则会输出:正确

4.vim多行注释

:20,30 s/^/#/g       20-30行 用 # 注释掉。(python和shell是用#注释的)

:20,30 s/^#//g       20-30行 取消注释

:4,10 s/^[^I ]+//    4-10行 去掉行首的空白字符

:.,30 s/^/#/g       当前行-30行 用 # 注释掉(用“.”表示当前行)

5.vim多行缩进

按v进入visual状态,选择多行,用>或<缩进或缩出。

通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。

6.vim的搜索和替换

搜索替换的范围。如果没有指定范围,则只在当前行进行搜索替换。

范围符号%表示在所有行进行搜索替换。

替换每行的第一个匹配字符。:%s/from/to/就是在全文每行查找from并替换为to,只替换每行的第一个。 

替换全文所有匹配字符。:%s/from/to/g就是在全文查找from并替换为to。 
在指定的行上进行搜索替换。:1,50s/from/to/表示在第1行和第50行之间(包括1和50行)进行搜索和替换。:45s/from/to/表示仅仅在第45行进行搜索和替换。而"1,$"行号范围和“%“是等价的。

只需要搜索特定字符串的话,用"/"符号后跟要搜索的字符串即可。

替换时,如果需要我们一个个的确认,那么我们可以加上c命令,意思就是confirm。

如: :%s/from/to/gc 输入这个命令之后,vim会把所有匹配的文字高亮,并会询问你 replace with to (y/n/a/q/l/^E/^Y) ,输入y表示替换当前这个,n表示这个不要替换,a表示全部替换,q表示退出,不替换了,l表示把当前这个替换后就退出,^E(ctrl+e,好像大小写都可以)表示向下滚动一行,^Y表示向上滚动一行.

7.让vim显示tab键

文件中有 TAB 键的时候,你是看不见的。要把它显示出来::set list

现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白字符在哪里。

如果要显示行号,则使用:set nu

8.复制、移动和删除

复制:cp -rf source_dir dest_dir   

移动:mv source_dir dest_dir   (还可以起到重命名的作用)

删除:rm -rf filename

以上的-rf参数,r代表递归,f代表强制。

9.hadoop命令

列出文件命令:hadoop fs -ls dest_dir

打开文件:hadoop fs -cat dest_file

10.history [ |grep ]

作用:列出最近执行的指令,可用grep筛选。

11.diff命令

diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

格式:diff[参数][文件1或目录1][文件2或目录2]

作用:diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff 命令会比较两个目录下名字相同的文本文件。

参数“-y”以并列的方式显示文件的异同之处。

-W或--width 是在使用-y参数时,指定栏宽,例如-y -W 50。

-q或--brief  仅显示有无差异,不显示详细的信息。

-r        比较目录时,比较其子目录

如果使用并列方式显示的话,具体如下:

“|”表示前后2个文件内容有不同

<”表示后面文件比前面文件少了1行内容

>”表示后面文件比前面文件多了1行内容

12.cat命令

格式:cat [选项] [文件]...

作用:1.一次显示整个文件:cat filename

2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.

3.将几个文件合并为一个文件:cat file1 file2 > file

13.less命令

格式:less [参数]  文件 

作用:less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

14.head和tail

格式:head/tail [参数]... [文件]... 

作用:head 用来显示档案的开头至标准输出中默认head命令打印其相应文件的开头10行。tail相反。

参数-n 可以指定要显示的行数。

15.which以及其他查找命令

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索 

which  查看可执行文件的位置

whereis 查看文件的位置

locate   配合数据库查看文件位置

find   实际搜寻硬盘查询文件名称

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 

格式:which 可执行文件名称

find -name 文件名

16.tree命令

作用:以树状图显示文件系统

17.用默认程序打开文件命令

格式:xdg-open { file | url }

可打开文件及url,例如:xdg-open http://www.baidu.com  会调用浏览器打开该网址。

xdg-open 2.xls 可调用默认程序打开2.xls。

18.vim全局替换命令

语法为 :[addr]s/源字符串/目的字符串/[option]
全局替换命令为::%s/源字符串/目的字符串/g
[addr] 表示检索范围,省略时表示当前行。
如:“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“. ,$” :从当前行到文件尾;
s : 表示替换操作
[option] : 表示操作类型
如:g 表示全局替换; 
c 表示进行确认
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
下面是一些例子:
#将That or this 换成 This or that
:%s/\(That\) or \(this\)/\u\2 or \l\1/
—- 
#将句尾的child换成children
:%s/child\([ ,.;!:?]\)/children\1/g
—-
#将mgi/r/abox换成mgi/r/asquare
:g/mg\([ira]\)box/s//mg//my\1square/g    <=>  :g/mg[ira]box/s/box/square/g
—-
#将多个空格换成一个空格
:%s/  */ /g
—-
#使用空格替换句号或者冒号后面的一个或者多个空格
:%s/\([:.]\)  */\1 /g
—-
#删除所有空行
:g/^$/d
—-
#删除所有的空白行和空行
:g/^[  ][  ]*$/d
—-
#在每行的开始插入两个空白
:%s/^/>  /
—-
#在接下来的6行末尾加入.
:.,5/$/./
—-
#颠倒文件的行序
:g/.*/m0O  <=> :g/^/m0O
—-
#寻找不是数字的开始行,并将其移到文件尾部
:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
—-
#将文件的第12到17行内容复制10词放到当前文件的尾部
:1,10g/^/12,17t$
~~~~重复次数的作用
—-
#将chapter开始行下面的第二行的内容写道begin文件中
:g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$


19.sed命令

按行处理文件中的内容并替换文件中的所有匹配的内容并把修改后的文件内容保存到另一个文件中(无需提前有该文件):

sed 's/from/to/g' filename > another_filename

直接在原文件中修改内容:sed -i 's/from/to/g' filename

在原文件中追加内容:sed 's/from/to/g' filename >> filename


(假设我们有一文件名为ab)
     删除某行
     [root@localhost ruby# sed '1d' ab              #删除第一行 
     [root@localhost ruby] # sed '$d' ab              #删除最后一行
     [root@localhost ruby] # sed '1,2d' ab           #删除第一行到第二行
     [root@localhost ruby] # sed '2,$d' ab           #删除第二行到最后一行

  显示某行
.    [root@localhost ruby# sed -n '1p' ab           #显示第一行 
     [root@localhost ruby] # sed -n '$p' ab           #显示最后一行
     [root@localhost ruby] # sed -n '1,2p' ab        #显示第一行到第二行
     [root@localhost ruby] # sed -n '2,$p' ab        #显示第二行到最后一行

  使用模式进行查询
     [root@localhost ruby] # sed -n '/ruby/p' ab    #查询包括关键字ruby所在所有行
     [root@localhost ruby] # sed -n '/\$/p' ab        #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

  增加一行或多行字符串
     [root@localhost ruby]# cat ab
     Hello!
     ruby is me,welcome to my blog.
     end
     [root@localhost ruby] # sed '1a drink tea' ab  #第一行后增加字符串"drink tea"
     Hello!
     drink tea
     ruby is me,welcome to my blog. 
     end
     [root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
     Hello!
     drink tea
     ruby is me,welcome to my blog.
     drink tea
     end
     drink tea
     [root@localhost ruby] # sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用换行符\n
     Hello!
     drink tea
     or coffee
     ruby is me,welcome to my blog.
     end

  代替一行或多行
     [root@localhost ruby] # sed '1c Hi' ab                #第一行代替为Hi
     Hi
     ruby is me,welcome to my blog.
     end
     [root@localhost ruby] # sed '1,2c Hi' ab             #第一行到第二行代替为Hi
     Hi
     end

  替换一行中的某部分
  格式:sed 's/要替换的字符串/新的字符串/g'   (要替换的字符串可以用正则表达式)
     [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替换ruby为bird
   [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g'        #删除ruby

     插入
     [root@localhost ruby] # sed -i '$a bye' ab         #在文件ab中最后一行直接输入"bye"
     [root@localhost ruby]# cat ab
     Hello!
     ruby is me,welcome to my blog.
     end
     bye


20.seq命令

用于产生从某个数到另外一个数之间的所有整数
  例一:
  # seq 1 10
  结果是1 2 3 4 5 6 7 8 9 10
  例二:
  #!/bin/bash
  for i in `seq 1 10`;
  do
  echo $i;
  done
  或者用
  for i in $(seq 1 10)
  也可以。

21.从linux上传本地文件或下载linux文件到本地

sz filename  :将选定的文件发送(send)到本地机器;

rz  :调出文件选择窗口,选择本地文件并上传到服务器

22.打包、压缩、解压命令(转自http://brosnan2800.iteye.com/blog/1791625)

范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar

[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!

[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩

[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩

# 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?

[root@linux ~]# tar -ztvf /tmp/etc.tar.gz

# 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
# 就得要加上 z 这个参数了!这很重要的!

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下

[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz

# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
# 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!

范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已

[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd

# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!

[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc

# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

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

.tar
  解包:tar xvf FileName.tar
  打包:tar cvf FileName.tar DirName
  (注:tar是打包,不是压缩!)
  ———————————————
  .gz
  解压1:gunzip FileName.gz
  解压2:gzip -d FileName.gz
  压缩:gzip FileName
  .tar.gz 和 .tgz
  解压:tar zxvf FileName.tar.gz
  压缩:tar zcvf FileName.tar.gz DirName
  ———————————————
  .bz2
  解压1:bzip2 -d FileName.bz2
  解压2:bunzip2 FileName.bz2
  压缩: bzip2 -z FileName
  .tar.bz2
  解压:tar jxvf FileName.tar.bz2 或tar –bzip xvf FileName.tar.bz2
  压缩:tar jcvf FileName.tar.bz2 DirName
  ———————————————
  .bz
  解压1:bzip2 -d FileName.bz
  解压2:bunzip2 FileName.bz
  压缩:未知
  .tar.bz
  解压:tar jxvf FileName.tar.bz
  压缩:未知
  ———————————————
  .Z
  解压:uncompress FileName.Z
  压缩:compress FileName
  .tar.Z
  解压:tar Zxvf FileName.tar.Z
  压缩:tar Zcvf FileName.tar.Z DirName
  ———————————————
  .zip
  解压:unzip FileName.zip
  压缩:zip FileName.zip DirName
  压缩一个目录使用 -r 参数,-r 递归。例: $ zip -r FileName.zip DirName
  ———————————————
  .rar
  解压:rar x FileName.rar
  压缩:rar a FileName.rar DirName

关于zip压缩的用法(转自http://www.hdj.me/linux-shell-zip-and-unzip):

linux zip命令的基本用法是:

zip [参数] [打包后的文件名] [打包的目录路径]

linux zip命令参数列表:

-a 将文件转成ASCII模式
-F 尝试修复损坏的压缩文件
-h 显示帮助界面
-m 将文件压缩之后,删除源文件
-n 特定字符串 不压缩具有特定字尾字符串的文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
-q 安静模式,在压缩的时候不显示指令的执行过程
-r 将指定的目录下的所有子目录以及文件一起处理
-S 包含系统文件和隐含文件(S是大写)
-t 日期 把压缩文件的最后修改日期设为指定的日期,日期格式为mmddyyyy

举例:
将/home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的html.zip

1
zip –q –r   html.zip /home/Blinux/html

上面的命令操作是将绝对地址的文件及文件夹进行压缩.以下给出压缩相对路径目录
比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果.

1
zip –q –r html.zip html

比如现在我的html目录下,我操作的zip压缩命令是

1
zip –q –r html.zip *

unzip命令的基本语法是:unzip [参数] zip文件
简单例子:
把本目录下的test.zip文件解压:unzip test.zip
参数列表:
-l 列出压缩文件所包含的内容
-v 显示详细的执行过程

23.find命令

查找目录:find <查找范围> -name '查找关键字' -type d   :-type d指定只查询目录
查找文件:find <查找范围> -name '查找关键字' 

在当前目录下查询以my开头的文件并使用ls列出 :find . -name 'my*' -ls

find命令格式如下:find <指定目录> <指定条件> <指定动作>

24.获取脚本当前执行的路径

filepath=$(cd "$(dirname "$0")"; pwd)
脚本文件的绝对路径存在了环境变量filepath中,可以用
查看完整路径:echo $filepath

在shell中:
$0: 获取当前脚本的名称
$#: 传递给脚本的参数个数
$$: shell脚本的进程号
$1, $2, $3...:脚本程序的参数

25.grep命令

显示文件名中不包含“someStr”的那些文件:ls -l | grep -v  “someStr”

26.zip压缩命令

zip -r mydata.zip mydata    #压缩mydata目录

27.tar命令打包解包

1.    tar -xvf      将目标文件或目录解包
2.    tar -cvf      将目录下的文件或目录打成tar包
3.    tar -zxvf    将目录或文件解压缩并解包
4.    tar -zcvf    将目录或文件打成tar包并压缩

28.find命令(查找内容中包含某个字符串的文件)

find . -name "*" | xargs grep -in "xxx"

你可能感兴趣的:(linux,命令)