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文件数量 # 上面两个命令都可以
posted @ 2019-12-28 11:58  自信的咸鱼  阅读(720)  评论(0编辑  收藏  举报