文件打包与解压缩
压缩文件类型
命令
压缩:
- 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...
- 参数