Linux 常用命令操作

作者 zhenlanghuo 日期 2018-07-14
Linux 常用命令操作

查看文件内容

  • cat

    连接文件并打印到标准输出设备上,经常用来显示文件的内容

    当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清显示的内容。因此一般用more等命令分屏显示。

    cat m1              在屏幕上显示文件ml的内容
    cat m1 m2 同时显示文件ml和m2的内容
    cat m1 m2 > file 将文件ml和m2合并后放入文件file中
  • more

    基于vi编辑器文本过滤器,以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。

    常用快捷键:H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令),B(向下滚动一屏)

    more -dc file       显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
    more -c -10 file 显示文件file的内容,每10行显示一次,而且在显示之前先清屏。
  • less

    作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。

    常用快捷键:PageUp(向上翻页),PageDown(向下翻页),Q(退出)

  • head

    用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。

    head -n 20 file     显示文件前20行
    head -c 20 file 显示文件前20个字符
  • tail

    用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。

    tail file           显示文件file的最后10行
    tail -n 20 file 显示文件file的最后20行
    tail +20 file 显示文件file的内容,从第20行至文件末尾
    tail -c 10 file 显示文件file的最后10个字符
  • vi

    UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。

    Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。


查看 文件/目录 信息

  • ls

    显示目标列表

    ls          显示当前目录下非隐藏文件与目录
    ls -a 显示当前目录下包括隐藏文件在内的所有文件列表
    ls -m 水平输出文件列表
    ls -t 按文件和目录的更改时间排序输出
    ls -R 递归显示目录和文件
    ls -l 列出文件和文件夹的详细信息
  • tree

    以树状图列出目录的内容

  • file

    用来探测给定文件的类型。

    file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。

  • stat

    用于显示文件的状态信息。

    stat命令的输出信息比ls命令的输出信息要更详细。

  • pwd

    以绝对路径的方式显示用户当前工作目录。


查找/比较 文件

  • find

    用来在指定目录下查找文件。

    find .                                  列出当前目录及子目录下所有文件和文件夹
    find /home -name "*.txt" 在/home目录下查找以.txt结尾的文件名
    find /home -iname "*.txt" 同上,但忽略大小写
    find /home ! -name "*.txt" 找出/home下不是以.txt结尾的文件
    find . -regex ".*\(\.txt\|\.pdf\)$" 基于正则表达式匹配文件路径
    find . -iregex ".*\(\.txt\|\.pdf\)$" 同上,但忽略大小写
  • whereis

    用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。

    只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

  • which

    用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。

  • locate/slocate

    都用来查找文件或目录。

    locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。这个数据库每天自动更新一次,可以使用updatedb命令手动更新数据库。

  • strings

    在对象文件或二进制文件中查找可打印的字符串。

    strings /bin/ls                     列出ls中所有的ASCII文本
    cat /bin/ls strings 列出ls中所有的ASCII文本
    strings /bin/ls | grep -i libc 查找ls中包含libc的字符串,不区分大小写
  • diff/diff3/cmp

    diff是比较给定的两个文件的不同,diff3则是比较三个文件的不同。

    diff命令是以逐行的方式,比较文本文件的异同处。

    cmp比较两个文件,给出差别字符的位置和行号。

    diff /usr/li test.txt           将目录/usr/li下的文件"test.txt"与当前目录下的文件"test.txt"进行比较
    cmp testfile testfile1 比较两个指定的文件

操作 文件/目录

  • rmdik

    用来删除空目录。

  • mkdir

    用来创建目录。

    如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。

    在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

    mkdir -m 700 /usr/meng/test         在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问
  • rm

    可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。

    对于链接文件,只是删除整个链接文件,而原有文件保持不变。

    使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它

    rm -r *                 删除当前目录下除隐含文件外的所有文件和子目录
    rm -i test example 交互式删除当前目录下的文件test和example
    rm -f test example 强制当前目录下的文件test和example
  • mv

    用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。

    如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

    mv ex3 new1             将文件ex3改名为new1
    mv /usr/men/* . 将目录/usr/men中的所有文件移到当前目录(用.表示)中
  • cp

    用来将一个或多个源文件或者目录复制到指定的目的文件或目录。

    如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。

    所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。

    cp ../mary/homework/assign .        将指定文件复制到当前目录下
    cp file /usr/men/tmp/file1 将文件file复制到目录/usr/men/tmp下,并改名为file1
    cp -r /usr/men /usr/zh 将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
    cp -i /usr/men/m*.c /usr/zh 交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中

文件/目录 权限设置

  • chmod

    用来变更文件或目录的权限。

    权限范围的表示法如下:

    u User,即文件或目录的拥有者;

    g Group,即文件或目录的所属群组;

    o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;

    a All,即全部的用户,包含拥有者,所属群组以及其他用户;

    r 读取权限,数字代号为“4”;

    w 写入权限,数字代号为“2”;

    x 执行或切换权限,数字代号为“1”;

    - 不具任何权限,数字代号为“0”;

    s 特殊功能说明:变更文件或目录的权限。

    chmod u+x,g+w f01             为文件f01设置自己可以执行,组员可以写入的权限
    chmod u=rwx,g=rw,o=r f01
    chmod 764 f01
    chmod a+x f01   对文件f01的u,g,o都设置可执行属性
  • chown

    改变某个文件或目录的所有者和所属的组。

    该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。

    用户可以是用户或者是用户id,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

    文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

    chown user:market f01           把文件f01给uesr,添加到market组
    chown user f01 省略":market",仅将文件f01给用户user
    chown -R liu /usr/meng 将目录/usr/meng及其下面的所有文件、子目录的文件主改成用户liu
  • chgrp

    用来改变文件或目录所属的用户组。

    组名可以是用户组的id,也可以是用户组的组名。

    文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。


环境变量设置

环境变量分类

按照生命周期分为:

  • 临时的:利用export命令,在当前终端下声明环境变量,关闭Shell终端失效
  • 永久的:需要修改相关的配置文件,变量永久生效

按照作用域分为:

  • 用户环境变量:只对特定的用户有效
  • 系统环境变量:对系统中的所有用户都有效

设置方法

  1. 临时环境变量设置

    在终端中输入$ export 变量名=变量值

  2. 永久环境变量设置

    • 对所有用户有效:在/etc/prifile文件中添加变量

      vim /etc/profile    
      export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
    • 对单一用户有效:在~/.bash_profile文件中添加变量

      vim /etc/profile    
      export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

      运行$ source 文件名让环境变量设置马上生效

其他相关命令

  • echo:显示某个环境变量 echo $PATH
  • export:设置一个新的环境变量 export HELLO="hello" (可以无引号)
  • env:显示系统中已存在的环境变量,以及在定义的环境中执行指令
  • set:显示本地定义的shell变量
  • unset:清除环境变量
  • readonly:设置只读环境变量

参考

Linux命令大全
【Linux】Shell脚本学习总结篇
Linux环境变量总结