zoukankan      html  css  js  c++  java
  • Linux常用命令详解

    自助命令:ls --help   man ls  info ls

    文件属性:ls -al  显示当前目录下文件/目录拥有者,所属组,其他人的写读执行权限  文件或目录下属文件数 拥有者 群组 内容大小(byte) 最后修改日期 文件/目录名  注意:对于目录,如何没有x权限,则进不去目录 【显示别的目录下的文件:ls -al /,表示显示根目录下的文件 】

    改变组权限:chgrp eg>chgrp users -R test.txt  【-R表示递归持续更新,users组应在/etc/group里存在】

    改变拥有者:chown eg>chown [-R] 账号名[:组名] 文件或目录  【账号名在/etc/passwd里,cp复制命令会将文件或目录的属性权限一起复制,这时就需要更改权限】

    改变文件权限:chmod eg>chmod [-R] 777 文件或目录,或者chmod u=rwx,go=rx 文件或目录,或者chmod a+w【rwx分别对应数字421,a+w表示对所有人提供读权限】

    新建目录:mkdir 【-p建立多层目录,-m修改目录属性eg:mkdir -m 755 test】

    新建空白文件:touch【新建隐藏文件,在文件名前加.】【修改文件日期eg touch -d "2 days ago" 文件名。或者touch -t 201706091111 文件名】

    删除文件: rm 【如果文件名前有-,则删除应该用rm ./test】

    删除目录:rmdir [-p] 【删除空目录,要删除有内容的目录:rm -r】

    移动文件:mv 【常作更名】

    复制文件或目录:cp 【-s 复制为快捷方式,-p 常做备份复制属性,而非默认属性,-a 复制所有属性,-u 当两文件不同时才复制】

    当前目录:. 或者./ 【在执行shell脚本时,通常用./run.sh 其实是指定该目录下的run文件】

    上一层目录:.. 或者../

    前一个工作目录:-

    当前用户的家目录:~ 【~root,表示该账号的家目录】

    显示当前目录:pwd 【对于链接文件,采用pwd -P,可以定位实际目录结构】

    得到路径的文件名:basename 文件路径

    得到路径的目录名:dirname 目录路径

    查看文件内容:

      cat:从第一行开始显示 -n显示行号包括空白行,-b 显示不包括空白行行号

      tac:从最后一行开始显示

      nl:显示时输出行号,不显示空白行行号,-b可以显示空白行行号,【nl可以对行号进行设计eg:nl -b a     -n rz -w 3 test,行号显示为001,002...】

      more:一页一页显示 空格键下翻一页,enter键下翻一行,/要搜索的字符串,q退出显示,b往上翻页,:f显示文件名及显示的行数

      less:一页一页显示并可往前翻页 pageup上翻页,pagedown下翻页,空格键下翻页,/字符串 向下查找,?字符串 向上查找,n查找下一个,N反向查找下一个,g到第一行,G到最后一行,q退出less

      head:只看头几行 -n接数字,表示显示几行

      tail:只看末尾几行 常用在查看不断更新的日志,-n接数字,表示显示几行,-f持续显示,按Ctrl+c停止

      od:以二进制形式读取 读取数据格式的文件或二进制文件,-t后面接数据类型【a 默认字符输出,c 用ASCII输出,d 十进制,o 八进制,x 十六进制,f 浮点数】

       eg显示test文件的第11行到20行

        head -n 20 test | tail -n 10 【|管线:前面的输出要经过后面的命令才显示】 eg echo pwd | od -t oCc,将pwd以八进制的ASCII码输出

    文件种类:

      -:普通文件:通过cat读取文件,但数据格式文件(如一些登录日志文件),应该用last去读

      d:目录

      l:快捷键

      设备与装置文件

        b:区块设备(如硬盘)

        c:字符设备(如键盘鼠标)

      s:资料接口文件

      p:数据输送文件 

    文件扩展名:

      .sh shell脚本语言

      .Z,.tar,.tar.gz,.zip,.tgz 压缩文件

    文件与目录的默认权限:

      umask:查看当前用户新建文件或目录时权限,如0022 对应为u=rwx g=rx o-rx 【nmask -S将得到这种结果】,对于新建文件对应的默认权限为 -rw-r--r--【文件默认拿掉x权限,然后当前用户查到的默认权限为022,即组和其他人拿掉为2的读权限】,对于新建目录,对应的默认权限是drwxr-xr-x【目录默认有x权限,同样拿掉了为2的读权限】

    文件或目录的隐藏属性:

      chattr: +/-a   +/-i 【+i可以让一个文件不被更改,只能root用户能设定,+a让文件只能增加内容,不能更改原有内容】

      lsattr:显示文件或目录的隐藏属性

    查看文件类型:file 文件名

    指令和文件搜索命令:

      which:搜索命令位置

      whereis:找特定目录下的文件,-l 列出可以查找的目录,-b找二进制文件

      locate:利用Linux內建数据库查找 -i:忽略大小写,-c输出找到文件数量,-l输出几行,如-l 5,-r接正则表达式【locate查找的为/var/lib/mlocate】

      find:直接搜索硬盘【很慢】,可以用*通配符,find [路径] [操作] [状态] eg  find / -mtime 0 【找当天内更改过的文件】 find / -mtime +1 【找大于等于一天前的更改过的文件】 find / -mtime -1【找小于等于1天前的更改过的文件】,find /home -user 用户名 【找某个路径下某位用户的文件】find -size [+/-] 大小【找符合大小的文件】,find -name analysisTeleInfo -exec ls -l {} ;【加了额外动作的find,find -name analysisTeleInfo会输出该文件所在的路径,然后exec 以ls -l(不支持别名)执行该路径】

    eg:有两位开发人员,在不同的群组,现在要一起开发一个项目,要求该项目内的人员都有开发权,但其他人不能进入查阅

      首先新增群组:groupadd project

      将这两位开发人员加入该群组:useradd -G project name1  useradd -G project name2

      建立项目的开发环境:mkdir /svn/ahome

      更改该环境所在的群组:chgrp project /svn/ahome

      更改所在环境的权限:chmod 770 /svn/ahome  【错误:因为即使这样分配权限,当name1进入工作目录,新建的文件是以自己所在组的,不是项目所在组,顾,权限应该为2770,即给予工作目录SGID权限,这样,name1和name2新建的文件都是以所在工作组为组名的,具有共同开发的权限。补充SUID,表示该文件在被另一个拥有执行权但不能访问的人在访问时,可以暂时拥有该文件拥有者的权限】

    linux文件系统类型:EXT2,是一种索引式文件系统,window现在基本为NTFS

    linux压缩命令:

      *.Z compress程序压缩

      *.zip zip程序压缩

      *.gz gzip程序压缩(常用)

        压缩后源文件会被删除,如果原文件是文本文件,可用zcat/zmore/zless读取,解压缩:gzip -d *.gz,搜索压缩文件中的关键字字符串:zgrep -n 'String' *.gz,-c 输出压缩数据到屏幕

      *.bz2 bzip2程序压缩(常用,是gzip的升级,-k 保留源文件)

      *.xz xz程序压缩(常用,-k 保留源文件),可以查看压缩文件压缩前后的容量,

      *.tar tar程序打包,并没有压缩(常用)

        压缩:tar -jpcv -f filename.tar.bz2 文件/目录

        查询:tar -jtv -f filename.tar.bz2

        解压缩:tar -jxv -f filename.tar.bz2 [-C 解压缩目录]

      *.tar.gz tar程序打包,经过gzip压缩

      *.tar.bz2 tar程序打包,经过bzip2压缩

      *.tar.xz tar程序打包,经过xz压缩

     eg:备份某时间后更新的数据

        tar -jcv -f ./filename.tar.bz2 . --newer-mtime='2017/06/13' . 表示打包并压缩当前目录下20170613000000时间后更改的文件成filename.tar.bz2文件

      备份时不希望备份某个文件或目录,用--exclude=目录(可用通配符*)

      备份工具:dd if='input_file' of='output_file' bs='block_size' count='number',eg:dd if=/test of=/test2.back

      备份工具:cpio -ovcB > file/device 备份

           cpio -ivcdu < file/device 还原

           cpio -ivct < file/device 查看


    vi 编辑器:

      使用vi新建或打开一个文件:vi filename  【有可能vi要带上绝对路径,如user/vi filename】

      进入编辑模式:按i /o /a等,【若按下了ctrl+s,界面会冻住,按ctrl+q解冻】

      退出编辑:esc

      保存文件:wq 【强制保存:wq!】,不保存:q

      vi打开文件常用操作:hjkl分别代表上下左右键,也可以用方向键,配合数字,可以一次移动多行或多列光标eg 3+k往左移三位,PgDn下移一页,PgUp上移一页,0/home移动到该列的第一列,$/end移动到最后一列,gg移动到文件第一行,G移动到文件最后一行,/字符串 向下查找字符串,?字符串 向上查找字符串,带上n表示一直查找,N反向查找,:1,$s/字符串1/字符串2/g 全文替换字符串1为字符串2,:1,$s/字符串1/字符串2/gc 全文询问替换,:n1,n2s/字符串1/字符串2/g  替换你行到n2行之间的字符串,X 删除光标前的字符, x删除光标后的字符,nx 连续删除多个字符,dd删除整行,ndd光标往下删n行,yy复制光标所在行,nyy复制光标往下多行,p将复制的数据在光标下一行粘贴,P在上一行粘贴,u 重复前一个动作,Ctrl+r 重做前一个动作,. 重复前一个动作

      vi进入编辑常用操作:i /I定位在当前光标处/该行口头,r/R 进入替换模式,r替换光标处字符一次,R替换多次

      vi编辑完离开常用操作::w写入文件,:q离开(有更改时,离不开),:q!强制离开,:wq存完离开,ZZ未改动直接离开,改动保存离开,:w filename 另存为filename,:r filename 将filename里的数据追加到光标后面,:n1,n2 w filename 将n1行到n2行存储到filename,:set nu 显示行号,:set nonu 取消行号

    查看当前vi是否是vim:alias 会出现alias vi=‘vim’, 【命令别名:alias,取消别名 unalias

      vi单个选择和区块选择:用vi打开文件后,v字符选择,V行选择,ctrl+v区块选择,可以结合上下左右完成选择,y复制选择,p粘贴选择,d删除选择

      vi多文件编辑:vi test.txt test2.txt 同时打开多个文件,将test.txt中复制4行(4yy),然后:n,回车,编辑test2.txt,p粘贴,:file查看当前vi打开的文件,:n编辑下一个文件,:N编辑上一个文件

      vi多窗口查看:gg到文件第一行,然后:sp,G到文件最后一行,此时的文件会显示上下两个窗口,上面是文件末尾数据,下面是文件开头数据,:sp filename 表示当前窗口加一个filename窗口,Ctrl+w+↑进入上一个窗口

      vi自动补全功能:ctrl+x  + ctrl+n 选取当前文件中的字符串作为提示信息

              ctrl+x  + ctrl+f 以当前文件名为提示信息

              ctrl+x  + ctrl+o 以该文件的扩展名的语法作提示信息 如html.html文件,style=“b” 按ctrl+x  + ctrl+o会出现很多提示信息

      vi中环境设置:可以新建 ~/.vimrc环境设置文件,set backspace=2 "用退格键删除,set autoindent 自动缩排,set nu 显示行号,syntax on语法检查颜色显示

      中文编码问题:1,linux默认语系,2,文件编码,3,启动的终端接口 要统一

      window和linux下回车换行符的问题:window是  (换行回车)结束一行,linux是 结束一行,所以,window转linux时,回车 可能会显示为^M符号,linux转window时,显示为一行,需要用dos2nuix 或者nuix2dos转换下


    bash:Bourne Again SHell简称bash。

      bash shell:1.命令存储功能,可以上下翻看已输入的命令

            2.安装bash-completion可在使用tab键时进行选项/参数补齐

            3.命令别名设置 alias lm='ls -al'

            4.前台后台命令设置

              5.shell scripts 程序化脚本

            6.通配符 eg ls -l /usr/bin/X*

    查询指令是否为bash shell內建指令:type ls 不是, type cd 是

    指令换行 /enter 

    快速编辑指令:ctrl+u 光标处向前删除整个指令串  ctrl+k向后删除,ctrl+a光标到指令串开头,ctrl+e光标到指令串结尾

    shell 变量:

      变量设定与修改 name=Myname

        规定:=两边不能有空格,内容中不能有空格【可用“可以存变量”,‘不能存变量,以字符形式显示’】,变量名不能以数字开头。

        用法:用跳脱字符/表示特殊字符如 $,` ,空格,用反单引号包含内容中的指令 eg name=`ls -l` echo $name,变量内容增加:"$name"直接接新加内容,或者${name}直接接新加内容,将该变量作为环境变量:export name,取消该变量:unset name

        eg:个性化工作目录

          将自己常用的工作目录设为变量work:work="servser/analysis",然后在~/.bashrc文件中添加个性化设置:work="servser/analysis"   export work ,下次登录系统,可以用 cd $work 直接进入工作目录

      变量的取用echo $name  或者 ${name}

      环境变量:nuv 或 export 查看所有环境变量

           set 查看所有的环境变量和自定义变量

        生成0~9间的随机数:declare -i number=$RANDOM*10/32768; echo $number

        变量,只与上一个命令有关,上一个命令执行成功,则echo $? 输出0,否则输出错误码

        locale  查看linux下默认语系,-a 查看linux下支持的语系

        变量的读取与申明:

          read 变量  将用户输入的内容作为该变量的内容, -p 接提示字符,-t 接等待时间秒数

          declare 或 typeset 列出所有的变量和内容

            declare -a 变量 定义变量为数组类型,-i 变量 为整数类型,-x 将变量改为环境变量,-r 设定变量为只读,且不能unset,+x为取消环境变量设置,数组设定:var[index]=content

    ulimit 限制文件和程序

      ulimit [-SHacdfltu] 配额【单位为k】,-a 查看当前用户的限制情况

    历史命令:history 列出当前内存中所有的命令历史,接n 查最近n个命令, -c 清除历史命令,-w 更新记录文件

       !number 执行第number个指令,!!执行上一个指令,!al 执行以al开头的最近的指令

    linux的开机欢饮界面设定:cat /etc/issue,开机提示信息:/etc/motd文件

    读入环境配置文件:source 配置文件名 或者 文件名

    终端机的环境设定:linux下的文字接口终端机即tty1~tty6

      stty:-a 列出所有的setting tty 内容,intr 中断,quit退出,erase向后删除,kill删除指令Ctrl+u,eof 结束输入,start 重新启动程序的outputCtrl+q,stop 停止屏幕输出Ctrl+s,susp给一个定时停止,可以结合按键更改这些终端命令。

      set:设定终端机输入输出环境,set -u 使用未定义的变量时,显示错误消息

    通匹配和特殊符号:

      * 0到多个字符

      ? 一定有一个

      [abcd] abcd任一个

      [0-9] 0-9之间任意一个

      [^abc] 非abc的任一个

      # 批注符号

       跳脱符号,将特殊字符或通匹符还原成一般字符

      | 管线

      ; 连续指令分割符

      ~ 用户家目录

      $ 取变量

      & 工作控制符,将指令变成在后台工作

      ! 逻辑运算中的非

      / 目录符号

      > ,>> 数据流重导向,表示取代,累加

      <,<< 数据流重导向,输入导向

      ‘ ’ 单引号,不具有变量置换功能

      “ ” 双引号,具有变量置换功能

      ` ` 反引号,可以执行指令

      ( ) 中间为shell的开始于结束

      { } 命令区块

    数据流重导向:把应该出现在屏幕上的数据重导向到其他位置

      分为:标准输入  <,<<,标准输出 >,>>,标准错误输出:2>,2>>

      linux 下的垃圾回收站:/dev/null 导入此文件的数据将被自动清除

      2>&1 或者 &>! 将正确的输出和错误输出同时导向到一个文件

      数据写入:eg cat > test

        键盘写入123,按ctrl+d结束写入,然后cat test有刚才输入的内容

        cat > test << "return"  输入到return时自动结束输入

        eg: 将echo “message” 作为标准错误输出

          echo "message" 2>/dev/null 1>&2

    强制将缓存区数据更新到磁盘:sync

    命令执行判断:;,&&,||

      ; eg sync;shutdown -h now 关机前强制同步数据

      命令1 && 命令2 前面正确执行($?=0),后面才执行。

      命令1 || 命令2 前面执行正确,2不执行,前面错误,执行2

      eg:命令1 && 命令2 || 命令3 常作为判断用,即命令1成功执行命令2,否则执行命令3

    管线命令:

      eg:ls -al /etc | less 将管线前的输出(错误的输出不处理)作为管线后命令的输入

      截取命令:cutgrep  (以行为单位)

        eg:echo $PATH | cut -d ":" -f 5 取path变量中以:分割的第五个,取多个,-f 3,5

          export | cut -c 12- 取export打印出的变量中第12个字符后的内容

          last | cut -d " " -f 1 取最近登录情况中的用户名

        eg:grep [-acinv] [--color=auto] '要搜索的字符串' filename

          -a 将二进制文件以text文件的方式搜索,-c 计算搜索到的次数,-i 忽略大小写,-n 显示行号,-v 反向搜索,--color=auto加颜色显示

          【grep进阶:dmesg | grep -n -A3 -B2 --color=auto 'ID' 将dmesg打印的信息找出ID包含前3行,后2行,并以颜色显示】

    排序命令:sortwcuniq

      sort:-f 忽略大小写,-b 忽略前面的空格,-M 以月份排序,-n 以数字排序,-r 反向排序,-u 排序后相同的数据中只出现一行,-t 分隔符,-k 以哪个区间来排序

      uniq:去重,-i 忽略大小写,-c 计数

      wc:-l  显示文件列数,-w 显示字数,-m 显示字符数 直接wc 依次显示这三个

     双向重导向:tee

      -a 累加进文件

      同时将数据流分送到文件与屏幕,如:last | tee test.txt | cut -d " " -f 1,将last输出到test.txt文档,并且捕捉第一档

    字符转换命令:tr,col,join,paste,expand

      tr -d 字符串 删除字符串,-s 取代重复字符,如:last | tr [a-z] [A-Z] 将last输出,所有小写改大写

      col -x 将tab键转换成对等的空格键

      join 两文件中有相同数据的行,会将数据写成一行

        -t 默认以空格分割,-i 忽略大小写,-1  数字文件1的第几个字段,-2 数字 文件的第几个字段  

      如:join -t "=" test1.txt test2.txt,两文件行内容以=号分割,test1.txt:name=xiaoming  test2.txt :name=xiaozhang 则显示 name=xiaoming=xiaozhang

      paste -d 接分割符,默认tab键分割,paste [-d] file1 file2 将文件中相同的行贴成一行,以tab键隔开

      expand [-t] file 将tab键转换成空格键,一般一个tab键,对应8个空格键,-t 后接数字,可以定义转换tab键大小

    分区命令:split

      split [-bl] file prefix ,-b 以大小分割,-l 以行数分割  如:split -b 300k test.txt test 将test文件,按每个300k的大小,分割成多个以test开头,后接aa,ab,ac,即testaa,testab,testac等文件;还原:cat test* >> testback,ls -al / |split -l 10 - test 将根目录下文件以每10行分割,到文件test开头的文件中。【其中的 代替标准输入或输出】


    正则表达式:

      特殊符号:

      [:alnum:] 表示0-9,A-Z,a-z

      [:alpha:] 表示A-Z,a-z

      [:blank:] 表示空格和tab键

      [:cntrl:] 表示键盘上的控制键

      [:digit:] 表示0-9

      [:graph:] 除空格和tab外的左右键

      [:lower:] 表示a-z

      [:print:] 任意可以打印出来的字符

      [:punct:] 表示标点符号

      [:upper:] 表示A-Z

      [:space:] 表示产生空白的字符 包括tab 空格键,cr

      [:xdigit:] 代表16进制的数字与字符

      如:grep -n 't[ea]st' test  grep -n '[^g]msg' test grep -n '[0-9]' test

      grep '^ID' test 【^ $ 表示行首和行尾,不是字符串打头与结尾】,grep -n ^[^a-zA-Z] test 表示不以字母开头的字符,grep -v ^$ test 表示去掉空白行,

      * 的用法:如grep -n g.*g 表示以g开头,以g结尾,中间跟任意个字符【*表示前面的项有0到多个】

      {} 的用法:grep -n go{2,5} ,限定o出现2到5次【为跳脱字符】

    sed:管线命令

      如:nl /etc/passwd | sed 2,5d 表示显示passwd内容且删掉不显示的2到5行,【a 新增,c 取代,d 删除,i 插入(可以直接修改源文件),p 打印,s 取代,$表示最后一行,】,nl /etc/passwd | sed -n 5,7p 表示捕捉数据中的第5到7行,sed s/取代的字符/新字符/g 表示搜索并取代

    正则表达式延伸:

      + 重复前一项 [1,]

      ? 前一项0或者1个

      | 或关系

        {} 群组字符串

    文件格式化处理:

    格式化打印:printf

      如 printf '%s %s %s %s %s %s ' test.txt %s表示不定长的字符串, 表示tab键,  表示换行

    数据处理工具:awk

      如 last -n 5 | awk {print $1 " " $3} 表示取last登录信息中的第一栏和第三栏打印出来【cut 只能分割单个字符,提供正则支持,print正常输出,printf带格式输出,print不是命令,$1是awk制定的第一栏】

      awk支持运算符号,如 cat /etc/passwd | awk FS=":" $3<10 (print $1 " " $3)  【FS是awk的內建变量,表示分隔符】

    文件对比工具:diff,cmp,patch

      diff [-bBi] file1 file2 ,-b 忽略行中的空格个数【name file 与name    file 一样】,-B 忽略空白行,-i 忽略大小写【用于版本分析】

      还可以对比目录差异

      cmp以字节为对比单位,-l 列出所有的不同点,默认只列出第一个不同点

      patch 升级文件,先用diff -Naur  file1 file2 > test.patch 制作补丁文件,patch -pN < test.patch 更新, patch -R -pN < test.patch 还原 【-pN中的N表示要取消的目录层数,如果补丁文件与旧文件在同一目录,则-p0】

    文件打印:pr

    模拟题:使用grep搜索特殊字符*,在目录etc/下

      grep * /etc/*   能查出etc目录下文件中带*的文件名

      grep * $(find /etc -type f) 能查出etc目录下的所有子目录下的文件中带* 的文件,不列出内容的话,grep -l

      find /etc -type f | xargs -n 10 grep *  数据量很大时,用xargs 将输入过滤成每10个送给grep处理。

      

        

      

      

        

      

      

      

         

      

  • 相关阅读:
    移动语义
    unordered_map/unordered_set & unordered_multimap/unordered_multiset非关联容器
    C++构造函数和析构函数,以及构造函数特殊成员变量和函数的初始化
    Valgrind,内存调试工具
    堆排序,图解,C/C++实现
    哈希表概念和实现,C/C++实现
    AVL平衡二叉树实现,图解分析,C++描述,完整可执行代码
    二叉排序树,Binary_Sort_Tree,C++完整实现
    [Codeforces Round #656 (Div. 3)] (E. Directing Edges)拓扑排序
    最短路 2 [HDU
  • 原文地址:https://www.cnblogs.com/x-jingxin/p/6958361.html
Copyright © 2011-2022 走看看