---
title: 1.1、linux常用命令与技巧(1)
date: 2018-1-3 00:52:22
tags: linux
categories: 
  - linux
---

### md5sum与sha1sum
用于使用hash算法生成文件的摘要信息 , 常用于文件完整性的校验
<!-- more -->
```bash
# 生成a.txt的md5摘要信息
md5sum a.txt

# 生成当前目录下所有文件的sha1摘要信息
sha1sum ./*
```

### history
显示在终端中执行过的所有命令的历史记录
(按↑方向键快速找到执行过的命令也是利用的这个记录)
如果使用`history -c`可以清空这个列表

### chown
这个命令是用来改变文件拥有者和所在的组
```
chown <用户名>:<组> <文件名>
```
可以改变文件的所有权

### cal
就是calendar(日历) , 可以用来显示当前月份或者任意年份中的某一月
```
# 显示当前月份日历
cal

# 显示2018年2月的日历
cal 2 2018

# 显示2018年全年日历
cal -y 2018
```

### cat
代表了连结 , 通常也可以用它输出单个文件的内容
```bash
# 输出a.txt的内容(带行号)
cat -n a.txt

# 将a.txt b.txt的内容连结输出
cat a.txt b.txt
```

### 输出重定向
对于程序的输出 , 我们通常不能一直看着终端 , 而且终端也只能保留最近的内容
除了程序本身可以有对于日志的处理之外
我们也可以将程序向终端的输出重定向到指定的文件里面
使用`>`和`>>`可以实现重定向
前者表示始终覆盖目标文件 , 后者表示如果目标文件存在则执行追加操作 , 不会覆盖
```bash
# 执行java程序并将输出写入到当前目录的output.txt文件当中
java -jar demo.jar > ./output.txt
```
当然有些程序会在终端打印大量无意义的内容
我们如果想把这些输出直接丢弃
可以使用`/dev/null`作为目标位置
这是个并不存在的虚拟位置 , 定向到这里相当于是把输出内容直接丢弃 , 避免占用磁盘空间
```bash
command > /dev/null 2>&1
# 1表示标准输出 2表示标准错误输出
# 2>&1表示将标准错误输出重定向到标准输出, 这样两者都会被丢弃
```

#### 与cat的配合使用
cat既然表示连结 , 那么与输出重定向配合使用 , 就可以实现对于压缩分卷的结合了
```bash
# 注意分卷的顺序
cat data.z01 data.z02 data.zip > xdata.zip
# 将分卷结合成一个文件之后就可以执行解压了
unzip xdata.zip
```

执行`cat /dev/null`不会输出任何内容
如果想要清空一个文件
可以执行
```bash
cat /dev/null > filename
```

### grep
全称是Global Regular Expression Print, 全局正则表达式输出
这个命令的作用是执行全文检索
```
# 在a.txt当中搜索str1字符串
grep "str1" a.txt

# 在当前目录下递归检索所有文件搜索str1字符串
grep -r "str1" ./
```
当然不限于固定的字符串, 也可以使用正则表达式

#### 管道符"|"
格式 : 命令A|命令B
作用是将命令A的输出结果作为命令B的操作对象
比如结合`grep`可以对繁杂的输出结果进行过滤
```bash
# 查询当前运行的进程, 并过滤包含tomcat关键字的行
ps ax | grep tomcat
```
比如`wc -l`可以用来统计行数
```
# 统计当前目录下总共有多少文件
ls -l | wc -l
```
因为`ls -l`的输出是逐行输出当前目录下每个文件的详细信息 , 所以统计出的行数实际上就是文件数量了

#### apt被其他进程占用
( 限于ubuntu系统 )
使用apt进行包的管理时出现
**无法锁定管理目录(/var/lib/dpkg/)**
可以执行
```bash
rm /var/cache/apt/archives/lock
rm /var/lib/dpkg/lock
```
解除锁定