linux常用命令的使用总结

jopen 4年前

        用了很久的linux,总是记不全所有命令,在此做个总结,为初学者提供一个入门的文档,也方便自己日后查询。

1. 基本命令

1.1 echo

        echo命令即为显示的意思,可以将其后面的数据原封不动地打印出来,例如:
[root@emma_test_server bin]# echo hello world  hello world
当然,也可以用于打印一些系统变量,需要在变量名称前面加“$”,最为常见的即为PATH:
[root@emma_test_server bin]# echo $PATH  /usr/java/jdk1.6.0_31/bin:/usr/java/jdk1.6.0_31/jre/bin:/usr/local/rvm/gems/ruby-1.9.2-p290/bin:/usr/local/rvm/gems/ruby-1.9.2-p290@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p290/bin:/usr/local/rvm/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin
顺便提一句,每个路径之间必须用“:”来作为分隔符。如果要修改增加环境变量的话,可以之间在命令行中输入:
</div>
[root@localhost conf]# PATH="$PATH":/root

1.2 ls

</div>
       ls命令可能是Linux系统中最最常用的命令,用户查看当前目录下的子目录和文件列表。我们可以通过man ls命令来查看ls的具体用法,不过大部分参数在日常应用中不会被使用。最常见的两个参数为 -a:用于显示所有目录和文件,包括隐藏的; -l:列出文件的具体信息,包括文件属性,大小,所有者,group信息,修改如期等等:
[root@emma_test_server bin]# ls -al  total 8100  drwxr-xr-x  2 root root    4096 Aug 26  2011 .  drwxr-xr-x 27 root root    4096 May 28 02:34 ..  -rwxr-xr-x  1 root root    8992 Aug 28  2008 alsacard
在ls后面加文件名,则会只显示该文件的信息
[root@emma_test_server bin]# ls -l vi  -rwxr-xr-x 1 root root 632912 Jun 12  2009 vi

1.3 cp, rm,mv

       cp是linux下另一个很常用的命令,基本格式为:cp [参数信息] 源文件 目标文件。需要注意的是其几个比较重要的参数设置:
               -a:复制文件或者文件夹的所有信息,包括文件所有属性,文件夹采用递归复制,其结果是复制出来的目标文件和源文件一模一样,相当于-pdr
               -f:强制复制,即使目标文件已经存在,就覆盖掉
               -r:递归复制,用于文件夹
               -d:如果源文件为链接文件,则复制链接属性。默认不加参数时,会复制链接的原始文件
               -p:与源文件的属性一起复制,而不是采用默认属性。如果没有-p,文件的所有者,group,以及执行权限都可能改变
               -s:复制成链接文件,即目标文件是一个链接文件(符号链接)
               -l:硬链接
               -u:如果目标文件已经存在,而且比源文件新,则不会更新
       rm是Linux的删除命令,只需要记住在删除文件夹的时候,使用 rm -rf 目标文件夹。参数说明和cp的说明一致
       mv是Linux的移动或者重命名命令,格式为:mv -ru source1 soucre2 source3 目标文件夹

1.4 查看文件内容的命令

       cat:从文件的第一行开始,将整个文件显示出来。这个命令并不太好用,因为如果文件很长,根本来不及看。-A参数可以显示出一些平时看不到的特殊字符,比如回车会显示成$。
       tac:功能和cat一样,不同的是用反序的方式显示文件。例如,它会先显示文件的最后一行,然后倒数第二行
       more,less:用于翻页查看,本人觉得如果用户查找的话,还没有vim好用
       head,tail:用户显示文件的开头和末尾几行,其中tail比较好用,tail -f 目标文件,可以用于查看实时更新的文件,比如log文件。

1. 5 查看文件类型:

       基本命令为file,例如:
[root@emma_test_server conf]# file httpd.conf  httpd.conf: ASCII English text

1. 6 用户与权限:

       Linux下的文件有一个文件拥有者和组的属性,如果要改变其用户属性,可以用chown命令。 基本格式为 chown username:groupname filename。
       另外,每一个文件都有10个属性,例如drwxrwxrwx,其中第一个字母代表文件类型,如果是d表示是文件夹,如果是-表示是文件,如果是l表示是链接文件等等。而后面的9个属性可以分为三组rwx,分别代表拥有者,用户组以及其他人的read,write,excute属性。
       那么当我们创建了一个新文件的时候(创建新文件一般用命令:touch 文件名)。其默认属性是怎么样的呢?
  • 当建立文件时:(-rw-rw-rw)-(-----w--w-)== (-rw-r--r--)
  • 当建立文件夹时:(drwxrwxrw)-(-----w--w-)== (drwxr-xr-x)                
       这两个式子中第一个括号内表示创建出来文件或者文件夹的原始属性,第二个参数表示umask,第三个括号表示创建出来的默认属性。
       我们可以用umask命令查看系统当前的设置:
[root@emma_test_server conf]# umask  0022  [root@emma_test_server conf]# umask -S u=rwx,g=rx,o=rx
        我们可以看到,默认情况下,系统会自动mask掉文件的对于组成员和其他人的w属性。当然,我们也可以设置umask,如命令umask 002。

1.7 文件查找:

  • which命令可以用于查找可执行文件       
[root@emma_test_server conf]# which httpd  /usr/sbin/httpd
  • whereis和locate命令可以用于快速查找文件,但由于读取的是数据库,而不是扫描硬盘,所以可能会读取到已经删除了的文件,因为数据库不会实时更新。默认每天执行一次。也可以手动更新,用updatedb命令。
  • find命令可以扫描硬盘,查找文件,但是比较耗时。用法为:find [PATH] [option] [action]。最常用的方法如下:
[root@emma_test_server conf]# find /usr/local/apache2/ -name httpd.conf -exec ls -l {} \; -rw-r--r-- 1 root root 18974 Nov 15 08:29 /usr/local/apache2/conf/httpd.conf  -rw-r--r-- 1 root root 13346 Nov  5 10:45 /usr/local/apache2/conf/original/httpd.conf  [root@emma_test_server conf]# find /usr/local/apache2/ -name httpd.conf  /usr/local/apache2/conf/httpd.conf  /usr/local/apache2/conf/original/httpd.conf  [root@emma_test_server conf]# find /usr/local/apache2/ -size +10000k  /usr/local/apache2/htdocs/emma-2011-09-28.log  /usr/local/apache2/htdocs/emma-2011-09-27.log  /usr/local/apache2/htdocs/emma-2011-12-28.log  /usr/local/apache2/htdocs/emma-2011-09-09.log  /usr/local/apache2/htdocs/emma-2011-09-12.log  /usr/local/apache2/htdocs/emma-2011-10-27.log  /usr/local/apache2/htdocs/emma-2011-11-18.log  /usr/local/apache2/htdocs/emma-2011-10-28.log  /usr/local/apache2/htdocs/emma-2011-11-04.log  /usr/local/apache2/htdocs/emma-2011-10-21.log  /usr/local/apache2/logs/access_log


</div>

1.8 文件链接:

        文件链接用ln命令,基本格式为ln -s src des。-s参数表示符号链接,如果没有-s参数,默认采用硬链接。需要注意的是,符号链接可以用于文件或者目录,但是如果源文件被删除,符号链接会找不到文件而报错。硬链接只能用于文件,不能用于目录,如果源文件被删除,硬链接依旧能找到该文件。

1. 9 文件压缩:

        Linux下压缩文件最常用的就是gzip命令了,压缩文件使用gzip source,解压缩命令则为gzip -d source.gz。另外还有bzip2命令,用法相同,只是压缩后的文件后缀名为bz2。
        相对于gzip和bzip2,Linux下的tar命令更为强大,它不仅可以提供压缩命令,还可以将很多文件打包到一个文件内。当然,一开始的时候tar只具有打包功能,你会发现打包后的文件与源文件大小之和没区别。现在的Linux大部分都支持tar的压缩功能,使用参数-z或者-j来压缩。其命令参数为:
  • -c创建压缩文件
  • -x解压缩文件
  • -z用gzip压缩
  • -j用bzip2压缩
  • -v在压缩过程中显示被压缩的文件
  • -f后面直接接压缩后的文件名             
        一般来说,压缩的时候用 tar -czvf EmmaDeploy.tar.gz EmmaDeploy;解压缩的时候用tar -zxvf EmmaDeploy.tar.gz

1. 10 历史命令与执行:
        Linux下提供查询曾经使用过的命令的查询,如下,显示最近执行过的10条命令
[root@emma_test_server mm]# history 10   1001  cd /usr/local/mm   1002  ls   1003  vim relin_deploy.py   1004  export   1005  locate -a   1006  locale -a   1007  export   1008  ulimit -a   1009  history   1010  history 10
         可以用!!来执行上一条执行过的命令,当然,我们一般用方向键就可以实现同样的功能:
[root@emma_test_server mm]# !!  history 10   1002  ls   1003  vim relin_deploy.py   1004  export   1005  locate -a   1006  locale -a   1007  export   1008  ulimit -a   1009  history   1010  history 10   1011  history 10



2. 文字处理中的命令:

        在介绍文字处理之前,必须先科普下什么叫做纯文本文件。所谓纯文本文件就是指无论采用何种文字编辑器打开,都能显示文件,看到内容,而不是呈现一堆乱码。例如,用windows下的word保存的.doc文件就不是纯文本文件,用vim打开会呈现一堆乱码。
        Linux下的文字编辑工具非常多,笔者觉得最好用的还是vim,下面介绍下vim的使用方法。vim的编辑有三种模式:
  • 一般模式,在使用vim source之后进入vim编辑器所处的模式,左下角没有INSERT字样
  • 编辑模式,在使用i,a等按钮进入编辑模式,左下角会显示INSERT字样,可以插入字符
  • 命令行模式,按下:,/,?之后进入命令行模式。 
        在一般模式下,比较有用的命令为:
  • h,j,k,l表示上下左右移动光标
  • gg移动到第一行
  • nG表示移动到第n行,n为数字
  • G表示移动到最后一行
  • n加回车,向下移动n行,n为数字
  • 搜索:/word,向下搜索word字符串,?word,向上搜索字符串。n下一个,N上一个
  • 删除:x删除后一个字符,X删除前一个字符,dd删除一行,ndd向下删除n行,d1G 删除光标到第一行的数据,dG删除光标到末尾的数据
  • 复制:yy复制一行,nyy复制n行,y1G 复制光标到第一行的数据,yG复制光标到末尾的数据
  • 粘帖:p粘帖到下一行,P粘帖到上一行
  • :w写入文件,:q退出文件,:q!强行退出
</div>

3. Shell的使用中另一些常用命令:

       env打印所有的环境变量:
[root@chn-setemma /usr/local/tongban/logs]# env  ICU_DATA=/usr/local/emma_weibo_crawl/3rdParty/ICU/icu/data/SOLARIS/  DB2INSTANCE=db2admin  MANPATH=:/opt/compilers/man  TOMCAT_HOME=/usr/local/web-socket/tomcat
       set打印除了环境变量外的所有变量。

       unset name消除变量。
       自己定义的变量只会在自己的环境中使用,不会影响到同时登录到该机器的其他人。另外,一旦用户登出,则变量会自动失效,下次登录的时候需要重新定义。如果想在登录后自动加载一些变量,则必须修改登录配置文件。

       打印当前shell的PID:
[root@chn-setemma /usr/local/tongban/logs]# echo $$  23559

        export 变量名,将变量变为环境变量,那么子程序就可以使用该变量。注意此处的环境变量的意思是让子进程可以访问,export之后,该变量就会被保存到父进程的内存中,而子进程可以访问父进程的内存。但是与父进程平行的另一个用户的shell不能访问export出来的变量。另外,命令行数据的变量,甚至于环境变量都是针对此次登录的时候可见,一旦注销,所有的变量都会消失。因此,对于一些在每次登录的时候都需要的环境变量来说,需要将它们写在启动配置文件里面。
       系统配置文件:/etc/profile,  /etc/bashrc,   /etc/profile.d/*.sh,  用户配置文件:~/.bash_profile, ~/.bash_login, ~/.profile,  ~/.bashrc。如果需要所有用户都是用的变脸最好声明在/etc/profile中,而只有自己使用的变量声明在~/.bashrc中。</div>


        declaretypeset一样,用于声明变量属性,例如declare -i sum=100+200,那么echo $sum则会输出300。有比如,declare -x sum,则sum变为环境变量

        ulimit可以打印单个用户登录时,对系统的使用权限的上限,例如打开文件的数量,文件大小,cpu时间等等
[root@emma_test_server mm]# ulimit -a core file size          (blocks, -c) 0  data seg size           (kbytes, -d) unlimited  scheduling priority             (-e) 0  file size               (blocks, -f) unlimited  pending signals                 (-i) 40960  max locked memory       (kbytes, -l) 32  max memory size         (kbytes, -m) unlimited  open files                      (-n) 1024  pipe size            (512 bytes, -p) 8  POSIX message queues     (bytes, -q) 819200  real-time priority              (-r) 0  stack size              (kbytes, -s) 10240  cpu time               (seconds, -t) unlimited  max user processes              (-u) 40960  virtual memory          (kbytes, -v) unlimited  file locks                      (-x) unlimited

       此处需要介绍一下Linux的小命令操作符"`",这个是键盘1左边的那个键。在两个`之间的命令作为一个子命令会被独立运行并传回结果。例如:最常用的就是`date --date="2 days ago" +%Y%m%d`放在另一个命令中间来获取时间,起一个小命令的作用

4. 管道相关:

         Linux中管道用|来表示,即将前一句命令的处理结果传输到下一句命令来处理。下面例举几个管道常用的命令:
  • tee: ls -l /home | tee ~/homefile | more.  tee可以在不改变原来的输出的情况下,重定向另一个输出文件。
  • wc:ls -l /home | wc 用与计算行数
  • sort:cat /etc/passwd | sort -t ':' -k 3:-t后面接的是分隔符,-k后面接的是分割之后根据第几个field进行排序
  • uniq:cat /etc/passwd |sort | uniq:uniq表示重复的数据只显示一次
  • cut:echo $PATH | cut -d ':' -f 5: 将结果进行分割,-d后面接分隔符,-f后面接要取得几个field
  • grep:搜索命令