文件打包与解压缩

压缩文件类型

图片说明

命令

压缩:

  • zip [param -r:递归打包 -[1-9]:压缩级别 -e:加密 -l:将LF -->CR+LF(兼容linux、Windows) -q:安静模式(不输出信息) -o 输出文件 ] <name> </name>
  • 压缩级别:1-9;1:表示最快压缩但体积最大 9:表示体积最小但耗时最久

解压:

  • upzip [param] <name>
    图片说明 </name>

3.打包工具tar

  • 创建tar包:
$ tar -P -cf shiyanlou.tar /home/shiyanlou/Desktop

上面命令中,-P 保留绝对路径符,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~。你还可以加上 -v 参数以可视的的方式输出打包的文件。

  • 解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数):

    $ mkdir tardir
    $ tar -xf shiyanlou.tar -C tardir
    $ tar -tf shiyanlou.tar
    $ tar -cphf etc.tar /etc
  • x: 解包

  • c:指定已存在的目录

  • t:之查看不解宝

  • 保留文件属性和跟随链接(符号链接或软链接),有时候我们使用 tar 备份文件当你在其他主机还原时希望保留文件的属性(-p 参数)和备份链接指向的源文件而不是链接本身(-h 参数)

    gzip 工具创建 *.tar.gz 文件:

    $ tar -czf shiyanlou.tar.gz /home/shiyanlou/Desktop

图片说明

常用命令:
zip:

  • 打包 :zip something.zip something (目录请加 -r 参数)
  • 解包:unzip something.zip
  • 指定路径:-d 参数
    tar:
  • 打包:tar -cf something.tar something
  • 解包:tar -xf something.tar
  • 指定路径:-C 参数

火炉:

$ sudo apt-get install libaa-bin
$ aafire

文件系统操作与磁盘管理

$ df      查看名磁盘容量
$ df-h    主机磁盘的使用情况
$ du(-h) 查看目录的容量

常用参数:

$ du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
$ du -a #同--all 显示目录中所有文件的大小。
$ du -s #同--summarize 仅显示总计,只列出最后加总的值。
$ du -h -d 0 ~   查看1级目录的信息
$ du -h -d 1 ~   查看2级

dd命令:
用于转换和复制文件dd的命令行语句与其他的 Linux 程序不同,因为它的命令行选项格式为选项=值,而不是更标准的--选项 值或-选项=值。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。

# 输出到文件
$ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1(conv=ucase 转化为da'x)
# 输出到标准输出
$ dd if=/dev/stdin of=/dev/stdout bs=10 count=1 

上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count用于指定块数量。

mkfs 命令格式化磁盘:

#将虚拟磁盘镜像格式化为ext4文件系统:
$ sudo mkfs.ext4 virtual.img
# 查看硬盘分区表信息
$ sudo fdisk -l

Linux 系统自带的帮助工具与文档

内建命令

hell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。

外部命令

Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。

#得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
xxx is a shell builtin
#得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
xxx is /usr/bin/xxx
#若是得到alias的结果,说明该指令为命令别名所设定的名称;
xxx is an alias for xx --xxx

1.help
2.man

help xx
xx --help

图片说明

crontab命令

crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。
crontab格式:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

crontab的使用:

#查看格式
man crontab
#启动
sudo cron -f &
#添加计划任务(选择vim编辑器)
crontab -e
#删除任务
crontab -r
  • 每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离。如果是系统级别的定时任务,只需要以 sudo 权限编辑 /etc/crontab 文件就可以。
  • cron 服务监测时间最小单位是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的內容。
每个目录的作用
  • /etc/cron.daily,目录下的脚本会每天执行一次,在每天的6点25分时运行;
  • /etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的17分钟时运行;
  • /etc/cron.monthly,目录下的脚本会每月执行一次,在每月1号的6点52分时运行;
  • /etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的6点47分时运行;

命令执行顺序的控制

  • 同一行命令行中用 ; 分隔多个语句,系统会简单的顺序执行
  • 问题:前一个命令失败而后面的语句依赖于上一条语句,则得到的结果是错误的并且花费时间很长,甚至无法直观判断结果是否正确
  • 解决办法
    • &&:表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的。
    • ||:||在这里就是与&&相反的控制效果,返回非零执行。
## $? --> 获取上一次命令返回结果
$ echo $?

管道

管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

  • 匿名管道
    • 使用一些过滤程序时经常会用到的就是匿名管道,在命令行中由|分隔符表示。
  • 具名管道
    • 有名字的管道,通常只会在源程序中用到具名管道。
      ## 通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行地看
      $ ls -al /etc | less

cut命令

打印每一行的某一字段

## 打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录:
$ cut /etc/passwd -d ':' -f 1,6
## 打印/etc/passwd文件中每一行的前N个字符:
# 前五个(包含第五个)
$ cut /etc/passwd -c -5
# 前五个之后的(包含第五个)
$ cut /etc/passwd -c 5-
# 第五个
$ cut /etc/passwd -c 5
# 2到5之间的(包含第五个)
$ cut /etc/passwd -c 2-5

grep命令

在文本或stdin中查找匹配字符串

grep命令的一般形式为:

grep [命令选项]... 用于匹配的表达式 [文件]...

wc命令

wc 命令用于统计并输出一个文件中行、单词和字节的数目

wc 命令的一般形式为:

wc  [用于匹配文件]
## 注意:对于西文字符来说,一个字符就是一个字节,但对于中文字符一个汉字是大于2个字节的,具体数目是由字符编码决定的

##统计 /etc 下面所有目录数
$ ls -dl /etc/*/ | wc -l

## 默认为字典排序:
$ cat /etc/passwd | sort
## 反转排序:
$ cat /etc/passwd | sort -r
## 按特定字段排序:
$ cat /etc/passwd | sort -t':' -k 3

## -t参数用于指定字段的分隔符,这里是以":"作为分隔符;-k 字段号用于指定对哪一个字段进行排序。
## 这里/etc/passwd文件的第三个字段为数字,默认情况下是以字典序排序的,如果要按照数字排序
## 就要加上-n参数:

$ cat /etc/passwd | sort -t':' -k 3 -n

uniq 去重命令

  • history命令查看最近执行过的命令

文本处理

1.tr命令
以用来删除一段文本信息中的某些文字。或者将其进行转换

# 使用方法:
tr [option]...SET1 [SET2]

# 删除 "hello shiyanlou" 中所有的'o','l','h'
$ echo 'hello shiyanlou' | tr -d 'olh'
# 将"hello" 中的ll,去重为一个l
$ echo 'hello' | tr -s 'l'
# 将输入文本,全部转换为大写或小写输出
$ echo 'input some text here' | tr '[:lower:]' '[:upper:]'
# 上面的'[:lower:]' '[:upper:]'你也可以简单的写作'[a-z]' '[A-Z]',当然反过来将大写变小写也是可以的
  • 参数:
    图片说明

2.col命令
可以将Tab换成对等数量的空格键,或反转这个操作

# 使用方法:
col [option]

# 使用 col -x 将 /etc/protocols 中的 Tab 转换为空格, ^I --> space 
$ cat /etc/protocols | col -x | cat -A
  • 参数:

图片说明

3.join命令
用于将两个文件中包含相同内容的那一行合并在一起

#使用方法
join [option]... file1 file2

cd /home/shiyanlou
# 创建两个文件
echo '1 hello' > file1
echo '1 shiyanlou' > file2
join file1 file2
# 将/etc/passwd与/etc/shadow两个文件合并,指定以':'作为分隔符
sudo join -t':' /etc/passwd /etc/shadow
# 将/etc/passwd与/etc/group两个文件合并,指定以':'作为分隔符, 分别比对第4和第3个字段
sudo join -t':' -1 4 /etc/passwd -2 3 /etc/group
  • 参数
    图片说明

4.paste命令
在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开

#使用方法
paste [option] file...
  • 参数
    图片说明