Linux命令指南(一)常用命令【上】
Linux下的常用命令分为几类:
1、文件及目录操作
2、文件查看及编辑
3、文件查找及统计
4、文件解压与压缩
5、用户与文件权限
6、资源监控与管理
ps:Linux中一切皆是文件,cpu、内存、磁盘、外设、驱动等等,都是以文件形式存在我们的Linux系统中。
Linux中常用的快捷键
Enter 执行命令。输入命令后记得回车,命令才生效。
Tab 自动补全。在写文件夹路径的时候,打出首字母直接将后续名称补全,遇到首字母相同的文件夹会展示出列表
↑ 使用方向键的up键,可以找回上个执行的命令,并且可以一直向上查找历史命令,想查看所有历史命令使用 history命令
ctrl + c 中断命令。在linux上执行命令遇到卡死、报错等执行不下去又无法退出的情况,请使用此命令。
ctrl + z 中断命令。一般ctrl + c 无法进行中断操作的时候可以尝试下此命令。
ctrl + insert 复制。复制选中内容。
shift + insert 粘贴。粘贴剪切板中内容。
ctrl + Backspace 向前删除。
在输入命令时,有时退格键Backspace无法删除字符,它本身被当做一个字符输入了,使用此命令进行退格删除操作
delete 向后删除。
另外在查看滚动文件时有两个好用的命令,一般在查看日志文件时使用:
ctrl + s 停止滚屏
ctrl + q 恢复滚屏
帮助命令:
man 全方位的帮助命令,使用方式为 man [命令],如
man ls
使用 :q 命令退出帮助界面
历史命令查看:
history # 查看已经敲过的命令
#对于history命令来说,历史命令会被保存到目录中的.bash_history 文件中。可以使用命令:cat ~/.bash_history查看 ,默认是保存1000条
history -c #清除history记录
一 文件及目录操作
ps:
# 小技巧:使用“;”分号可以一次性执行多个命令
# 注意:查看和创建带有空格的文件时,使用引号括起来
1.1 关于路径和切换:cd、ls、ll、pwd
以下是命令简释:
cd / # 进入主机根目录 cd ~ # 进入用户根目录 cd .. # 返回父级(上级)目录 cd ../.. # 返回爷爷(上级的上级)目录,可以以此类推。 cd - # 返回上次目录 cd /yaomaomao/tao/123/456 # 使用绝对路径,从根目录开始,一层层找到456这个目录。/ 为根目录 ls # 横向展示当前目录下所有文件及目录
ls -l(等同于ll,一般直接用ll) # 纵向展示当前目录下所有文件及目录,及权限信息 ll -a # 显示隐藏文件 + ll命令展示的内容 ll -h # 将文件大小从单位bit转换为合适的单位展现,如kb、Mb、Gb,根据实际大小来。 # -h 这个参数在linux中很有用,基本所有需要统计大小的命令中都可以用它,如df -h, du -h,free -h。 pwd # 查看当前所在路径
1.2 文件创建 :touch、mkdir
创建文件
touch tao.txt # 在当前目录下创建一个tao.txt空文件 touch /var/www/mydream{01..10}.html # 批量创建空文件
创建目录
mkdir [目录名] # 在当前目录下创建一个空目录 mkdir taotao tt 123 456 # 多个目录同时创建,目录间以空格隔开,创建同级的多个目录 # 如果想要创建一个多级子目录怎么办,那就使用下面的mkdir -p。 mkdir -p /taotao/tao/123/456 # 多层目录同时创建,一次性在当前目录下创建taotao目录,在taotao目录下创建wfy目录,在tao目录下创建123目录,在123目录下创建456目录。
1.3 复制、移动和删除:cp、mv、rm
cp [待拷贝文件名] [拷贝后文件名] # 将前者拷贝一份出来,变为后者。 cp [待拷贝目录] [目标目录] # 将前者拷贝一份出来,变为后者。文件如此,目录也是如此。 # 但是有时候目录下还有子目录,这个命令就不好用了,得用下面这个命令,cp -r/R。 cp -r [待拷贝目录] [目标目录] # -r/R 是什么意思?即递归。无限寻找当前目录下所有子目录。倾其所有,拷贝到目标路径下。 mv [待拷贝文件名] [拷贝后文件名] # 将前者的文件名改为后者的文件名 mv [待移动目录] [目标目录] # 将前者的文件名改为后者的文件名
rm [文件名] # 删除文件。文件不存在会有报错提示。 rm -f [文件名] # 删除文件。-f,忽略信息,不提示。 rm -rf [目录名] # 递归删除目录 rm -rf [文件1] [文件2] [目录1] [目录2] # 删除多个文件和目录 rm -rf *.log # 删除当前目录所有.log后缀结尾的文件 rm -i *.log # 删除所有log文件时会一一询问,这个命令一般不会用到,但有些情况下可能会需要。 # 询问时,按 y 确认删除,n 不删除。
二 文件查看与编辑
cat [文件名] # 输出文件所有内容到屏幕上 cat [文件1] [文件2] # 输出文件1、文件2所有内容到屏幕上 cat [文件1] [文件2] > [文件3] # 将文件1、文件2合并,输出到文件3中,如果没有文件3会自动生成一个新的文件3 cat -n [文件名] # 输出文件内容时加上行号 cat -A [文件名] # 输出文件内容时显示所有隐藏字符
2.1 tail 一般用来查看日志使用,显示文件最新追加的内容
tail 一般用来查看日志使用,显示文件最新追加的内容
tail -f a.log # 不停地追加显示log文件的最后10行 tail -fn 1000 a.log # 加上-n参数,不停地追加显示log文件的最后1000行
tail 一般用来查看日志使用,显示文件最新追加的内容
tail -fn 1000 a.log b.log
如果显示文件不止一个,则在显示的每个文件前面加一个文件名标题
![tail -fn 1000 xxx.log xxx2.log](D:\Linux\2\tail -fn 1000 xxx.log xxx2.txt log.png)
与tail 相对的还有个head,是从开头显示文件内容,一般用法为 head -n [文件名],用法与tail差不多。
2.2 文件编辑 vi/vim
vim有几种模式,即normal模式、编辑模式、命令模式。(vim是vi的增强版)
vim [文件名]
# 默认进入normal模式
normal模式下按下i、a、o、s,进入编辑模式
i
# insert,光标当前字符前插入
a
# append, 光标当前字符后插入
o
# 下一行插入
s
# 不常用,删除当前字符并插入
光标移动
← # 向左移动 ↓ # 向下移动 ↑ # 向上移动 → # 向右移动 ctrl + f # 向下翻页 ctrl + b # 向上翻页 0 # 行首 $ # 行尾 space # 空格键,一直向下移动一个字符。跟左方向键(→)的区别是,左方向键(→)只能在本行移动。
也可以:可以在normal模式下,使用h、j、k、l键依次进行左、下、上、右操作。
退出、保存
:q # 退出不保存 :q! # 强制退出不保存 :wq # 退出保存 :wq! # 强制退出保存
:w
#将编辑的数据写入硬盘文件中(常用)
:w!
#文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件的文件权限有关!
:w [filename]
#将编辑的数据储存成另一个文件(类似另存为新文件)
:r [filename]
#在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到游标所在行后面
:n1,n2 w [filename]
#将 n1 到 n2 的内容储存成 filename 这个文件
normal模式下的一些快捷键
G # 大写g,移动到文末。 nG # n,数字,代表行号。100G则是移动到第100行。1G则是行首。 gg # 移动到文首。同样效果还有1G。 H、M、L # 分别代表high、middle、low,即移动当前屏幕页的最上方、中间、最下方。 dd # 删除当前行,可连续按d删除。 ndd # n,数字,代表行号。ndd,删除当前行及之后的多少行,如100dd,删除当前及之后的100行 u # 撤销操作。如果上面使用dd删除错了,可按一下u进行撤销。编辑模式下撤销需要按Esc进入normal模式,按 u 撤销。 y 进入复制模式。 yy # 复制当前行。 nyy # n,数字,代表行号。聪明的你相比已经知道了,如16yy,即复制当前行至16行的内容。 p # 粘贴当前vim剪切板中内容。 yyp # 常用组合键,即在上面使用yy复制后,可立即使用p粘贴,或者移动到指定地点后按个 p,即把刚才的内容粘贴过来了。 ggyG # 全选复制。看这个命令,到行首,按y进入复制模式,再移动光标到文末,然后可以按p粘贴了。当然,如果你的光标已经移动到相应位置,可以直接ggyGp。 # 这里有个缺陷,这样的复制内容只能在vim中进行粘贴,一旦退出vim,剪切板中则无此内容了。那怎么办呢? 看下面这个命令。 gg"*yG、gg"+yG # 这两个全选复制的命令,可以将内容带出到vim之外。当然,一般用不到,只有某些特殊情况下会用到。
normal模式下输入 / 或 ?
/tao # 即向下寻找tao这个字符串。按n会一直向下找。 ?涛 # 即向上寻找 涛 这个字符串。按n会一直向上找。 n、N # 配合/、?则会很有趣,/ + n,一直向下找,/ + N,一直向上找, ? + n,一直向上找, ? + N,一直向下找。
normal模式下替换
# 全局替换,将old字符替换成new
:%s/old/new/g
#如果不想全局替换,而是指定行数,可以使用此命令:
:[n1],[n2]s/old/new/g
#从第N行到最后一行的
:[n1],%s/old/new/g
注释:
添加注释。
使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)
取消注释:
使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)
:10,20s#^#//#g #在 10 - 20 行添加 // 注释 :10,20s#^//##g #在 10 - 20 行删除 // 注释 :10,20s/^/#/g #在 10 - 20 行添加 # 注释 :10,20s/#//g #在 10 - 20 行删除 # 注释
总结下几种模式的切换:
2.3 more、less
这两个命令类似cat,不过是以一页一页的方式显示阅读。
more可以显示百分比,一般从头排查问题日志可以用more。
而less则在查看大文件时有奇效,据说是部分加载到内存中。
more
more [文件名] more -f [文件名] # 加参数f,-f 参数的含义为计算行数时,以实际上行数为准(有些单行字数太长的会被认为两行或以上)
使用more查看文件或日志的快捷命令
空格键 # 向下滚动一屏,f键效果一样,但一般使用空格键,比较方便 b # 向上滚动一屏 = # 查看当前行号 :f # 输出当前文件名 及 行号 q # 退出more命令, ctrl + c也可以退出
指定行查看
more +[num] [文件名] # 查看指定行号以后的内容 more -[num] [文件名] # 查看指定行号以前的内容,这个命令一般不用,主要用+num。这个命令如果用的话一般会作为导出使用。
less
less的好处是查看文件之前不会加载整个文件,所以在查看大文件时有奇效。如果文件特别大,例如超过1G,可以使用less,提高效率。
less [文件名] # 基本查看命令 less -m [文件名] # 类似more命令,显示百分比 less -N [文件名] # 显示行号
与more 命令相似,less也有相同的快捷键,只是不能用ctrl + c退出
q # 退出less命令 d # 向下移动半屏 u # 向上移动半屏 j # 向下移动一行 k # 向上移动一行 空格键 # 向下滚动一屏,f键效果一样,但一般使用空格键,比较方便 b # 向上滚动一屏 = # 输出当前文件名 及 行号、百分比 : f # 输出当前文件名 及 行号、百分比
并且less不只是more可以查看,还可以用使用vi编辑器的查找命令
/[查找字符] # 配合n键,从上往下查所有 ?[查找字符] # 配合n键,从下往下查所有
2.4 不打开文件也能编辑:sed 增删改查
sed [参数选项] [sed内置命令字符 更新内容] [输入文件]
增
sed -i '$a 你好吗' a.txt #在件末尾追加 sed -i 'li 你好吗' a.txt #在文件第一行,前一行插入字符 sed -i '20a 你好吗' a.txt #在指定行,下面一行追加 sed -i '20i 你好吗' a.txt #在指定行,上面一行追加 sed -i 'a 你好吗' a.txt #在每一行下一行追加 sed -i 'i 你好吗' a.txt #在每一行上一行追加
改:内置命令字符s
sed 's/tao/taotao/' file # 替换文本中的字符串 sed -n 's/taotao/tao/p' file # -n选项和p命令一起使用表示只打印那些发生替换的行 sed -i 's/taotao/tao/g' file # 直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books
删:内置命令字符d
sed -i '2d' file
# 删除第2行
sed -i '1,3d' a.txt # 删除1到3行 sed -i '/\/sbin\/nologin/d' passwd # 删除不能登录的用户 sed -i '/^taotao/,/$2111/d' passwd # 删除以 “taotao” 开头一直到以 2111结尾的行
总结:
无参数,只显示修改后内容在终端,不修改真实文件内容,一般可与管道符“|”一同使用作为输入源。
参数 -i,必须品,加上此参数才能真正修改文件。
参数 -n,一般与内置命令字符p共用,显示修改行。
内置命令字符 i、a,插入、追加。
内置命令字符 s、d,替换、删除。
$代表文件末尾,^代表文件开头。
三 文件查找与统计
3.1 du常用命令
du -sh # 统计当前文件夹内容总大小 du -sh [文件夹1] [文件1] # 统计当前目录下的文件夹或文件大小 du -sh /usr/local # 显示指定目录大小 du -a # 显示当前目录下所有文件所占空间(含隐藏文件) du -s # 显示当前目录总大小 du -h # 展示当前目录下所有文件及目录(包含子目录下内容)大小,-h会换算成K、M、G等人类易读结果 du -h * # 统计当前目录下,非隐藏文件及目录的大小 du -h --max-depth=1 [目录] # 只显示指定目录下第一层目录的大小 du -h --max-depth=2 [目录] # 只显示指定目录第一、二层目录的大小
du 常用参数总结:
-a或-all 显示目录中个别文件的大小。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 -k或--kilobytes 以KB(1024bytes)为单位输出。 -m或--megabytes 以MB为单位输出。 -s或--summarize 仅显示总计,只列出最后加总的值。 -h或--human-readable 以K,M,G为单位,提高信息的可读性。
此外,还有些参数用以参考,一般用于区分软硬链接才适用:
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 -L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。 -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。 -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。 --exclude=<目录或文件> 略过指定的目录或文件。 -D或--dereference-args 显示指定符号链接的源文件大小。 -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。 -l或--count-links 重复计算硬件链接的文件。
3.2 文件排序: du + sort + head 常用命令
du -a /nginx/www | sort -n -r
# 按照文件大小倒序排序(含隐藏文件)
du -h /nginx/www | sort -n -r | head -n 10 # 非隐藏文件,筛选前10,可读方式展现文件大小; # sort -n -r 也可以写作 sort -rn; # -n:依照数值的大小排序; # -r:以相反的顺序来排序;
du -h --max-depth=1 /nginx/www | sort -n -r | head -n 10 # 指定目录第一层,筛选前10,可读方式展现文件大小
sort参数总结:
# sort基本参数如下 -n:依照数值的大小排序; -r:以相反的顺序来排序; -o<输出文件>:将排序后的结果存入制定的文件; -b:忽略每行前面开始出的空格字符; -c:检查文件是否已经按照顺序排序; -f:排序时,将小写字母视为大写字母; -m:将几个排序号的文件进行合并; # 以下几个参数与 -n 排序方式互斥 -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符; -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符; -M:将前面3个字母依照月份的缩写进行排序;
3.3 查找文件 find:
3.3.1 find常用查找命令
find / -name 'a.txt' # 从根目录下开始查找文件wfy.txt find . -name '*.txt' # 当前目录下,查找.txt后缀的文件 # “.”表示当前目录,"*"表示任意长度字符 find / -type f -size +500M # 从根目录开始查找,500M以上文件 # / :根目录 # . : 当前目录 # -type f: f为普通文件类型,f改为d则是目录文件,l则是符号链接文件,-type 还有其他参数,不在这里一一列举 # -size +500M :500MB以上 # 一般磁盘空间不够,删除垃圾文件时会使用到此命令 find . -type f -size +1k # 查找当前文件夹下超过1k的文件,注意k是小写。 find . -type f -mtime -30 # 查找当前目录下30天之内修改过的文件 # -mtime:代表修改时间,最常用,类似参数有-atime、-ctime # -atime:代表访问时间,查看过就算 # -ctime:文件状态改变时间 # -30:代表30天以内,30为n,数字自己填写 # +30:30天以前 # 30:距今第30天 find /var/log/ -mtime +30 -name '*.log' # 查找指定目录/var/log/ 下30天以前的log文件 find /etc ! -type f # 查找 /etc 目录下不是普通文件的 文件 # "!":感叹号,取反 find /etc ! -type l -mtime -30 # 查找/etc 目录下不是符号链接文件,并在30天内被修改过的文件 find /etc -maxdepth 1 ! -type l -mtime -30 # 查找/etc 第一层目录下不是符号链接文件的文件,并在30天内被修改过 # -maxdepth : 前面du学过,指定目录层级,-maxdepth 1代表第1层,-maxdepth 2代表延伸到第二层
3.3.2 使用find组合命令:统计与删除
先用wc -l来统计下log数量
find / -name '*.log' -mtime +300 | wc -l # 从根目录下开始搜索300天之前的log文件,并统计数量 # “|”:管道符,将前面查到的数据作为输入源给后面的命令
第一种删除:
find / -name '*.log' -mtime +300 -exec rm {} \; # 查找30天以前的log文件,使用-exec加rm将其删除 # 再使用上面的命令重新查看一次
find / -name '*.log' -mtime +300 | wc -l
第二种删除:
find / -name '*.log' -mtime +200 -ok rm {} \; # -ok : 询问删除,y删除,n不删除,回车默认不删除
第三种删除方式:xargs
依次执行查看结果:
find / -name '*.log' -mtime +100 | wc -l find / -name '*.log' -mtime +100 | xargs rm -f # xargs : 命令传递参数过滤器,与管道符“|”一同使用,将前面的命令传递给后面的命令使用 find / -name '*.log' -mtime +100 | wc -l
3.3.3 find与xargs的组合使用
对于50天前的log文件进行详情查看
find / -name '*.log' -mtime +50 | xargs ls -l # 利用xargs + ls -l 命令来进行文件的详细属性查看
移除50天前的文件
mkdir /logback # 创建根目录下的 /logback文件夹 find / -name '*.log' -mtime +50 | xargs -i mv {} /logback # 将50天前的所有log文件移动到 /logback 文件夹下 # xargs -i + {},将前面查找到的文件都作为参数给mv命令执行 ls -l /logback # 查看 /logback 下所有文件详情
3.3.4 find下xargs与exec的区别
区别一: -exec,是将查找到的结果文件名逐个传递给后面的命令执行,文件多会导致效率低; xargs,则是一次性传递,效率较高,并可使用-n参数控制传递文件个数。 区别二: -exec,文件名有空格等特殊字符也照常处理; xargs,处理特殊的文件名(例如文件名有空格)需要采用特殊的处理方式(find . -name "*edu" -pringt0| xargs -0 ls -l)
区别验证一
find /logback -name '*.log' -exec echo taotao {} \; find /logback -name '*.log' | xargs echo taotao
#-exec每次获得一个文件输出一次,xargs则只输出了一行。
xargs还可以用-n参数控制每次输出的文件个数,不足的行输出剩下的。
find /logback -name '*.log' | xargs -n5 echo yaomaomao
3.4 字符查找grep
grep -n '涛' a.txt # 查找wfy.txt文件中含有“不用”的字符行 # -n 显示行号 # -i 不区分大小写 # -v 反向过滤 # -c 统计匹配行
grep同时查找多个文件
grep -n '涛' a.txt b.txt # 查询多个文件中包含“不用”字符的文件内容,并显示行号 # 直接在末尾跟上多个参数
grep递归查找
grep -rn '涛' *
#注意:这里必须要使用-r,否则将查询不到
grep查找对应字符前后n行
grep -A10 '涛涛' a.txt # 查看“涛涛”字符行后10行数据 # -A : after
grep -B5 '涛涛' a.txt # 查看“5你”字符行前5行 # -B:before
grep -A1 -B1 '7你' a.txt # 查看"涛涛"字符前后各1行数据
grep组合命令
history|grep rm
# 查找历史命令中执行了哪些删除命令
rpm -qa |grep yum # 查询linux下是否有安装过此rpm包 ps -ef|grep java # 此命令为一般运维中最常用命令,查询linux进程中是否运行了此程序 pgrep -java # 查找java进程,与上面查找功能相同,但是只显示进程号 pgrep -l java # 查找java进程,与上面查找功能相同,但是显示进程号及进程名 kill –9 'pgrep java' # 批量关闭java进程 # pgrep:查找正在运行的程序;pgrep是grep的扩展功能,同样的还有egrep、fgrep,用的不多了解下就行 # egrep:扩展正则表达式 # fgrep:不识别正则表达式 ps -ef |grep $ORACLE_SID|grep -v grep|awk '{print $2}' | xargs kill -9 # 得到所有oracle进程并关闭
3.5 wc
wc -l /etc/inittab # 统计文件内容行数 # -l :统计行数 # -w :统计单词数 # -m :统计字符数 # -c : 统计字节数 # -L : 打印最长行的长度 # 全部执行下看看 wc -l /etc/inittab;wc -c /etc/inittab; wc -m /etc/inittab;wc -w /etc/inittab; wc -L /etc/inittab wc /etc/inittab # 不加参数则默认输出行数、单词数、字节数 # 等同参数为-lwc # 字节数跟字符数怎么一样的?因为都是英文,我们加个中文字进去看看 sed -i '1a #好' /etc/inittab wc -lcmwL /etc/inittab # 注意:输出内容并不是按照我们敲出的命令行中参数来排序的,它有其固定顺序--> lwmcL # 按照lwmcl的顺序排列后,可以看到字节数比字符数多了两位,因为一个#符号1字节,一个英文字符代表2字节,一个中文字符4字节,我们添加了#中,所以是添加了5字节,但是只增加了2字符。
wc最常用命令一般为组合命令
ls | wc -l # 统计当前文件夹下有多少文件 ls *.txt | wc -l
#统计当前文件夹下以.txt结尾的有多少文件 find . -maxdepth 1 -name '*.txt' | wc -l # 统计当前文件夹、第一层目录下所有的txt文件数量 # 上面两个命令都可以