系统操作命令

主要介绍基本的操作命令,用来进行日常的文件管理和使用操作。

  1. ls:列举当前目录或者指定目录的文件列表

    ls [options] <目录名称>
    -a(--all),列举所有文件,包括隐藏文件和../、./
    -l(--list),长数据串行格式输出,包含档案属性等属性
    -h(--human-readable),使用KB、MB、GB的单位输出
    -s(--size),使用档案大小内容排序
    -F(--classify),同时标示出档案、目录信息。*代表可执行、/代表目录、=代表socket档案、|代表FIFO档案
    -R(--recursive):连同子目录内容一同输出
    
    ls -alh #列举当前文件夹所有文件,并优化显示单位
  2. cp:拷贝文件或目录,可以创建连接文件

    cp [options] <源地址> <目的地址>
    cp [options] <目的目录地址> <源地址> ?
    -r(--recursive),迭代拷贝,同时拷贝目录下的所有文件
    -a(--archive),拷贝的同时同步文件的基础信息、文件特性
    -i(--interactive),拷贝覆盖源文件时会询问是否覆盖
    -f(--force),当已存在相同文件时,先移除已有文件再拷贝
    -l(--link),创建硬链接文件
    -s(--symbolic-link),创建符号链接
    
    cp -ri <源目录文件> <目标目录文件> #拷贝目录文件,覆盖前询问
    cp -l <源文件> <目标文件> #创建文件的硬链接,目录文件不可以创建硬链接
    cp -s <源文件> <目标文件> #创建文件的符号链接,目录文件也可以创建符号链接
  3. rm:移除目标文件或目录

    rm [options] <文件或目录>
    -f(--force),强制移除,若目标文件已存在则直接赋值
    -i(--interactive),若文件已经存在,目标或变得越来越近,不会询问导致互相覆盖
    -r(--recursive),递归删除
    -v,显示执行细节
    
    rm -rf <文件> #强制移除文件或文件夹

    rmdir:移除空目录

    rm [options] <目录文件>
    -p,递归执行,移除某个只含有空目录的空目录
    -v,显示执行细节
  4. mv:移动文件

    mv [options]  
    -f(--force),强制移动,会直接覆盖同名的文件
    -i,若存在同名文件则询问是否覆盖
    -u,若存在同名文件则比较文件的更改时间,保留最新的

    [mv无法移动目录,因为本身不具备迭代参数]

  5. tar:基本压缩、解压命令(-c、-x、-t是三个不同功能;-j、-z是两个不同压缩引擎;注意不要混用)

    tar [options] -f <压缩后文件> <压缩前文件>
    tar [options] -f <解压前文件> -C <解压后目录>
    -c,打包文件
    -x,解打包或解包
    -t,查询包中的文件内容
    -j,通过bzip2进行压缩解压缩(后缀.bz2)
    -z,通过gzip进行压缩解压缩(后缀.gz)
    -v,显示压缩和解压执行细节
    -f,指定压缩文件(压缩后文件或未解压文件)
    -C,指定目的文件路径
    
    tar -cv<压缩引擎j/z>f <压缩后文件> <压缩前文件> #将文件压缩到指定路径
    tar -xv<压缩引擎j/z>f <解压前文件> -C <解压后文件目录> #将文件解药到指定目录
    tar -tv<压缩引擎j/z>f <压缩文件> #查看某压缩文件的内容
    
    tar -cvjf ./test1.tar.bz2 ./test1 #将test压缩到test.tar.bz2
    tar -xvzf ./test2.tar.gz -C ./ #将test2.tar.gz解压到当前目录下
    tar -tvzf ./test3.tar.gz #查看test3.tar.gz压缩文件的内容
  6. chmod:更改目录和文件的权限

    linux的文件有三种不同的用户分别有三种不同的权限,不在此处讨论。

    chmod [options]  file
    -R,递归执行
    -v,输出执行细节
    
    chmod -R +wx ./dir #为./dir这个目录文件递归地添加写入和执行权限
  7. chown:更改文件或目录的所有者(change owner)

    chown [options] : 
    -R,递归执行
    -v,显示执行细节
    
    chown -R root:root ./dir/ #将./dir目录的所以文件的拥有者和群组更改为root:root
    chown root ./file #将./file文件的拥有者更改为root

    [chgrp更改群组命令类似]

  8. touch:创建新的空文件或修改文件的时间标签

    若文件本身存在,则会自动切换为更换时间的功能

    touch [options] 
    -a ,改变atime和ctime为当前时间
    -t 
  9. test:shell中常用的测试条件表达式

    test也可以用中括号[ ]代替,他们是等价的,但是要注意参数之间要空格(test的参数非常多,此处介绍常用的一些)

    test [options] <目标>
    [ [options] <目标> ]
    #逻辑判断:
    -a,前后表达式同时成立,相当于逻辑与
    -o,前后表达式满足一个,相当于逻辑或
    
    #数值判断(整数):
    -eq,相等
    -ge,大于等于
    -le,小于等于
    -gt,大于
    -lt,小于
    -ne,不等于
    
    #字符串判断:
    -z,字符串长度为0
    ==,相同
    !=,不相同
    
    #文件判断:
    -ef,判断两个文件是否指向同一个inode,判断同一个文件或硬链接
    -nt,判断前者比后者新
    -ot,判断前者比后者旧
    -e,判断文件是否存在
    -rwx,判断文件可读、可写、可执行
    
    test 2 -gt 1 -a 1 -eq 1 #结果为True
    [ ! -z "nihao" -a -z "111" ] #结果为True
  10. vim的常用快捷键

    vim是在linux中十分常用的文本编辑器,因为其强大的功能以及复杂的配置,需要相当长时间的学习和使用才能真正掌握,此处只简单列举一些常用指令,方便我们简单地使用vim编辑工具。

    先简单描述下vim,使用vim打开一个文本文件会有三种模式:一般模式、编辑模式、命令行模式。只有在编辑模式中我们才能修改和增添文本的内容,另外两个模式中会将输入作为某些命令执行。

    • 一般模式:其他模式按ESC即可进入;光标可以在文本中移动,但是不可以编辑文本,键盘输入全部转换为内部命令并执行
    • 编辑模式:一般模式按i即可进入;光标可以在文本中移动,可以编辑文本,不可以执行内部命令
    • 命令模式:一般模式按Shift + :进入;光标在最底下的输入框内,不能移动光标,可以执行编辑器相关的命令(保存、退出、查找等命令)

    [主要的常用快捷键都在一般模式中]

    # 一般模式:
    d       :删除光标所在上下左右的字符(方向键控制,上下会删除两行,左后会删除一个)
    dd      :删除光标所在的一行
    ndd     :删除光标所在行及以下共n行
    y       :复制光标选中字符(同d方向键控制)
    yy      :复制光标所在的一行
    nyy     :复制光标所在行及以下共n行
    p       :粘贴
    v       :选中字符,通过方向键控制选中范围
    
    u       :撤回
    Ctrl + r:重做
    
    0(zero) :移动到本行的开头
    $       :移动到本行的尾部
    
    /       :向下搜索模式,进入搜索模式之后再输入搜索的关键字
    ?       :向上搜索模式,进入搜索模式之后再输入搜索的关键字
    n       :搜索模式查找下一个
    N       :搜索模式查找上一个
    
    # 命令模式,部分可以组合使用
    w       :写入文件,可理解为保存
    q       :退出编辑器,默认不保存退出
    e       :将文件回退为未编辑状态
    !       :强制执行(wq!为强制保存退出)
    w :文本保存到另一个文件中,可理解为另存为
    r :再当前光标下导入另一个文件的内容
    
    set nu  :显示行号
    set nonu:不显示行号

系统信息相关命令

主要介绍操作系统相关参数的命令,可以查看ip和端口连接状态、磁盘、cpu、内存等信息、相关服务信息的。

  1. ifconfig:查看网卡配置信息

    route:查看和设置linux的静态路由表

    route [options]
    -C,查看Linux核心的路由缓存
    -v,详细模式
    -n,不执行DNS反查,直接显示数字形式的IP地址

    route的路由设置

    route add [路由条目] #添加一条静态路由
    route del [路由条目] #删除一条存在的路由
    -net [路由表],表示到一个网络的路由表
    -host [路由表],表示到一个主机的路由表
    netmask <掩码>,设置掩码
    target <目标网络或主机>,目标网络或目标主机
    gw <网关>,设置默认网关
    dev <网卡>,指定网络接口
    
    #为设备添加一条从某网卡到达192.168.0.0/24的路由
    route add -net 192.168.0.0 netmask 255.255.255.0 dev <网卡> 
    #为设备添加一条屏蔽172.16.0.0/16的规则
    route add -net 172.16.0.0 netmask 255.255.0.0 reject 
    #为设备删除一条屏蔽172.16.0.0/16的规则
    route del -net 172.16.0.0 netmask 255.255.0.0 reject 
    #为设备添加一个网关为192.168.0.254的规则
    route add default gw 192.168.0.254 
  2. ps:显示当前运行的进程信息以及pid、cpu、内存信息(截取当前时间点的状况输出)

    默认参数下只包含当前终端、当前用户的进程信息

    ps [options]
    -a,显示所有终端的执行程序,和其他参数结合可以扩展其他参数范围
    -u,显示当前用户的所有进程
    -g,显示当前群组的所有进程
    -c,显示当前进程相关的所有进程
    -x,显示所有进程,不以终端机区分
    -H,显示进程间的相互关系,树结构
    
    ps -aux #显示所有正在内存中的程序,最常用的ps用法
    ps -aHp  #显示某个pid程序的所有相关进程

    Linux常用命令_第1张图片

    对上面参数做简单的说明:

    user :该进程属于哪个用户
    PID      :进程号
    %CPU :占用CPU百分比
    %MEN :占用物理内存百分比
    VSZ      :占用虚拟内存大小(KB)
    RSS      :占用固定内存大小(KB)
    TTY      :运行终端,?表示与终端无关(后台);tty表示本机的登入者;pts等其他表示网络连接进入的程序
    STAT :表示进程的状态
    START    :表示进程触发时间
    TIME :表示进程实际使用CPU的时间
    COMMAND  :表示该进程的实际指令
  3. top:实时显示系统的资源占用情况,Linux常用的性能分析工具。点击q退出

    top [options]
    -H,开启线程查看,查看线程之间的相互关系
        -p,指定某个pid的进程(-p )
    -u,指定某个用户的进程(-u )
    
    top #常用指令,不加任何参数
    top -Hp  #表示该pid的所以依赖进程

    Linux常用命令_第2张图片

    对上面参数做简单的说明:

    第一个红色区块:
    当前时间    登录的用户数量    系统平均负载:取1、5、15分钟系统平均负载
    任务总数    running进程    sleeping进程    stoped进程    zombie进程
    占用CPU:us(用户空间占用CPU)    sy(内核占用CPU)    ni    id    wa    hi    si    st
    物理内存占用:总量    空闲内存    使用中内存    缓存的内存量
    Swap内存占用:总量    空间交换区内存    使用中交换区内存    缓冲的交换区内存量
    
    第二个红色块区:
    PID      :进程号
    USER :进程所有者
    PR       :优先级
    NI       :nice值
    VIRT :进程使用的虚拟内存量
    RES      :进程使用的未被换出的物理内存量
    SHR      :共享内存大小
    S        :进程状态
    %CPU :占用CPU百分比
    %MEM :占用物理内存百分比
    TIME+    :进程使用的CPU时间合计
    COMMAND  :该进程的实际指令
    
  4. netstat:显示linxu中的网络系统状态信息,可以查看端口和ip的连接状态

    netstat [options]
    -a,显示所有连线中的Socket
    -t,显示tcp协议的连接状况
    -u,显示udp协议的连接状况
    -l(listening),显示监控中的服务器socket
    -p,显示每个socket对应的正在使用的程序名称
    -n,直接使用ip+端口表示(默认使用域名+服务名)
    -r,显示routing table
    
    netstat -tunlp #显示所有正在侦听的tcp、udp连接,使用IP地址显示,并显示相关程序名称
    netstat -an #列出所有连线中端口,包括所有类型侦听和非侦听端口情况,使用IP端口形式表示
    netstat -r #显示路由表信息
    

    Linux常用命令_第3张图片

  5. stat:显示文件的状态信息

    可以显示包括文件大小、占块大小、硬链接数量、权限、uid、最近访问、最近变更、最近改动时间

    • 访问(atime):最后一次访问文件内容。
    • 变更(mtime):文件内容被修改。
    • 改动(ctime):文件目录被修改、文件所有者和权限被修改。
    stat [options] 
    -L,支持符号链接,查看的是符号链接的文件状态(默认下回通过符号链接查看原文件状态)
    -f,显示文件系统状态而非文件状态
    -t,简洁模式显示,直接列举各种参数,没有说明和排版,方便作为函数返回调用
    

    [cat访问会改变atime;vim访问会改变mtime和ctime;chmod会改变ctime]
    Linux常用命令_第4张图片

  6. df:显示系统磁盘设备信息

    df [options]
    -a,包含所有文件系统
    -h,使用易读方式输出结果
    
    df -ah #易读方式显示系统的整体磁盘信息(文件系统、搭载目录、占用情况等)
    

    du:对某个文件或目录查看磁盘空间占用情况(可查看多个文件或目录并统信息)

    du [options] <文件或目录>
    -a,同时统计目录下的文件与目录容量
    -h,易读方式显示
    -s,仅列出总量
    
    du -sh file1 file2 file3 #输出file1 2 3的磁盘占用统计信息
    du -ah file1 dir1 #输出file1的磁盘占用信息和dir1的目录及内部统计信息
    
  7. free:显示linux中空闲、已用的物理内存情况及swap内存信息

    free [options]
    -b -k -m -g,以Byte、KB、MB、GB单位显示
    -t,显示内存总和
    
    free -m #显示内存和swap内存情况,使用MB单位表示
    
  8. kill:向进程发送信号,可以用于终止进程

    kill [-num] 
    -1(HUP),终端挂断
    -2(INT),中断;同Crtl+c
    -3(QUIT),退出;同Ctrl+\
    -9(KILL),强制终止
    -15(TERM),正常终止
    -18(CONT),继续;对应-19暂停
    -19(STOP),暂停;对应-18继续
    
    kill -19 2334 #暂停pid为2334的进程
    kill -9 3455 #强制终止pid为3455的进程
    

    [kill的默认参数是15,也就是正常终止]


用户相关命令

用户账号、口令、创建新用户等相关命令。

  1. useradd:建立用户账号

    useradd  [options] 
    -g,指定用户所属群组
    -G,指定加入的次要组
    -u,指定用户id
    -m,自动建立用户的登入目录
    -p,指定登录口令
    -s,指定用户登录使用的shell
    
    useradd yonghu -g root -u 23333 -mp yonghu -s /bin/bash #建立一个新用户yonghu,设置uid为2333、群组为root、口令为用户,使用shell为/bin/bash,且自动建立用户家目录
    #一个正常的用户起码需要有用户名、用户口令、家目录、群组、shell;即是至少需要pmgs这几个参数
    

    [useradd在没有任何参数的情况下建立的是三无账号,无家目录、无密码、无系统shell;但是useradd可以通过参数补充相关信息]
    [设置群组前先确认群组存在]

  2. usermod:修改用户信息

    可以修改用户的各种信息

    usermod [options] <用户名>
    -l <更改后用户名>,修改用户名
    -L / -U,锁定/解锁用户,锁定后无法登入
    -u <更改后uid>,修改uid
    -s ,更改用户shell
    -g <目标组群>,更改组群
    -d <目标目录>,更改家目录,需要些完整路径
    
    usermod -d /Documetn/test yonghu #将用户yonghu的家目录更改为/Documnet/test
    
  3. userdel:删除用户信息

    userdel [options] <用户>
    -f,强制删除用户,删除用户相关的一切内容(一个危险参数不建议使用)
    -r,删除用户的家目录和邮件池
    
  4. passwd:设置用户密码

    passwd [options] <用户>
    -d,删除密码,只有系统管理员有权限
    -f,强制执行
    -l / -u,锁定/解锁密码
    -s,列出密码相关信息
    
  5. sudo:用其他身份执行之后的命令,默认使用root执行

    sudo [options] 
    -u <用户>,指定执行命令的用户身份
    -s,指定执行命令使用的shell
    -H,将HOME环境变量设置为新身份的环境变量
    -b,后台执行命令
    
    sudo -u yonghu -s /bin/bash move ./a ./b #使用yonghu身份通过bash执行move命令
    

搜索相关命令

linux中常用的搜索命令:which、whereis、locate、find

  1. which:查找命令的绝对路径,只能找到PATH内所规范的目录的命令,bash内建命令和其他目录命令无法找到

    which [options] 
    
    which pwd #查找pwd命令的路径
    which java #查找java命令的路径
    

    [which没有什么会影响搜索的参数]

  2. whereis:查找二进制程序、源代码等相关文件路径,通过数据库查找

    whereis [options] 
    -b,查找二进制文件
    -B <目录>,查找目录下的二进制文件
    -s,查找源代码文件
    -S <目录>,查找目录下的源代码文件
    -m,查找说明文件
    -M <目录>,查找目录下的说明文件
    
    whereis -b python #查找系统中python的二进制文件的路径
    whereis svn #查找系统中svn的二进制、源代码和说明文件路径
    whereis -B /usr/share tomcat #在/usr/share目录下查找tomcat命令的二进制文件
    

    和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。

    但是该数据库文件并不是实时更新,默认情况下一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

  3. locate:文件查找工具,通过数据库查找

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。

    locate [options] <目录> <样式>
    -n ,显示num条输出
    -i,忽略大小写
    
    locate /bin/share *.sh 搜索/bin/share目录下所有.sh结尾的文件
    
  4. find:在指定目录下查找文件

    用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

    find <目录> [options]
    -i,忽略大小写
    -name <样式>,按文件名查找,可以使用通配符
    -type <样式>,按文件类型寻找(fdlsbcp七种文件类型)
    -size ,按文件大小寻找
    -user <样式>,按文件拥有者寻找
    -regex <样式>,使用正则表达式作为搜索样式
    -maxdepth ,向下深度最大3层
    -mindepth ,搜索当前目录至少两个子目录所有文件
    ! [options],逻辑非,寻找不符合后面样式的文件
    
    find / -iname "*.pdf" -user "yonghu" -maxdepth 3 #从根目录开始往下3层,搜索pdf结尾,且属于yonghu的文件和目录 
    

    [find命令的参数很多,只列举常用几个]


To Be Continue ...