鸟哥的Linux私房菜 命令笔记2

    xiaoxiao2022-07-14  162

    which:寻找执行档 which [-a] command -a:all将所有从$PATH目录中可以找到的指令均列出来,而不止第一个被找到的指令名称

    which ifconfig which which

    whereis:由一些特定的目录中寻找档案的档名 whereis [-bmsu] file

    optionmean-b只找binary格式的档案-m只找在说明档manual路径下的文档-s只找source来源的档案-u(^)搜寻其他特殊档案 whereis ifconfig ##找出ifconfig这个档名 whereis passwd whereis -m passwd ##只找manual里的档案

    find find [PATH] [option] [action] (1)与时间相关的option:

    optionmean-mtime nn是number,n天之前的一天之内修改过内容的档案-mtime +n列出n天之前(不包括n本身)修改过内容的档案-mtime -n列出n天之内的(含n天本身)的修改过内容的档案-newer file列出比file还要新的档案档名 find / -mtime 0 ## 在系统上面24小时内有改动过内容的档案 find /etc -newer /etc/passwd ## 列出/etc底下 日期比/etc/passwd新的 的档案

    (2)与使用者和群组名称有关的option:

    optionmean-uid nn为user的账号ID-gid nn为group的ID-user namename为使用者账号名称-group namename为群组名称-nouser寻找档案的拥有者不存在于/etc/passwd中的档案-nogroup寻找档案的拥有群组不存在于/etc/group的档案 find /home -user dmtsai ##搜寻/home底下属于dmtsai的档案 find / -nouser ## 搜寻系统中不属于任何人的档案

    (3)与档案权限及名称有关的参数:

    optionmean-name filename搜寻档案名称为 filename 的档案-size [±] SIZE搜寻比SIZE还要大(+)或小(-)的档案;c表示byte、k表示kb-type TYPE搜寻档案类型为TYPE的;f正规档案、d目录、l连接档、s socket、bc装置档案-perm mode搜寻档案权限刚好等于mode的档案-perm -mode-perm /mode find / -name passwd ## 找出档名为passwd的档案 find / -name "*passwd*" ## 找出档名包含passwd这个关键词的档案 find /run -type s ##找出/run目录下,档案类型为Socket的档名 find / -perm /7000 ##

    (4)额外可进行的动作:

    optionmean-exec commandcommand为其他指令-print将结果列印到屏幕上(默认动作)

    df:列出档案系统的整体磁盘使用量 df [-ahikmHT] dictname/filename

    optionmean-a列出所有的档案系统-h以人们较容易阅读的size格式显示-i以inode数量显示-T连同该partition的filesystem的名称也列出 df ##将系统内所有filesystem列出来 df -h ##易读容量格式显示 df -aT ##列出所有特殊档案格式及名称 df -h /etc df -ih ##可用inode数量列出

    du:档案系统的磁盘使用量 du [-ahskm] filename/dictname

    optionmean-aall列出所有的档案与目录容量-h以人们易读容量格式显示-s仅列出总量,而不列出每个个别的目录占用容量-kKBytes-mMBytes

    ln:实体连接与符号连接 Hard Link:实体连接,硬式连接 在某个目录下新增一个档名连接到某inode号的关联记录;多个档名对应到一个inode号 压缩命令:gzip gzip [-cdtv#] file

    optionmean-c将压缩的资料输出到屏幕,可透过资料流重导向来处理-d解压缩-t检验压缩档的一致性-v显示原档案/压缩档案的压缩比#数字,代表压缩等级;-1最快、-9最佳 gzip -v services ## 默认将service压缩成service.gz,原文档不存在 zcat services.gz ## zcat读出压缩档内容 gzip -d services.gz ##解压缩 gzip -9 -c services > services.gz ##最佳压缩比压缩,并保留原本档案 zgrep -n 'http' services.gz ##找出http这个关键词在第几行

    压缩命令:bzip2 bzip2 [-cdvkz#] filename bzcat file.bz2

    optionmean-c将压缩过程产生资料输出屏幕-d解压缩-v显示压缩比-k保留原始文档(比gzip优秀)#是数字,压缩等级 bzip2 -v services bzcat services.bz2 bzip2 -d services.bz2

    压缩命令:xz xz [-dtlkc#] filename xzcat filename.xz

    optionmean-l列出压缩档的相关资讯-d解压缩-t检查是否一致-k保留原文档-c将资料输出到屏幕上#压缩等级 xz -v services xz -l services.xz xz -d services.xz xzcat services.xz xz -k services

    tar:打包指令 tar [zjJcvf] filename tar [zjJtv] tar [zjJxvf]

    optionmean-z通过gzip进行压缩/解压缩,档名最好为*.tar.gz-j通过bzip2进行压缩/解压缩,档名最好为*.tar.bz2-J通过xz进行压缩/解压缩,档名最好为*.tar.xz-c建立打包档案-x解压包解压缩-v显示处理档名-f接别处理的档名-t查看打包档案的内容还有哪些档名-p保留原文档的权限与属性 压缩: tar -j cv -f filename.tar.bz2 解压: tar -j xv -f filename.tar.bz2 -C欲解压的目录(解压到指定目录下) 查询: tar -j tv -f filename.tar.bz2

    正确应该是:

    先写生成的文件名,再写要压缩的源文件

    仅解开单一档案的方法:

    (1)先找到我们要的档名,假设解开shadow档名 tar -jtv -f /root/etc.tar.bz2 | grep "shadow" (2) 解开档案 tar -jxv -f打包档 待解开档 tar -jxv -f /root/etc.tar.bz2 etc/shadow

    打包某目录,但不含该目录下某些文档的方法:

    通过--exclude=file 将几个特殊的档案或目录移除在打包之列 tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc/root

    仅备份比某个时刻还要新的档案的方法:

    find /etc -newer /etc/passwd ll /etc/passwd tar -jcv -f /root/etc.newer.than.passwd.tar.bz2 --newer-mtime="2015/06/17" /etc/*

    Vi的使用 vi共有三种模式:一般指令模式、编辑模式、指令列模式

    modedescriptioncommand modevi打开文档直接进入该模式,可以上下左右移动游标、删除子元整列、复制粘贴insert mode按下ioarIOAR进入该模式,Esc退出command-line mode:/?完成搜寻资料取代子元的工作

    vi welcome.txt ## vi 档名进入vi的一般指令模式

    按下i,o,a子元进入编辑模式,按下Exs退出

    存档离开 :wq

    移动光标的方法hjkl、上下左右键游标向左、下、上、右移动一个游标pageup pagedown移动一页+移动到非空白子元的下一列-移动要非空白子元的上一列nn为数字,按下n后再按space,游标向右移动之一列的n个子元0移动到该列的开头$移动到该列的最后面子元处G移动到档案的最后一列nG移动到这个档案的第n列gg移动到这个档案的第一列nn为数字,游标向下移动n列 搜寻与取代/word向游标之下寻找名称为word的字符串?word向游标之上寻找名称为word的字符串n重复前一个搜寻动作N反向前一个搜寻动作:n1,n2s/word1/word2/g在第n1与n2列之间寻找word1这个字串,并将该字串取代为word2:1,$s/word1/word2/g在第一列到最后一列之间寻找word1这个字串,并将该字串取代为word2:1,$s/word1/word2/gc在第一列到最后一列之间寻找word1这个字串,并将该字串取代为word2,且取代前给使用者confirm是否取代 删除、复制与贴上x、X向后(前)删除一个子元nx连续向后删除n个子元dd删除整列ndd删除游标所在向下n列d1G删除游标所在到第一列所有资料dG删除游标到最后一列的所有资料yy复制一列nyy复制游标所在向下的n列p、P将已复制的资料在游标下一列(上一列)贴上u复原[ctrl]+r重做一次.重复前一个动作 command mode 切换到 insert modei、I进入插入模式,从目前游标所在处插入a、A从目前游标所在的下一个子元处插入o、O从目前游标所在的下一列插入新的一列r、Rr只会取代游标所在的那个字一次,R会一直取代直到按下Esc 指令列模式的储存、离开等指令:w写入:w!强制写入:q退出:q!强制退出:wq存储后离开ZZ没有改动不存储离开;有改动存储离开:w filename将编辑资料存储成另一个档案:r filename读入另一个档案的资料:n1,n2 w filename将n1到n2的内容存储到filename:set nu显示行号:set nonu取消行号

    区块选择Visual Block

    区块选择的按键意义v字选择,游标经过的地方反白选择V列选择[Ctrl]+v区块选择,长方形方式选择资料y复制反白地方d删除反白地方p将复制区块粘贴

    多档案编辑 打开多个档案:vim file1 file2…

    多档案编辑的按键:n编辑下一个档案:N编辑上一个档案:files列出目前这个vim的开启所有档案

    多视窗功能 在command mode输入 :sp{filename} filename可有可无;省去新开同一个文档窗口。 『[ctrl]+w+↑』及『[ctrl]+w+↓』 在两个视窗之间移动;[ctrl]+w+ q其实就是:q 结束离开

    命令编辑能力:history 通过按 上下键 就可以找到前/后一个输入的指令。指令记录在.bash_history history [n] history [-c] history [-raw] histfiles

    optionmeann数字,意思是 要列出最近的n笔命令列表-c将所有的history内容全部消除-r将histfiles的内容read到目前shell的history记忆中-a目前新增的history命令append到histfiles中-w将目前的history记忆内容write入histfiles中 ##列出目前记忆体内所有history记忆 history ##列出您目前最近的3笔资料 history 3 ##将目前资料写入histfile中 history -w echo ${HISTSIZE}

    !number !command !!

    optionmeannumber执行第几笔指令command向前搜寻指令串开头为command的指令并执行!!执行上一个指令

    命令别名设置功能:alias alias 别名=‘command’

    alias ll = 'ls -al' unalias ll

    工作控制、前景背景控制:job control、foreground、background 程序化脚本:shell scripts 万用子元:Wildcard

    查询指令是否为Bash shell的内建命令:type type [-tpa] name

    optionmean-ttype会将name以这些字眼显示出他的意义:file外部指令、alias命令别名、builtin内建指令-p当name属于builtin command时才会显示完整档名-a将所有含name的指令都列出来 type ls type -t ls type -a ls type cd

    指令的下达与快速编辑按钮 如果指令串太长的话,如何使用两行来输出? 用 [Enter] 来分成两行,\和[Enter]中间没有其他字元。

    组合键功能[Crtl]+u/[Ctrl]+k从游标处向前/后删除指令串[Ctrl]+a/[Ctrl]+e游标移动到指令串的最前面/最后面

    Shell的变数功能 y=ax+b 等号左边(y)就是变数,等号右边(ax+b)就是变数内容。 变数取用:echo 在bash中,当一个变数名称尚未被设定时,预设的内容是空的。

    echo $variable echo $PATH echo ${PATH} echo ${myname} ## 该变量还未设定,返回空 myname='keiji' #set the variable echo ${myname} #get the variable

    变数的设定规则 (1)变数与变数的内容以一个等号=来连接,等号两边不能直接接空白子元 myname=keiji (2)变数名称只能是英文字母与数字,但是开头字元不能是数字 (3)变数内容中若有空白子元可使用双引号或单引号将变数内容结合起来 双引号内的特殊子元如$,可保持原本的特性 var="lang is $lang" echo $var lang is zh_TW.UTF-8 单引号内的特殊子元被看作纯文字 var='lang is $lang' echo $var lang is $lang (4)可用\将特殊字符转变为一般子元 (5)command 和$(command)运行外部指令

    version=$(unname -r) echo $version 3.10,0-229.e17.x86_64

    (6)可有 $ variable或 $ {variable}来扩增变数内容 PATH=$PATH:/home/bin (7)用export来使变数变成环境变数 export PATH (8)取消变数:unset unset myname

    环境变数的功能 查询环境变数的指令:env export

    titlecontentHOME使用者的家目录:cd~SHELL目前环境使用的SHELLHISTSIZE记录历史指令的笔数MAIL使用者mailbox位置PATH执行档搜寻的路径,目录之间用冒号隔开LANG语系RANDOM随机乱数

    用set观察所有变数

    titlecontentPS1提示子元的设定$关于本shell的PID,echo$$?上一个执行的指令回传的数,echo$?返回0代表执行成功

    export:自订变数转成环境变数 两者差异在于:该变数是否被子程序所继续引用。 子程序只会继承父程序的环境变量,不会继承其自订变量。

    export 变数名称 export #export后面不接变数,会把所有环境变数显示出来

    变数键盘读取、阵列与宣告:read,array,declare read:读取来自键盘输入的变量(相当于python的input) read [-ptn] variable

    optonmean-p后面可以接提示子元-t接等待描述-n限定键入的字数 read atest #使用者用键盘输入以内容,内容变成名为atest的变数 echo $atest read -p "please keyin your name:" -t 30 named #提示使用者30秒内输入自己的大名,并将输入字串作为named的变数内容 echo $named

    declare:宣告变数类型 declare [-aixr] variable

    optionname-aarray,将变数定义为阵列类型-iinteger,将变数定义为整数类型-xexport,将变数定义为环境变数-rreadonly,将变数定义为readonly类型,不可更改也不可unset sum=100+300+50 echo ${sum} #返回100+300+50 默认变量为str类型 declare -i sum=100+300+50 echo ${sum} #返回450 将sum变成环境变数 declare -x sum export | grep sum declare +x sum 将-变成+可以进行取消的动作 让sum变为readonly declare -r sum sum=testing

    阵列array变数类型 设定:var[index]=content 调用:${var[index]}

    与档案系统及程序的限制关系:ulimit 变数内容的删除、取代与替换

    path=${PATH} echo ${path} 将local/bin删除 echo ${path#/*local/bin:}

    ${variable # /*local/bin:} variable:原本的变数名称 #:从变数内容从最前面向右删除,且仅删除最短的那个 %:从后面向前删除变量内容 / *local/bin: 代表有删除的部分,*用来取代无穷多个任意字符

    最新回复(0)