掌握Linux神技能:Linux必备核心必会经典命令及其实战应用全解析

目录

1  修仙之路-筑基期

2 命令详解

2.1 cd 与pwd

2.2 mkdir 创建目录

2.3 touch创建文件

2.4 ls查看目录内容

2.5 mv move移动

2.6 cp copy复制文件或目录

2.7 rm remove移除,删除文件或目录

2.8 echo输出信息到屏幕

2.9 cat显示文件内容

3 目录结构命令详解

3.1 linux 环境初步优化

3.2 vi-vim编辑器详解

1)vi-vim区别-了解

2) vi/vim基本使用

a)打开文件(不存在也OK)

b)进入编辑模式

c)退出编辑模式

d)保存与退出

e)检查

3)vim的模式转换

4)vim快捷键🩸🩸🩸🩸🩸

5) 故障案例

3.3 日志查询4剑客

3.3.1 概述

3.3.2 日志查询命令使用

1)head显示文件的头几行,默认显示头10行.

2)tail显示文件的后几行,默认是后10行.

3)less按页显示文件内容

3.4 wc统计

3.5 查询命令位置

3.5.1 which

3.5.2 whereis

3.6 文件比较命令

3.6.1 diff

3.6.2 vimdiff

3.7 排序去重组合

3.7.1 sort-排序

3.7.2 uniq

3.8 日期组合

3.8.1 date

3.8.2 ntpdate同步时间的命令

3.8.3 修改时区-熟悉

3.8.4 实践应用

4.打包压缩三剑客

4.1 概述

4.2 tar

1)创建

2)查看压缩包内容

3)解压

4)解压到指定目录

5)tar:从成员名单中删除开头的"/"

4.3 gzip

4.4 zip/unzip

5. grep

5.1 概述与选项

5.2 案例与应用

6.find

6.1 概述与选项

6.2 案例

6.3 find命令与其他命令配合

1)案例08—find找出/gq/find/ 以.txt结尾的文件显示详细信息❣️❣️❣️

2)案例09-find与打包压缩

3)案例10-find与复制或移动


1  修仙之路-筑基期

  1. 有一天工作突然穿越了,修仙大陆,开始锻体
    1. 四处走走,看看四周什么情况, ==cd(进入某个目录)==
    2. 查看周围的环境, ==ls(列表显示目录内容)==
    3. 突然发现手中有手机,打开手机定位查看所在位置,==pwd(显示自己所在目录)==
    4. 自己搭建房子,==mkdir(创建目录),查看房子ls(查看目录)==
    5. 置办家具,==touch(创建文件)==,随着创建,发现修为提升了
    6. 外出的时候发现有好东西💴,ls看了下,决定搬回去==mv(移动)==
    7. 外出打猎的时候发现一座别人建的城堡,非常壮丽,于是决定自己模仿建造一个房子🏠==cp(复制,拷贝)==
    8. 一天找到一个峡谷大喊,我要buffer,==echo(输出信息)==,回家后自己开始写日记 ==vi(编辑与修改文件)==
    9. 修为提升的不错,想试试看,放个大,试试威力,结果家没了 ==rm(删除)== ,突然发现是梦醒了

2 命令详解

2.1 cd 与pwd

命令

说明

cd

change directory进入到某个目录

pwd

print working directory现在当前所在位置(绝对路径)

#案例01:进入/tmp/目录然后查看所在目录 
进入目录 : cd 
查看所在目录: pwd 
[root@rgq ~]# cd /tmp/ 
[root@rgq tmp]# pwd /tmp 
[root@rgq tmp]# 

#案例02: 进入/etc/sysconfig/network-scripts/目录然后查看所在目录 
[root@rgq tmp]#cd/etc/sysconfig/network-scripts/ 
[root@rgq network-scripts]# pwd /etc/sysconfig/network-scripts

温馨提示:操作命令和目录的时候可以使用tab键,tab键用于自动补全命令或目录

cd其他功能

说明

cd ~

回到家目录

cd

回到家目录

cd ..

进入上级目录

cd -

返回会=上次所在目录,cd --是cd 的选项

cd .

进入当前目录(未来一般与复制,移动一起用)

#案例03: 假如我们当前在一个比较深的目录中,快速回到家目录. 
cd /etc/sysconfig/network-scripts/ 
cd ~ 


操作记录: 
[root@rgq network-scripts]# pwd 
/etc/sysconfig/network-scripts 
[root@rgq network-scripts]# cd ~
[root@rgq ~]# pwd 
/root

#案例04 假设我们在一个比较深的目录中,进入上一层目录 
cd /etc/sysconfig/network-scripts/ 
cd ..

温馨提示:如果想向上多层可以用cd ../../形式

[root@rgq ~]# cd /etc/sysconfig/network-scripts/ 
[root@orgq network-scripts]# pwd 
/etc/sysconfig/network-scripts 
[root@-rgq network-scripts]# cd ../.. 
[root@rgq etc]# pwd 
/etc

2.2 mkdir 创建目录

  • mk make dir directory

mkdir创建目录

说明

选项 -p

创建多层目录

#案例06 创建/rgq目录 
mkdir /rgq 
cd /rgq/ 
pwd 

#案例07 创建多层目录 /rgq/a/b/c/d/e/f 
[root@rgq-rgq rgq]# mkdir -pv /rgq/a/b/c/d/e/f 
mkdir: 已创建目录 "/rgq/a" 
mkdir: 已创建目录 "/rgq/a/b" 
mkdir: 已创建目录 "/rgq/a/b/c" 
mkdir: 已创建目录 "/rgq/a/b/c/d" 
mkdir: 已创建目录 "/rgq/a/b/c/d/e" 
mkdir: 已创建目录 "/rgq/a/b/c/d/e/f" 
[root@rgq-rgq rgq]# cd /rgq/a/b/c/d/e/f/ 
[root@rgq-rgq f]# pwd 
/rgq/a/b/c/d/e/f

2.3 touch创建文件

#案例08 在/Gq/目录下创建Gq.txt 创
建/Gq/Gq.txt
创建目录-已经完成
创建文件-进行中

[root@Gq-rgq ~]# cd /Gq/
[root@Gq-rgq Gq]# touch Gq.txt oldgril.txt
[root@Gq-rgq Gq]# ls
a  Gq.txt  oldgril.txt

#案例09 在/Gq下面创建lidao.txt oldgirl.txt 2个文件
绝对路径写法
touch /Gq/Gq.txt  /Gq/oldgirl.txt
相对路径写法
先进入,然后操作.
cd /Gq
touch Gq.txt oldgirl.txt

2.4 ls查看目录内容

  • ls list列表

ls命令选项

-l

long以长格式显示(显示详细信息,比如文件时间,大小,所有者)

-t

time按照修改时间排序

-r

逆序排序,一般-rt一起使用

-h

以人类可读形式显示大小

#案例10 核心 查看 /etc目录下面的内容并且显示详细信息
ls /etc
ls -l /etc/
简写为ll /etc/


#案例11 查看/etc目录按照时间排序逆序排序(一个目录中文件太多了,找出
最近的文件)
ls -lrt /etc/
ll -rt /etc/


#案例12 核心 以人类可读形式显示大小
ls -lh

温馨提示:计算机中的单位:字节byte 1个英文字符1字节

1KB=1024bytes 
1MB=1024KB=1024^2bytes 
1GB=1024MB=1024^3bytes 
1TB=1024GB=1024^4bytes 
1PB=1024TB=1024^5bytes 
1EB 
1ZB

2.5 mv move移动

mv

从哪里来

移动

mv

目标(目录)

改名

mv

文件或目录

#案例13 移动/Gq/Gq.txt 到/tmp下面
[root@Gq-rgq etc]# mv /Gq/Gq.txt /tmp/

[root@Gq-rgq etc]# ls -l /tmp/
总用量 4
-rwx------. 1 root root 836 7月  14 00:55 ks-script-As0oss
-rw-r--r--. 1 root root   0 7月  15 11:41 Gq.txt
drwx------. 3 root root  17 7月  15 08:01 systemd-private-186ea7b307ba4d4b8d90373ee0ad543d-chronyd.service-iSZI53
drwx------. 3 root root  17 7月  14 00:56 systemd-private-2dbd0677e10d45988c848eb92b77cb25-chronyd.service-H8nipK
drwx------. 3 root root  17 7月  14 14:45 systemd-private-46afbb18230640c68fc8357d0ebcf4db-chronyd.service-PYZOEU
drwx------. 3 root root  17 7月  14 08:26 systemd-private-679797a9e0134edd991e2f5b30c5798c-chronyd.service-o3DN9R
drwx------. 3 root root  17 7月  13 18:53 systemd-private-c152a49520a24079a7a7fd94a0c21aec-chronyd.service-XT52ZG
drwx------. 2 root root   6 7月  14 00:56 vmware-root_1007-4282171056
drwx------. 2 root root   6 7月  14 14:45 vmware-root_939-4022308693
drwx------. 2 root root   6 7月  14 14:13 vmware-root_943-4013723344
drwx------. 2 root root   6 7月  13 18:53 vmware-root_949-4021784396
drwx------. 2 root root   6 7月  14 08:26 vmware-root_950-2697008400
-rw-------. 1 root root   0 7月  14 00:50 yum.log

#案例14 改名 把/Gq/gril.txt改名为gril996.txt 
[root@Gq-rgq ~]# mv /Gq/gril.txt /Gq/gril996.txt
[root@Gq-rgq ~]# ls -l /Gq/
总用量 0
drwxr-xr-x. 3 root root 15 7月  15 11:14 a
-rw-r--r--. 1 root root  0 7月  15 11:41 gril996.txt

关于命令操作多个文件或目录的说明(熟悉)

touch a b c d e f

mkdir dira dirb dirc

mv file .....dir

2.6 cp copy复制文件或目录

cp命令选项

说明

-a

all 简单理解为复制所有

详情:-dpr

-r

递归复制,复制目录的内容

-p

复制的时候保持属性不变.(未来简介文件属性就可以深入了解)

-d

可以复制软连接

ls -l /Gq/
总用量 4
drwxr-xr-x. 3 root root 15 7月  15 11:14 a
-rw-r--r--. 1 root root 11 7月  15 15:09 hostname
-rw-r--r--. 1 root root  0 7月  15 11:41 Gq.txt
-rw-r--r--. 1 root root  0 7月  15 11:41 oldgril996.txt
#案例16 复制/etc/目录复制到/Gq/下面
[root@Gq-rgq ~]# cp -a /etc/ /Gq/
[root@Gq-rgq ~]# ls -l /Gq/
总用量 16
drwxr-xr-x.  3 root root   15 7月  15 11:14 a
drwxr-xr-x. 80 root root 8192 7月  15 08:01 etc
-rw-r--r--.  1 root root   11 7月  15 15:09 hostname
-rw-r--r--.  1 root root    0 7月  15 11:41 Gq.txt
-rw-r--r--.  1 root root    0 7月  15 11:41 gril996.txt


cp默认无法复制目录

cp隐藏功能:备份

#案例17 把系统的网卡配置文件备份到/Gq目录下
网卡配置文件: /etc/sysconfig/network-scripts/ifcfg-eth0 或ens33
cp /etc/sysconfig/network-scripts/ifcfg-eth0  /Gq/

#如果要恢复
cp /Gq/ifcfg-eth0  /etc/sysconfig/network-scripts/ifcfg-eth0

2.7 rm remove移除,删除文件或目录

rm选项

-f

force强制删除不提示,危险

-r

递归删除,删除目录及目录的内容,没有要求不要加上-r

#案例18 删除/Gq/Gq.txt文件
[root@Gq-rgq ~]# rm /Gq/Gq.txt
rm:是否删除普通文件 "/Gq/Gq.txt"?y

#案例19 强制删除文件 /Gq/gril996.txt
[root@Gq-rgq ~]# ls /Gq/
a  etc  hostname  gril996.txt
[root@Gq-rgq ~]# rm -f /Gq/gril996.txt
[root@Gq-rgq ~]# ls /Gq/
a  etc  hostname
[root@Gq-rgq ~]# 

#案例20 删除目录/Gq/
[root@Gq-rgq ~]# rm -fr /Gq/
[root@Gq-rgq ~]# ls -l /Gq
ls: 无法访问/Gq: 没有那个文件或目录
[root@Gq-rgq ~]# 

2.8 echo输出信息到屏幕

#例子 1 输出Gq jiayou 到屏幕
[root@Gq-rgq ~]# echo Gq jiayou
Gq jiayou
 
#案例21 输出信息到文件中 /Gq/Gq.txt文件写入jiayou内容
[root@Gq-rgq ~]# echo Gq jiayou >/Gq/Gq.txt 
[root@Gq-rgq ~]# ls -l /Gq/
总用量 4
-rw-r--r--. 1 root root 14 7月  15 18:56 Gq.txt
[root@Gq-rgq ~]# cat /Gq/Gq.txt 
Gq jiayou

案例22 输出有规律的内容
[root@Gq-rgq ~]# echo {0..100}
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[root@Gq-rgq ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@Gq-rgq ~]# echo Gq{1..10}
Gq1 Gq2 Gq3 Gq4 Gq5 Gq6 Gq7 Gq8 Gq9 Gq10
[root@Gq-rgq ~]# echo Gq{01..10}
Gq01 Gq02 Gq03 Gq04 Gq05 Gq06 Gq07 Gq08 Gq09 Gq10
[root@Gq-rgq ~]#

>叫做重定向符号,先清空文件内容,然后再写入

>>叫做追加重定向,把信息写入为末尾

2.9 cat显示文件内容

cat选项

-n

number显示文件内容及行号

#案例23 显示/etc/password内容并显示行号
[root@Gq-rgq ~]# cat -n /etc/passwd
     1    root:x:0:0:root:/root:/bin/bash
     2    bin:x:1:1:bin:/bin:/sbin/nologin
     3    daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4    adm:x:3:4:adm:/var/adm:/sbin/nologin
     5    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6    sync:x:5:0:sync:/sbin:/bin/sync
     7    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8    halt:x:7:0:halt:/sbin:/sbin/halt
     9    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10    operator:x:11:0:operator:/root:/sbin/nologin
    11    games:x:12:100:games:/usr/games:/sbin/nologin
    12    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13    nobody:x:99:99:Nobody:/:/sbin/nologin
    14    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

3 目录结构命令详解

  • yum优化
  • vi/vim
  • cat/head/tail/more/less
  • wc
  • which/whereis
  • diff/vimdiff
  • sort,uniq
  • data
  • 打包压缩

3.1 linux 环境初步优化

  • 检查是否联网
ping baidu.com
  • 配置yum源(安装软件的软件仓库)
#配置yum源
cp  /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#安装Linux常用工具
yum install -y    tree   vim wget  bash-completion  bash-completion-extras  lrzsz  net-tools sysstat  iotop iftop htop unzip nc nmap telnet bc  psmisc httpd-tools  bind-utils nethogs expect

#Linux娱乐命令
yum install  -y sl  cowsay
  • 如何知晓已经安装成功?
  • 检查是否有"完成"提示"complete"

3.2 vi-vim编辑器详解

  • vi/vim区别
  • vim基本使用
  • vim几个模式
  • vim快捷键

1)vi-vim区别-了解

内容

区别

vi

系统自带,不需要额外按安装,没有vim功能多

vim

需要额外安装,vi的升级版,未来大部分情况都是用vim即可.

2) vi/vim基本使用

a)打开文件(不存在也OK)
ls -l /gq/ 
vim /gq/gq.txt

vi/vim

如果文件不存在会自动创建

如果目录不存在不会创建

b)进入编辑模式
  • 按字母i即可,编辑这个文件

c)退出编辑模式
  • 按esc键 退出编辑模式
d)保存与退出
  • 输入:wq write(写,保存)quit(退出)
  • :q!强制退出不保存
e)检查
[root@rgq ~]# cat /Gq/Gq.txt Gq jiayou Gqlinux.cn Gqdeu.com

3)vim的模式转换

  • 命令模式:通过vi/vim打开文件后进入的模式
  • 编辑模式(插入模式):用于编辑,修改文件内容
  • 底行模式:保存退出,搜索使用
  • 可视块模式:用于批量编辑

4)vim快捷键🩸🩸🩸🩸🩸

  • 建测试文件
cat /etc/services /etc/sysconfig/network-scripts/ifcfg-eth0
  • 移动光标类快捷键-必会⭐️⭐️⭐️⭐️⭐️

行之间调整: 上下调整 熟练掌握

移动到最后一行 G(shift+g)

移动到第1行 gg

移动到某一行 100gg ​

列之间调整: 左右 了解

光标移动到行首 ^(数字6)

光标移动到行尾 $(数字4)

  • 复制,删除(剪切),粘贴 ⭐️⭐️⭐️⭐️⭐️

复制当前行 yy

删除当前行 dd

粘贴到当前行后 p

  • 其他快捷键 ⭐️⭐️⭐️⭐️⭐️

撤销                                   u(undo)

显示行号                           :set nu 或 :set number

取消显示行号                    :set nonu

搜索(默认就是向下找)      /你要的内容

继续向下搜索                   n(next)

继续向上搜索                   N

了解:

搜索默认向上找              ?你要的内容

临时取消语法高亮           :noh         ##一般用于 /搜索错误,可以使用.

  • 批量操作
  • 批量处理行:复制,删除 - 了解

shift + v    进入到可视行模式(批量操作行) 按上下键,选择要处理的范围

如果删除按        d,

如果复制按       yy

  • 批量删除某部分内容,批量增加内容⭐️⭐️⭐️

案例01 批量删除文件开头的#
按ctrl + v,进入批量操作模式
选择要操作的区域
然后按d,删除.

案例02 批量给文件开头增加内容 #Gq
按ctrl + v,进入批量操作模式
选择要操作的区域
选完后,按shift + i (I),进入编辑模式
写入内容
按esc等待.
  • 快捷键小结
vim快捷键,需要在日常使用中记忆.
目前:
移动到最后一行 G(shift+g)
移动到第1行 gg
移动到某一行 100gg
复制当前行 yy
删除当前行 dd
粘贴到当前行后 p
撤销 u(undo)
显示行号 :set nu 或 :set number
取消显示行号 :set nonu
搜索(默认就是向下找) /你要的内容

5) 故障案例

  • vim编辑文件故障提示:

  • 原因:
    • 1️⃣ vi/vim编辑文件的时候,会生成临时文件(隐藏文件).
    • 2️⃣ 通过保存退出,隐藏文件会消失.
    • 3️⃣ 异常情况,断电,同时编辑这个文件,就会有这个提示.
  • 解决:
    • 🅰️:方案01: 删除临时文件,工作中也可以删掉. 根据提示的路径删除对应的临时文件即可.重新打开文件.
    • 🅱️恢复未保存数据.
vim -r Gq.txt rm -f .Gq.txt.swp 重新打开文件即修复了.

3.3 日志查询4剑客

3.3.1 概述

  • linux日志查询,文件较大,通过cat,vi/vim进行查看,系统可能卡死,可能内存不足.
  • 推荐使用不会占用太多资源的命令,查看日志:head/tail,less/more

3.3.2 日志查询命令使用

1)head显示文件的头几行,默认显示头10行.

head选项

-n num

显示头num行,默认显示头10行

案例01 显示/etc/passwd的前5行 
head -n5 /etc/passwd 
head -n 5 /etc/passwd 
head -5 /etc/passwd

温馨提示:

一般情况下,使用 -数字即可.如果-5报错或无法使用,则使用-n5形式

2)tail显示文件的后几行,默认是后10行.

tail选项

-n num

显示头num行,默认显示最后10行

-f

显示文件末尾的实时更新(一般用于查看日志)

案例02 显示/etc/passwd 的后5行 

tail -n5 /etc/passwd 
tail -5 /etc/passwd
  • 可以实时查看文件的末尾的更新.
案例03 查看/var/log/secure实时更新 

tail -f /var/log/secure
  • 打开2个窗口,一个查看,一个写入

  • taillf ==tail -f

温馨提示:如何查看日志,要每一行都看吗?

看日志要抓住核心,关键,线索

这些线索一般都是:关键词语:failed,gailure,error....

/var/log/secure中查看,failed password

3)less按页显示文件内容
q 退出查看
空格/f  下一页
b 上一页 (back)

G 最后1行
g 第一行
99g 到第99行

3.4 wc统计

  • world count统计文件按中单词情况,未来工作中用于统计行数

wc选项

-l

统计行数

#案例04 统计/etc/services文件有多少行 

wc -l /etc/services 
11176 /etc/services

温馨提示:未来wc使用案例

一般都是配合其他命令,可以取出xxx次数

还可以放在脚本中进行判断.

案例05 统计系统用户登录错误次数
#1. 过滤出日志中错误信息
grep 'Failed password' /var/log/secure #过滤
Jul 19 09:32:44 oldboy-83-lnb-v2 sshd[7082]: Failed
password for root from 10.0.0.1 port 65157 ssh2
Jul 19 09:32:55 oldboy-83-lnb-v2 sshd[7082]: Failed
password for root from 10.0.0.1 port 65157 ssh2

#2. 交给wc -l 统计次数
grep 'Failed password' /var/log/secure | wc -l

| 管道符号

把前一个命令的结果,传递给后面的命令使用

3.5 查询命令位置

  • which
  • whereis
  • 查询命令绝对路径

3.5.1 which

  • 查询命令的位置
[root@rgq ~]# which wc mkdir sed awk ping ip 
/usr/bin/wc 
/usr/bin/mkdir 
/usr/bin/sed 
/usr/bin/awk 
/usr/bin/ping 
/usr/sbin/ip

3.5.2 whereis

  • 查询命令及相关文件的位置
[root@rgq ~]# whereis awk
awk: /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1/awk.1.gz
[root@rgq ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@rgq ~]# whereis -b ls
ls: /usr/bin/ls
[root@rgq ~]# whereis -b ls sed awk
ls: /usr/bin/ls
sed: /usr/bin/sed
awk: /usr/bin/awk /usr/libexec/awk /usr/share/awk

3.6 文件比较命令

  • diff
  • vimdiff

3.6.1 diff

[root@rgq ~]# diff oldboy.txt oldboy-gai.txt
3,19c3,9
< nihao
< oldboy
< gai
< lidaoyyds 
< comein
< comein
< comein
< comein
< comein
< comein
< comein
< comein
< comein
< comein
< comein
< comein
< comein
---
> 
> 
> 
> 
> 
> 
> 你好,我好,大家好,广州好迪。

a append 增加
c 替换,修改
d 删除

3.6.2 vimdiff

vimdiff Gq.txt Gq-gai.txt

3.7 排序去重组合

  • sort
  • uniq

3.7.1 sort-排序

sort选项

说明

-n

number把要排序的内容当作数字,按照数字大小进行排序

-k

指定某一列,根据某一列进行排序

-r

逆序排序

-t

指定分隔符,单个字符

  • 基本数字序列
案例06 对文件中的数字进行排序
[root@rgq]# cat day005-06-sort.txt
99
1
10
23
3
0000
02
9
19
[root@rgq]# sort day005-06-sort.txt
0000
02
1
10
19
23
3
9
[root@rgq oldboy]# sort -n day005-06-
sort.txt
0000
1
02
3
9
10
19
23
99

温馨提示:

sort默认是按照字母/字符进行对比,会造成数字对比失败.

解决: sort -n

  • 对文件中某一列进行排序
案例07 对文件中某一列进行排序
[root@rgq oldboy]# cat day005-07-sort.txt
lidao 18
wang 16
15w 38
[root@rgq oldboy]# sort -n -k 2 day005-07-sort.txt
wang 16
lidao 18
15w 38

sort -nk2 day005-07-sort.txt

如果是逆序排序则加上-r即可
[root@rgq oldboy]# sort -rnk2 day005-07-
sort.txt
15w 38
lidao 18
wang 16

企业面试题: ll /etc/ 取出大小最大的前5个.

提示: 需要使用管道

翻译: 对ll /etc/第5列进行逆序排序,取出前5个就行.

方法01

对ll /etc/第5列进行逆序排序

ll /etc/ |sort -rnk5

取出前5个就行

ll /etc/ |sort -rnk5 |head -5

方法02 默认排序,取出最后5个

ll /etc/ |sort -nk5 |tail -5

案例08 通过sort多多列进行同时排序
cat >/oldboy/day005-08-sort.txt 
oldboy 40 linux学院 20000
oldli 18 linux学院 21000
oldgirl 22 linux学院 30000
old3 7 linux学院 4040
old2 7 linux学院 30300
old1 7 linux学院 50000
old4 7 linux学院 30000
old5 8 linux学院 25000
old6 8 linux学院 15000
EOF

[root@rgq oldboy]# sort -rn -k2 day005-08-sort.txt
oldboy 40 linux学院 20000
oldgirl 22 linux学院 30000
oldli 18 linux学院 21000
old6 8 linux学院 15000
old5 8 linux学院 25000
old4 7 linux学院 30000
old3 7 linux学院 4040
old2 7 linux学院 30300
old1 7 linux学院 50000

[root@rgq oldboy]# sort -rn -k2 -k4 day005-08-sort.txt
oldboy 40 linux学院 20000
oldgirl 22 linux学院 30000
oldli 18 linux学院 21000
old5 8 linux学院 25000
old6 8 linux学院 15000
old1 7 linux学院 50000
old2 7 linux学院 30300
old4 7 linux学院 30000
old3 7 linux学院 4040

多列排序说明-k2 -k4表示先对第2列排序,如果第2列有重复的则对第四列排序,表示优先对第2列排序,第4列是辅助

  • sort 20K题目
以.为分隔符对第3列和第4列排序.

cat >/oldboy/sort-20k.txt <<EOF
192.168.3.1 00:0F:AF:81:19:1F
192.168.3.2 00:0F:AF:85:6C:25
192.168.3.3 00:0F:AF:85:70:42
192.168.2.20 00:0F:AF:85:55:DE
192.168.2.21 00:0F:AF:85:6C:09
192.168.2.22 00:0F:AF:85:5C:41
192.168.0.151 00:0F:AF:85:6C:F6
192.168.0.152 00:0F:AF:83:1F:65
192.168.0.153 00:0F:AF:85:70:03
192.168.1.10 00:30:15:A2:3B:B6
192.168.1.11 00:30:15:A3:23:B7
192.168.1.12 00:30:15:A2:3A:A1
192.168.1.1 00:0F:AF:81:19:1F
192.168.2.2 00:0F:AF:85:6C:25
192.168.3.3 00:0F:AF:85:70:42
192.168.2.20 00:0F:AF:85:55:DE
192.168.1.21 00:0F:AF:85:6C:09
192.168.2.22 00:0F:AF:85:5C:41
192.168.0.151 00:0F:AF:85:6C:F6
192.168.1.152 00:0F:AF:83:1F:65
192.168.0.153 00:0F:AF:85:70:03
192.168.3.10 00:30:15:A2:3B:B6
192.168.1.11 00:30:15:A3:23:B7
192.168.3.12 00:30:15:A2:3A:A1
EOF

#以.为分隔符
sort -t"." -rn -k3 sort-20k.txt
sort -t"." -rn -k3,3 -k4,4 sort-20k.txt

-rn 数字逆序排序
-k3,3 表示仅对第3列排序
-k4,4 对第4列排序

3.7.2 uniq

  • 去重(去掉重复的,留下唯一的)

uniq选项

-c

去重并显示次数(重复次数)

cat >/oldboy/uniq.txt 
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
lidao
lidao
lidao
lidao
lidao
smile
smile
smile
smile
blood
blood
blood
blood
EOF

uniq -c uniq.txt
6 oldboy
5 lidao
4 smile
4 blood

​温馨提示:uniq只能对相邻的行进行合并(去重),如果不相邻,需要通过sort命令 调整为相邻的.

先sort,然后uniq

新的测试文件内容,请自己vim创建并写入.
oldboy
oldboy
oldboy
oldboy
lidao
lidao
smile
blood
blood
oldboy
oldboy
lidao
lidao
lidao
smile
smile
smile
blood
blood
#1.先对数据进行排序,相同的数据会在一起
sort uniq.txt

#2.然后通过uniq -c去重并统计次数
sort  uniq.txt |uniq -c |sort -rn

3.8 日期组合

  • date
  • ntpdate
  • 特殊符号

3.8.1 date

data选项

+

以xxxx格式显示日期与时间

%F 年-月-日 %Y-%m-%d

%w周几

%T%H%M%s 时:分:秒

-d

根据说明修改时间

-s

修改时间

#案例10 按照指定格式显示日期 年-月-日 2022-07-19
date +%F
2022-07-19

#案例11 按照指定格式显示日期 年月日 20220719
year
month
day
date +%Y%m%d
20220719

#案例12 显示当前时间 时:分:秒、
hour
mintue
second
date +%T
date +%H:%M:%S


#案例13 显示当前日期为 年-月-日_周几
date +%F_%w
2022-07-19_2
  • 按照说明显示时间或日期
[root@rgq ~]# date -d '-1 day'
2022年 07月 18日 星期一 19:29:57 CST
[root@rgq ~]# date -d '1 day'
2022年 07月 20日 星期三 19:30:14 CST

#案例14 显示前1天的日期  按照年-月-日—_周几_小时 格式显示
date -d '-1day' +%F_%w_%H
2022-07-18_1_19
  • 手动修改时间
date -s '20221111 11:11:11'
date -s '20221111'

3.8.2 ntpdate同步时间的命令

yum install -y ntpdate
ntpdate ntp1.aliyun.com
19 Jul 15:26:13 ntpdate[7937]: step time server
120.25.115.20 offset -9880664.037056 sec
提示offset xxx sec表示同步成功

3.8.3 修改时区-熟悉

timedatel set-timezone asia/shanghai

3.8.4 实践应用

  • date应用场景:企业备份的时候,给压缩包加上时间.
  • 特殊符号 ``,反引号里面的命令会被优先执行
[root@rgq ~]# which find
/usr/bin/find
[root@rgq ~]# ll /usr/bin/find
-rwxr-xr-x. 1 root root 199304 10月 31 2018 /usr/bin/find
[root@rgq ~]# ll `which find`
-rwxr-xr-x. 1 root root 199304 10月 31 2018 /usr/bin/find
[root@rgq ~]# 
  • 创建backup-etc-2022-07-19.txt
date +%F
touch backup-etc-xxxxx.txt

touch backup-etc-`date +%F'.txt
ls -l backup-etc-2022-07-19.txt

4.打包压缩三剑客

4.1 概述

压缩命令

应用场景

tar

大部分使用tar即可,创建,查看,解压,解压到指定目录。

gzip

一般配合其他命令使用。

zip

一般用于解压zip格式的压缩包unzip

4.2 tar

  • windows压缩
  • Linux打包压缩 打包(文件放在一起) 压缩(进行压缩,节约空间)Tar
  • 功能:
    • 创建
    • 查看
    • 解压
    • 解压到指定目录

tar命令

选项与说明

创建zcf

tar zcf 压缩包 被压缩的文件/目录

查看tf

tar tf /tmp/etc.tar.gz

解压xf

tar xf /tmp/etc.tar.gz

1)创建

tar zcvf /tmp/Gq.tar.gz  /Gq/
tar zcf /tmp/Gq.tar.gz  /Gq/

v verbose 显示过程
c create 创建包(打包)
z gzip  通过gzip压缩工具进行压缩  tar打包  gz压缩  .tar.gz
f file  指定压缩包,f选项放在这几个选项的最后

2)查看压缩包内容

tar ztvf  /tmp/etc.tar.gz
tar tf  /tmp/etc.tar.gz

t list 列表,查看压缩包内容

3)解压

  • 默认解压到当前目录。
tar zxvf /tmp/ettc.tar.gz
tar xf /tmp/etc.tar.gz

x extract  解压
  • 解压后的文件

4)解压到指定目录

解压etc.tar.gz  到/mnt目录下
tar xf /tmp/etc.tar.gz -C /mnt/

-C 指定目录

5)tar:从成员名单中删除开头的"/"

  • 是个警告而已。

tar:Removing leading '/' from member names

  • 这是tar命令的安全保护机制。把我们使用的绝对路径转换为相对路径。
  • 为了防止保留绝对路径,从而发生覆盖。 /etc/hosts
  • 避免提示:使用相对路径打包
cd /
tar zcf  /tmp/etc.tar.gz  etc/

4.3 gzip

  • 创建gz压缩包
touch gq.txt
gzip Gq.txt
ll Gq.txt.gz
  • 解压
gzip -d Gq.txt.gz

4.4 zip/unzip

  • 对于这个命令大部分命令会使用解压即可
压缩
zip  r etc.zip  /etc/
-r 用于压缩目录

解压
unzip etc.zip

5. grep

  • 过滤:在文件或管道中查找,找出想要的内容

5.1 概述与选项

grep

说明

-n

显示行号

-v

排除,取反

-i

过滤的时候忽略大小写

5.2 案例与应用

  • 基本用法
在/etc/passwd中过滤出包含root的行
[root@rgq ]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

  • 显示行号和内容
案例01 显示/etc/passwd中包含root行及行号
grep -n 'root'  /etc/passed

  • 过滤的时候不区分大小写
案例02 过滤出secure文件中failed passwd的行不区分大小写
grep -i 'failed password' var/log/secure

  • 排除
案例03 排除/etc/passwd中的nologin的行
grep -v nologin ' /etc/passwd

6.find

6.1 概述与选项

  • find在指定目录中查找文件

find命令选项

说明

-type

什么类型的文件 f表示文件 d表示目录

-name

文件名

-size

根据大小查找文件

+表示大于

-表示小于

+10M(大写) +10k(小写k) G

-mtime

根据修改时间查找文件

6.2 案例

#案例01 在/etc/目录中找出文件名叫hostname文件
find /etc/ -type  f -name 'hostname'
/etc/hostname

#案例02 找出/etc/下面以.conf结尾的文件
find /etc/ -type f -name '*.conf'

温馨提示: *表示任意符号或所有

温馨提示:如果想找以xxxx开头或包含xxx的文件

找以Gq开头的文件: -name 'Gq*'

找到包含Gq的文件:(可能是开头,可能是结尾,可能是中间):-name '*Gq*'

#案例03 根据大小找出文件 /etc/目录下面找出大于10kb的文件
find /etc/  -type -f -size +10k

#案例04 根据修改时间找出文件
根据相对的时间进行查找,比如
修改时间最近7天的文件
find /Gq/ -type f -mtime -7 #最近7天

修改时间大于30天
find /Gq/ -type f -mtime +30 #30天之前的

#案例05 找出/etc/中以.conf结尾大于10kb修改时间是7天之前的文件
find /etc/ -type -f -name '*.conf' -size +10k -mtime +7

  • 进阶选项
#案例06  查找文件的时候指定最多找多少层目录。
find / -maxdepth 2 -type f -name "*.conf"

#案例07 查找的时候不区分大小写
find / -type f -iname "*.conf"

6.3 find命令与其他命令配合

  • find找出想要的文件删除,看详细信息
  • find照吃文件进行打包压缩
  • find找出文件后复制或移动
mkdir -p /gq/find
touch /gq/find/qq{01..10}.txt

1)案例08—find找出/gq/find/ 以.txt结尾的文件显示详细信息❣️❣️❣️

  • 方法01 find `` ❣️❣️❣️❣️❣️
ls -lh find命令的结果
ls -lh `find /gq/find/ -type f -name '*.txt'`
ls -lh $(find /gq/find/ -type f -name '*.txt')
  • 方法02 find | xargs ❣️❣️
find /gq/find/ -type f name '*.txt' |xargs ls -lh

温馨提示: |xargs后面无法使用 ll,后面讲解别名的时候会详解。

关于管道的秘密:

find /gq/find/ -type f -name '*.txt' |ls -lh

故障原因:

前面的命令通过管道传递给后面的命令,传递的是字符串。

这个命令(ls)中传递文字符号就不行,传递参数。

所以上面的命令相当于find白白浪费了,仅仅执行了下ls -lh而已。

如何解决:

通过 |xargs 把字符串转换为参数。

  • 方法03 find + -exec 方法
find /gq/find/  -type f -name '*.txt'  -exec ls -lh {} \;
-exec是find选项,表示find找出文件后要执行的命令
{}表示前面find命令找出的文件。
\;表示命令结束,固定格式。

2)案例09-find与打包压缩

  • find找出/gq/find/ 以.txt结尾的文件放在/tmp/find.tar.gz
  • 方法01 - find ``
tar zcf  /tmp/find.tar.gz  `find /gq/find/ -type f -name '*.txt'`
  • 方法02 find + | xargs
find /gq/find/ -type f -name '*.txt' | xargs tar zcf /tmp/find.tar.gz
  • 方法03 find + exec
find /gq/find/ -type f -name '*.txt'  -exec tar zcf /tmp/find.tar.gz {}  \;
有坑,因为-exec \;执行方式1个文件的压缩。

find /gq/find/  -type f -name '*.txt' -exec tar zcf /tmp/find.tar.gz {} +

3)案例10-find与复制或移动

  • find找出/gq/find/ 以.txt结尾的文件然后复制到/tmp/下面
  • 方法01 find + ``
cp 源文件 目标 cp `find /gq/find/ -type f -name '*.txt'` /tmp/
  • 方法02 find + |xargs
find xxx |xargs cp  /tmp/
运行的时候
1.find找出文件 gq01 .. gq10
2.把10个文件传输给cp命令
3.cp /tmp/  gq01 .. gq10

cp -t /tmp/ gq01 .. gq10
cp -t 目标  源文件 目录 .....
如何解决
find /gq/find/ -type f -name '*.txt'|xargs cp -t /tmp/
  • 方法03 find + -exec
find /gq/find/ -type f -name '*.txt' -exec cp {} /tmp/ \;

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gqren003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值