Linux下命令(2)

1. 解压缩命令

  Linux 下最常用的打包程序是 tar 命令, 使用 tar 打出来的包我们常称为 tar 包, tar包文件的命令通常都是以.tar 结尾的,生成 tar 包后,就可以用其它的程序来进行压缩了。
  功能: tar 是一个压缩解压工具。利用 tar,用户可以为某一特定文件创建档案(备份文件) , 也可以在档案中改变文件, 或者向档案中加入新的文件。 tar 最初被用来在磁带上创建档案, 现在,用户可以在任何设备上创建档案,如软盘。利用 tar 命令,可以把一大堆的文件和目 录全部打包成一个文件, 这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。 Linux 上的tar是GNU版本的 。
  语法: tar [主选项+辅选项] <目标文档> <源文件或者目录>

1.1 tar 解压/压缩使用规范

(1) 将/test 目 录下所有文件打包位 test.tar 文件

#tar -cvf test.tar /test

  注:如果打包的文件或者目录是绝对路径, 可能提示 tar: 从成员名中删除开头的“/” ,则在参数中添加-P 即可消除。

#tar -cvPf test.tar /test

(2)解压打包的.tar 文件

#tar -xvf test.tar

1.2 使用 gzip 压缩/解压文件

# tar -czf test.tar.gz test/ //压缩
# tar -xzf test.tar.gz //解压

1 .3 使用 bzip2 压缩解压文件

# tar -cjf test.tar.bz2 test/ //压缩
# tar -xjf test.tar.bz2 //解压

2.vim编辑器使用

  Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。
  Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
  vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。

2.1vim基本操作

[wbyq@wbyq ~]$ touch main.c #创建文件
[wbyq@wbyq ~]$ vim main.c #打开文件
进入编辑状态:按’i’
退出vim操作方式:
先按ESC,再按shift+’:’,输入wq

2.2 设置 vim 编辑器显示行号和 TAB 空格

[wbyq@wbyq ~]$ sudo vim /etc/vim/vimrc

2.3 vim快捷键

  复制:yy(复制光标处的一行), 按 p 粘贴;
  复制多行:3yy(复制光标处连续 3 行), 按 p 粘贴;
  删除:dd(删除光标处 1 行)
  删除多行:3dd(删除光标处连续 3 行)

  • 块操作:
  • v 可视化块选择状态, 选择块之后, 可以对块删除(d)、 复制(y)、 剪切(x);
  • u 撤销上次操作
  • ctrl + r 恢复上次操作
  • Ctrl+d 向下翻半页 down
  • Ctrl+u 向上翻半页 up
  • gg 光标定位到文档头
  • G 光标定位到文档尾
  • H 光标定位到当前页首
  • L 光标定位到当前页的最后一行的行首
  • [n]+ 光标向后移动 n 行,[n]表示一个整数, 比如 10+
  • [n]- 光标向前移动 n 行,[n]表示一个整数, 比如 10+
  • [n]G 光标定位到第 n 行行首, [n]表示一个整数, 比如 10+

3.网络相关命令

3.1 ifconfig命令

功能: ifconfig 用于查看和更改网络接口的地址和参数,包括 IP 地址、网络掩码、广播地址。
语法: ifconfig -interface [options] address

  • 主要参数
参数 说明
-interface 指定网卡名字,如eth0,ens33
up 激活指定的网卡
down 关闭指定的网卡
broadcast address 设置接口的广播地址
pointopoint 启用点对点方式
address 设置指定接口设备的ip地址
netmask addresss 设置接口的子网掩码

  • 应用说明
      ifconfig 是用来设置和配置网卡的命令行工具。为了手工配置网络,这是一个必须掌握的命令。使用该命令的好处是无须重新启动机器。要赋给 eth0 接口 IP 地址210.34.6.89,并且马上激活它,使用下面命令:
      注意:用ifconfig命令配置的网络设备参数,机器重新启动以后将会丢失。
      (1)查看网卡信息

# ifconfig //查看当前已经启动的网卡信息
# ifconfig -a //查看所有网卡的信息。包含未启动的网卡。
# ifconfig eth0 //查看 eth0 网卡的信息

  (2)启动与关闭网卡

# ifconfig eth0 up //激活名称为 eth0 的网卡
# ifconfig eth0 down //关闭名称为 eth0 的网卡

  (3)修改网卡MAC地址

首先必须关闭网卡设备: ifconfig eth0 down
修改MAC地址: ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
重新启用网卡: ifconfig eht0 up
这样网卡的MAC地址就更改完成了。每张网卡的MAC地址是惟一,但不是不能修改的,只要保证在网络中MAC地址的惟一性就可以了。

  (4)设置网卡IP地址

ifconfig nes33 192.168.1.253 #设置网卡IP
ifconfig nes33 :0 192.168.1.252 netmask 255.255.255.0 #同一网卡绑定另一IP
ifconfig nes33 :0 192.168.1.251 netmask 255.255.255.0 #同一网卡绑定另一IP

3.2 ping命令

  功能: ping检测主机网络接口状态,使用权限是所有用户。
  ping命令是使用最多的网络指令,通常我们使用它检测网络是否连通,它使用ICMP协议。但是有时会有这样的情况,我们可以浏览器查看一个网页,但是却无法ping通,这是因为一些网站处于安全考虑安装了防火墙。
  示例:

$ ping 192.168.2.192 #ip地址测试
$ ping www.baidu.com #网络测试

3.3 ubuntu下防火墙启动与关闭

$ sudo ufw enable  #启动防火墙
在系统启动时启用和激活防火墙
$ sudo ufw disable  #关闭防火墙
防火墙在系统启动时自动禁用

4. 磁盘操作相关命令

4.1 fdisk磁盘分区命令

  Linux下的fdisk功能是极其强大的,用它可以划分出最复杂的分区。

[wbyq@wbyq 1227]$ sudo fdisk -l /dev/sda #查看磁盘信息
Disk /dev/sda:50 GiB,53687091200 字节,104857600 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa9f71e09

设备       启动  起点      末尾      扇区 大小 Id 类型
/dev/sda1  *     2048 104855551 104853504  50G 83 Linux

4.2 fdisk命令参数

  在命令行执行sudo fdisk /dev/sdb,可进行磁盘操作。

参数 说明
m 查看帮助
p 打印分区表
d 删除分区
F 列举未分区的空闲区
n 添加新分区
w 将分区表写入磁盘并退出
q 退出而不保存更改

  • 示例
$ sudo fdisk /dev/sdb  #打开要操作的磁盘

欢迎使用 fdisk (util-linux 2.31.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助): p #打印分区表
Disk /dev/sdb:28.8 GiB,30945574912 字节,60440576 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x9dc7bebf
命令(输入 m 获取帮助): F #列出空闲分区,当前卡还未做分区
未分区的空间 /dev/sdb:28.8 GiB,30944526336 个字节,60438528 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节

 起点     末尾     扇区  大小
 2048 60440575 60438528 28.8G
命令(输入 m 获取帮助): n #添加新分区
分区类型
   p   主分区 (0个主分区,0个扩展分区,4空闲)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p): p #设置为主分区
分区号 (1-4, 默认  1): 1
第一个扇区 (2048-60440575, 默认 2048): 
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-60440575, 默认 60440575): +10G #设置大小为10G

创建了一个新分区 1,类型为“Linux”,大小为 10 GiB。
命令(输入 m 获取帮助): w #保存退出
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。

4.3 mkfs格式化文件系统

$ sudo mkfs.fat /dev/sdb1  #格式化文件系统为FAT格式

4.4 df查看文件系统格式和磁盘大小

[wbyq@wbyq 1227]$ df -T -h /dev/sdb1  #-T查看文件系统格式,-h显示磁盘容量
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sdb1      vfat   10G   32K   10G    1% /media/wbyq/4666-2FBC

4.5 dd命令

  dd是Linux/UNIX下的一个非常有用的命令,作用是将一个指定文件拷贝到磁盘的指定块。可以用于磁盘备份、程序烧写等应用。
  基本语法: dd iflag=dsync oflag=dsync if=<输入文件> of=<输出文件> seek=<跳过扇区数量>

  • dd命令参数
参数 说明
if=file 输入文件名,缺省为标准输入
of=file 输出文件名,缺省为标准输出
ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes 一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
cbs=bytes 一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks 从输入文件开头跳过 blocks 个块后再开始复制。
seek=blocks 从输出文件开头跳过 blocks 个块后再开始复制。 (通常只有当输出文件是磁盘或磁带时才有效)。
count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
conv=conversion[,conversion…] 用指定的参数转换文件。

  注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512,k=1024

  • 运用示例

  (1)磁盘测试

$ sudo dd if=/dev/sdb of=/dev/sdb

  硬盘较长时间(比如 1,2年)放置不使用后,磁盘上会产生magnetic flux point(磁通点)。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

  (2)清除磁盘数据

$ sudo dd if=/dev/urandom /dev/sdb

  利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后, /dev/sdb将无法挂载,创建和拷贝操作无法执行。其中的/dev/urandom 是产生随机数的文件。

  (3)获取随机数据

$ sudo dd if=/dev/urandom of=123.dat bs=1024k count=2

  其中bs表示每一个块的大小是1024kb。count就表示块数量。加起来就会拷(1024*2)kb 的数据。

  (4)磁盘备份

$ sudo dd if=/dev/sdb of=disk.img

  将磁盘数据备份到当前目录的disk.img文件。备份之后可以使用压缩软件打开。如果需要恢复直接将参数变换个位置。

  (5)程序烧写

$ sudo dd iflag=dsync oflag=dsync if=123.bin of=/dev/sdb seek=1057

  将123.bin文件拷贝到/dev/sdb设备中,seek表示跳过1057个块之后再进行拷贝。

5.mount命令

  mount 命令用于挂载磁盘分区或者网络文件系统。
  语法: mount -t [文件系统类型] [将要挂载的设备] [-o 选项] [挂载的目标目录]
  注:通过-t 这个参数, 我们来指定文件系统的类型,一般的情况下不指定也能自动识加。 -t 后面跟 ext3、ext2、reiserfs、vfat、ntfs、nfs等;可以通过查看mount的帮助文档进行查看详细信息。
  -o主要用来描述设备或档案的挂接方式。常用的参数有:
  loop:用来把一个文件当成硬盘分区挂接上系统;
  ro:采用只读方式挂接设备;
  rw:采用读写方式挂接设备;
  iocharset:指定访问文件系统所用字符集;

  • 运用实例

  (1)挂载SD卡分区到指定目录

$ sudo mount /dev/sdb2 /test/

  将sdb2设备挂载到/test目录下。

  (2)取消挂载

$ sudo umount /dev/sdb2 /test/

  (3)挂载光盘映像文件到指定目录

$ sudo mount 123.iso -o loop /test/

 &emsp将123.iso文件当成硬盘挂载到/test 目录下。

  (4)将一个目录挂载到另一个目录下

$ sudo mount --bind /work/ /test/

  相当于使用 ln 建立链接一样效果。

  (5)使用mount命令挂载NFS网络文件系统

$ sudo mount -t nfs 192.168.11.123:/work /test/

  如果挂载提示设备资源上锁,可以使用下面方式进行挂载:

$ sudo mount -t nfs -o nolock 192.168.11.123:/work /test/

  其中192.168.11.123表示服务器的IP地址,/work 表示NFS服务器共享的目录。/test/表示本地挂载的目录。

6.find命令

  命令功能: 用于在文件树种查找文件,并作出相应的处理。
  语法: find [查找的路径] [选项] [表达式]

  • 命令参数说明:
参数 说明
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, - n 表示文件更改时间距现在 n 天以内, + n 表示文件更改时间距现在 n 天以前。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups 中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd 中不存在。
-newer file1 ! file2 查找更改时间比文件 file1 新但比文件 file2 旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n: [c] 查找文件长度为 n 块的文件,带有 c 时表示文件长度以字节计。
-depth : 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype: 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文
-mount : 在查找文件时不跨越文件系统 mount 点。
-follow: 如果 find 命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio: 对匹配的文件使用 cpio 命令,将这些文件备份到磁带设备中。
-amin n 查找系统中最后 N 分钟访问的文件
-atime n 查找系统中最后 n_24 小时访问的文件
-cmin n 查找系统中最后 N 分钟被改变文件状态的文件
-ctime n 查找系统中最后 n_24 小时被改变文件状态的文件
-mmin n 查找系统中最后 N 分钟被改变文件数据的文件
-mtime n 查找系统中最后 n*24 小时被改变文件数据的文件

  • 使用示例

  (1)根据名字查找

$ find /home/wbyq/ -name main.c  #在wbyq目录下查找main.c文件

  (2)根据通配符查找文件

$ find /home/wbyq/ -name “*.c”   #在指定目录下查找所有.c文件
$ find  “*.c”  #在当前目录下查找.c文件

  (3)不区分大小写的方式:

$ find /home/wbyq/ -iname "*.c"

  (4)同时查找多个文件

$ find /home/wbyq/  -name "*.txt" -o -name "*.c" -o -name "*.h"

  在/home/wbyq/目录下查找以.c、.txt、 .h为后缀的文件。主要参数是-o。

  (5)匹配路径或者文件


$ find /home/wbyq/ -path "*work"

  在/home/wbyq/ 目录下查找包含work字符的文件和目录。

  (6)否定参数

$ find /home/wbyq/ ! -name "*.c"  #查找不是以.c 为后缀的文件。

  (7)根据文件类型搜索

$ find /home/wbyq/ -type f  #在wbyq下查找普通文件

  (8)根据文件大小进行匹配

$ find /home/wbyq/ -type f -size 200k

  在/home/wbyq/目录下查找类型为 f的普通文件,并且文件的大小为200k。

  • 文件大小单元:
  • b —— 块( 512 字节)
  • c —— 字节
  • w —— 字( 2 字节)
  • k —— K 字节
  • M —— 兆字节
  • G —— G 字节

      常用大小搜索方式:

搜索大于 100KB 的文件 $ find /home/wbyq/ -type f -size +100k
搜索小于 100KB 的文件 $ find /home/wbyq/ -type f -size -100k
搜索等于 100KB 的文件 $ find /home/wbyq/ -type f -size 100k

  (9)查找并拷贝文件

$ find/home/wbyq/  -name "*.txt" -exec cp {} /opt/ \;

  在wbyq目录下查找以.txt 为后缀的文件,将其全部拷贝到/opt 目录下。

  (10)查找并删除指定文件

//wby目录下找普通文件,以.c为后缀,并删除
$ find /home/wbyq/  -type f -name "*.c" -delete 
$ find /home/wbyq/ -name "*.txt" -ok rm {} \;
$ find /home/wbyq/ -name "*.txt" -exec rm {} \;

  -exec参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
  {}花括号代表前面find查找出来的文件名。
  注意:{}和;中间的空格。
  其中-ok和-exec行为一样,不过-ok会给出提示,是否执行相应的操作;-exec不会提示,直接执行。

  (11)根据文件权限查找

$ find /home/wbyq/ -type f -perm 777

  (12)根据时间查找

  • UNIX/Linux 文件系统每个文件都有三种时间戳:
      访问时间( -atime/天, -amin/分钟):用户最近一次访问时间。
      修改时间( -mtime/天, -mmin/分钟):文件最后一次修改时间。
      变化时间( -ctime/天, -cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

最近七天内被访问过的所有文件:$ find /home/wbyq/ -type f -atime -7
搜索恰好在七天前被访问过的所有文件:$ find /home/wbyq/ -type f -atime 7
搜索超过七天内被访问过的所有文件:$ find /home/wbyq/ -type f -atime +7
搜索访问时间超过10分钟的所有文件:$ find /home/wbyq/ -type f -amin +10
找出比file.log修改时间更长的所有文件:$ find /home/wbyq/ -type f -newer file.log