root 5 years ago
parent eb9dda2116
commit f19d9172d5

@ -32,4 +32,29 @@ date >/root/2013.log | at 17:20 tomorrow # 明天17点钟输出时间到指
atq # 计划任务设定后在没有执行之前我们可以用atq命令来查看系统没有执行工作任务 atq # 计划任务设定后在没有执行之前我们可以用atq命令来查看系统没有执行工作任务
at -c 8 # 显示已经设置的任务内容 at -c 8 # 显示已经设置的任务内容
echo "DISPLAY=$DISPLAY xmessage cooker" | at "NOW + 30 minutes" # 在给定的时间弹出对话框 echo "DISPLAY=$DISPLAY xmessage cooker" | at "NOW + 30 minutes" # 在给定的时间弹出对话框
# 指定时间的方式分为绝对计时方法和相对计时方法
# 默认情况下书写的计划任务都存放在/var/spool/目录中
: << comment
hh:mm:today
hh:mm:tomorrow
hh:mm:星期
hh:mm:MM/DD/YY;MMDDYY;DD.MM.YY
now +n minutes
now +n hours
now +n days
实例指定今天下午17:30执行某命令此时为下午14:30,2013.5.8
多个书写方式:(仅供参考学习)
at 5:30pm
at 17:30
at 17:30 today
at now +3 hours
at now +180 minutes
at 17:30 05.08.13
at 17:30 05/08/13
使用ctrl+d提交任务
comment
``` ```

@ -26,4 +26,5 @@ cat -n /etc/passwd | sed '3,37c我是好人' # 将2至5行内容替换成我
cat -n /etc/passwd | sed -n '5,7p' # 只显示5至7行 cat -n /etc/passwd | sed -n '5,7p' # 只显示5至7行
cat /var/log/secure | sed -n '/12:12:50/,/12:13:50/p' # 分析secure日志 cat /var/log/secure | sed -n '/12:12:50/,/12:13:50/p' # 分析secure日志
cat /proc/partitions # 显示所在系统注册的分区 cat /proc/partitions # 显示所在系统注册的分区
``` ```

@ -1,97 +1,39 @@
chage # **chage**
===
修改帐号和密码的有效期限
## 说明 ## 说明
**chage命令** 是用来修改帐号和密码的有效期限。 **chage命令** 是用来修改帐号和密码的有效期限
### 语法
``` ## 选项
chage [选项] 用户名
```
```markdown
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
```
-m密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M密码保持有效的最大天数。
-w用户密码到期前提前收到警告信息的天数。
-E帐号到期的日期。过了这天此帐号将不可用。
-d上一次更改的日期。
-i停滞时期。如果一个密码已过期这些天那么此帐号将不可用。
-l例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
``` ```
### 实例 ### 实例
可以编辑`/etc/login.defs`来设定几个参数,以后设置口令默认就按照参数设定为准: ```bash
: << comment
``` 可以编辑`/etc/login.defs`来设定几个参数,设置口令默认按照参数设定为准:
PASS_MAX_DAYS 99999 PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0 PASS_MIN_DAYS 0
PASS_MIN_LEN 5 PASS_MIN_LEN 5
PASS_WARN_AGE 7 PASS_WARN_AGE 7
``` comment
当然在`/etc/default/useradd`可以找到如下2个参数进行设置
```
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
```
通过修改配置文件能对之后新建用户起作用而目前系统已经存在的用户则直接用chage来配置。
我的服务器root帐户密码策略信息如下
``` chage -l root # 查看root帐户密码策略信息
[root@linuxde ~]# chage -l root chage -M 60 root # 修改root密码过期时间
最近一次密码修改时间 3月 12, 2013 chage -I 5 root # 设置密码失效时间:
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 0
两次改变密码之间相距的最大天数 99999
在密码过期之前警告的天数 7
```
我可以通过如下命令修改我的密码过期时间:
``` ```
[root@linuxde ~]# chage -M 60 root
[root@linuxde ~]# chage -l root
最近一次密码修改时间 3月 12, 2013
密码过期时间 5月 11, 2013
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 0
两次改变密码之间相距的最大天数 60
在密码过期之前警告的天数 9
```
然后通过如下命令设置密码失效时间:
```
[root@linuxde ~]# chage -I 5 root
[root@linuxde ~]# chage -l root
最近一次密码修改时间 3月 12, 2013
密码过期时间 5月 11, 2013
密码失效时间 5月 16, 2013
帐户过期时间 :从不
两次改变密码之间相距的最小天数 0
两次改变密码之间相距的最大天数 60
在密码过期之前警告的天数 9
```
从上述命令可以看到在密码过期后5天密码自动失效这个用户将无法登陆系统了。

@ -1,66 +1,26 @@
chfn # chfn
===
用来改变finger命令显示的信息
## 说明 ## 说明
**chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项则chfn命令会进入问答式界面。 **chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项则chfn命令会进入问答式界面
### 语法
```
chfn(选项)(参数)
```
```
-f<真实姓名>或--full-name<真实姓名>:设置真实姓名;
-h<家中电话>或--home-phone<家中电话>:设置家中的电话号码;
-o<办公地址>或--office<办公地址>:设置办公室的地址;
-p<办公电话>或--office-phone<办公电话>:设置办公室的电话号码;
-u或--help在线帮助
-v或-version显示版本信息。
```
### 参数
用户名指定要改变finger信息的用户名。
### 实例
范例1改变finger信息 ## 选项
``` ```markdown
[root@localhost Desktop]# chfn -f, --full-name <全名> 设置真实姓名
Changing finger information for root. -o, --office <办公> 设置办公号码
Name [root]: jack -p, --office-phone <电话> 设置办公电话
Office []: hn -h, --home-phone <电话> 设置住宅电话
Office Phone []: 888888
Home Phone []: 9999999
Finger information changed.
``` ```
范例2改变账号真实姓名 ## 实例
``` ```bash
[root@localhost Desktop]# chfn -f jack chfn # 改变finger信息;按照提示输入即可
chfn -f jack # 改变账号真实姓名
Changing finger information for root. Changing finger information for root.
Finger information changed.
```
范例3
```
shell>> chfn
Changing finger information for user
Password: [del]
Name[]:linuxde ### 提供 finger 时的资料
Office[]:NCCU
Office Phone[]: [del]
Home Phone[]: [del]
``` ```

@ -1,92 +1,25 @@
chsh # chsh
===
用来更换登录系统时使用的shell
## 说明 ## 说明
**chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称则chsh会以应答的方式进行设置。 **chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称则chsh会以应答的方式进行设置
### 语法
```
chsh(选项)(参数)
```
```
-s<shell >或--shell<shell >更改系统预设的shell环境。
-l或--list-shells列出目前系统可用的shell清单
-u或--help在线帮助
-v或-version显示版本信息。
```
### 参数
用户名要改变默认shell的用户。
### 实例
**查看系统安装了哪些shell的两种方法**
第一种:
```
[rocrocket@localhost ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
```
第二种:
```
[rocrocket@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
```
其实`chsh -l`也是来查看这个文件。
**查看当前正在使用的shell**
```
[rocrocket@localhost ~]$ echo $SHELL
/bin/bash
```
注意SHELL一定要是大写。可以看到目前使用的shell是`/bin/bash` ## 选项
**把我的shell改成zsh** ```markdown
-s, --shell <shell> 更改指定登录 shell
-l, --list-shells 打印 shell 列表并退出
``` ```
[rocrocket@localhost ~]$ chsh -s /bin/zsh
Changing shell for rocrocket.
Password:
Shell changed.
[rocrocket@localhost ~]$
```
使用chsh加选项`-s`就可以修改登录的shell了你会发现你现在执行`echo $SHELL`后仍然输出为`/bin/bash`这是因为你需要重启你的shell才完全投入到zsh怀抱中去。`chsh -s`其实修改的就是`/etc/passwd`文件里和你的用户名相对应的那一行。现在来查看下: ## 实例
``` ```bash
[rocrocket@localhost ~]$ cat /etc/passwd|grep ^rocrocket chsh -s /bin/zsh # 把我的shell改成zshchsh -s其实修改的是/etc/passwd文件里和你的用户名相对应的那一行
rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh
```
你可以发现输出内容的最后部分已经变成了`/bin/zsh`了下次重启的时候linux就会读取这一命令来启动shell了 # 查看系统安装了哪些shell的两种方法
chsh -l # 第一种
cat /etc/shells # 第二种
**把shell修改回/bin/bash**
``` ```
[rocrocket@localhost ~]$ chsh -s /bin/bash
Changing shell for rocrocket.
Password:
Shell changed.
```

@ -1,49 +1,19 @@
cksum # cksum
===
检查文件的CRC是否正确
## 说明 ## 说明
**cksum命令** 是检查文件的CRC是否正确确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来在目的系统中又被计算一次两个数字进行比较如果校验和相等则该文件被认为是正确传输了。 **cksum命令** 输出每个文件的 CRC 校验值和字节统计,确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来,在目的
系统中又被计算一次,两个数字进行比较,如果校验和相等,则该文件被认为是正确传输了
注意CRC是指一种排错检查方法即循环冗余校验法。
指定文件交由cksum命令进行校验后会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-"则cksum命令会从标准输入设备中读取数据。
### 语法
```
cksum(选项)(参数)
```
``` 注意CRC是指一种排错检查方法即循环冗余校验法
--help在线帮助
--version显示版本信息。
```
### 参数 指定文件交由cksum命令进行校验后会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-"则cksum命令会从
标准输入设备中读取数据
文件:指定要计算校验的版本信息。 ## 实例
### 实例 ```bash
使用cksum命令计算文件"testfile1"的完整性,输入如下命令:
```
cksum testfile1 #对指定文件进行CRC校验 cksum testfile1 #对指定文件进行CRC校验
``` ```
以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:
```
1263453430 78 testfile1 #输出信息
```
上面的输出信息中,"1263453430"表示校验码,"78"表示字节数。
注意如果文件中有任何字符被修改都将改变计算后CRC校验码的值。

@ -100,5 +100,20 @@ minute hour day month week command 顺序:分 时 日 月 周
0 4 1 jan * /etc/init.d/smb restart # 一月一号的4点重启smb 0 4 1 jan * /etc/init.d/smb restart # 一月一号的4点重启smb
01 * * * * root run-parts /etc/cron.hourly # 每小时执行`/etc/cron.hourly`目录内的脚本 01 * * * * root run-parts /etc/cron.hourly # 每小时执行`/etc/cron.hourly`目录内的脚本
# at命令相关
实例指定今天下午17:30执行某命令此时为下午14:30,2013.5.8
多个书写方式:(仅供参考学习)
at 5:30pm
at 17:30
at 17:30 today
at now +3 hours
at now +180 minutes
at 17:30 05.08.13
at 17:30 05/08/13
使用ctrl+d提交任务
``` ```

@ -43,6 +43,7 @@ grep "model name" /proc/cpuinfo | uniq | cut -f2 -d : # 显示CPU信息;-f截
cut -f2 --complement test.txt # --complement选项提取指定字段之外的列打印除了第二列之外的列 cut -f2 --complement test.txt # --complement选项提取指定字段之外的列打印除了第二列之外的列
cut -f2 -d";" test2.txt # 使用-d选项指定字段分隔符 cut -f2 -d";" test2.txt # 使用-d选项指定字段分隔符
pip3 list -o --format columns | cut -d ' ' -f1 | xargs -n1 pip install -U # 一次性升级所有pip包 pip3 list -o --format columns | cut -d ' ' -f1 | xargs -n1 pip install -U # 一次性升级所有pip包
ls /etc/rc3.d/S* | cut -c 15- # 显示运行级别为3开启的服务
### 指定字段的字符或者字节范围 ### 指定字段的字符或者字节范围

@ -114,8 +114,11 @@ dd if=/dev/hda1 of=~/partition1.img # 备份分区
dd if=/dev/cdrom of=tgsservice.iso bs=2048 # 备份CDROM dd if=/dev/cdrom of=tgsservice.iso bs=2048 # 备份CDROM
dd bs=1M if=/dev/sda | gzip | ssh user@remote 'dd of=sda.gz' # 将硬盘sda压缩并备份到远程机器上 dd bs=1M if=/dev/sda | gzip | ssh user@remote 'dd of=sda.gz' # 将硬盘sda压缩并备份到远程机器上
dd bs=1 seek=2TB if=/dev/null of=ext4.test # 建立一个大的测试文件(不占用空间) dd bs=1 seek=2TB if=/dev/null of=ext4.test # 建立一个大的测试文件(不占用空间)
time dd if=/dev/zero bs=1024 count=1000000 of=/1Gb.file # 测试所在磁盘的写入速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null # 测试磁盘的读取速度
# 确定硬盘的最佳块大小 # 确定硬盘的最佳块大小
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.filedd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.filedd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.filedd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.filedd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.filedd \
if=/dev/zero bs=4096 count=250000 of=/root/1Gb.filedd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
``` ```

@ -116,10 +116,11 @@ Usage: dmidecode [OPTIONS]
```bash ```bash
dmidecode -t 1 # 查看服务器信息 dmidecode -t 1 # 查看服务器信息
dmidecode -s system-product-name # 查看硬件制造商
dmidecode | grep 'Product Name' # 查看服务器型号 dmidecode | grep 'Product Name' # 查看服务器型号
dmidecode -s system-serial-number # 查看系统序列号
dmidecode | grep 'Serial Number' # 查看主板的序列号 dmidecode | grep 'Serial Number' # 查看主板的序列号
dmidecode -t 2 # 查看主板信息 dmidecode -t 2 # 查看主板信息
dmidecode -s system-serial-number # 查看系统序列号
dmidecode -t memory # 查看内存信息 dmidecode -t memory # 查看内存信息
dmidecode -t 11 # 查看OEM信息 dmidecode -t 11 # 查看OEM信息
dmidecode -t 17 # 查看内存条数 dmidecode -t 17 # 查看内存条数

@ -29,6 +29,8 @@
```bash ```bash
du -sh * | sort -k1,1rh | head -n 10 # 当前目录下所占空间倒序排序前十个 du -sh * | sort -k1,1rh | head -n 10 # 当前目录下所占空间倒序排序前十个
# 统计目录下文件的大小按M打印显示
du $1 --max-depth=1 | sort -n|awk '{printf "%7.2fM ----> %s\n",$1/1024,$2}'|sed 's:/.*/\([^/]\{1,\}\)$:\1:g'
``` ```

@ -1,45 +1,22 @@
e2label # e2label
===
设置第二扩展文件系统的卷标
## 说明 ## 说明
**e2label命令** 用来设置第二扩展文件系统的卷标。 **e2label命令** 用来修改ext2/ext3/ext4文件系统的卷标
### 语法
```
e2label(参数)
```
### 参数
* 文件系统:指定文件系统所对应的设备文件名; ## 选项
* 新卷标:为文件系统指定新卷标。
### 实例 ```markdown
e2label device [ new-label ]
许多用了多年Linux的人可能也没有用过e2label命令。但是这个命令相当有效。在介绍它之前,我们先看看`/etc/fstab文`件: 若new-label可选参数未指定则只是查看对应设备的卷标指定的卷标最多可以包含16个字符 如果new-label的长度超过16个字符
则e2label将截断它并打印一个警告信息
```
label=//ext3 defaults 1 1
/dev/hda7 /usr ext3 defaults 1 1
``` ```
第二行的意思很容易懂,就是把`/dev/hda7` mount到`/usr`上。第一行没有指明分区意思是把label(卷标)为/ 的分区mount到/上。这样写的好处在于即使如果把硬盘从主板上的ide0(hda) 换到ide2(hdc)上系统仍然可以自动挂载正确的分区。通常Linux安装的时候已经自动指定了卷标。如果是手动增加的新分区可以用下边的命令为 其指定卷标: ## 实例
``` ```bash
e2label /dev/hdax /new e2lable /dev/sdb1 # 查看分区的卷标
mkdir /new e2lable /dev/sdb1 network # 设置分区的卷标
```
然后在`/etc/fstab`里加入:
```
label=/new /new ext3 defaults 1 1
``` ```
下次重新起动机器的时候,就会把卷标为`/new`的分区挂接到`/new`上。

@ -34,6 +34,16 @@ echo LONG-OPTION
```bash ```bash
echo "I live in `locale territory`" # 从locale数据库中展开信息 echo "I live in `locale territory`" # 从locale数据库中展开信息
echo "$((0x2dec))" # 十六进制转十进制 echo "$((0x2dec))" # 十六进制转十进制
for i in {0..255}; do echo -e "\e[38;05;${i}m${i}"; done | column -c 80 -s ' '; echo -e "\e[m" # 输出256中全部色彩
# 获取8位随机字符串
echo $RANDOM | md5sum | cut -c 1-8 # 方法一
openssl rand -base64 4 # 方法二
cat /proc/sys/kernel/random/uuid | cut -c 1-8 # 方法三
# 获取8位随机数字
echo $RANDOM | cksum | cut -c 1-8 # 方法一
openssl rand -base64 4 | cksum | cut -c 1-8 # 方法二
# 用echo命令打印带有色彩的文字 # 用echo命令打印带有色彩的文字
## 文字色:# 颜色码:重置=0黑色=30红色=31绿色=32黄色=33蓝色=34洋红=35青色=36白色=37 ## 文字色:# 颜色码:重置=0黑色=30红色=31绿色=32黄色=33蓝色=34洋红=35青色=36白色=37

@ -29,201 +29,4 @@ fdisk -s <分区> 给出分区大小(块数)
e2fsck -f -y -v -C 0 '/dev/sdb2' e2fsck -f -y -v -C 0 '/dev/sdb2'
resize2fs -p '/dev/sdb2' 15171584k resize2fs -p '/dev/sdb2' 15171584k
mkfs.ext4 -F -O ^64bit -L 'data' '/dev/sdb3' mkfs.ext4 -F -O ^64bit -L 'data' '/dev/sdb3'
# 新建分区及目录详细步骤:
: << comment
首先选择要进行操作的磁盘:
fdisk /dev/sdb
输入`m`列出可以执行的命令:
command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
输入`p`列出磁盘目前的分区情况:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 1 8001 8e Linux LVM
/dev/sdb2 2 26 200812+ 83 Linux
输入`d`然后选择分区,删除现有分区:
Command (m for help): d
Partition number (1-4): 1
Command (m for help): d
Selected partition 2
查看分区情况,确认分区已经删除:
Command (m for help): print
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Command (m for help):
输入`n`建立新的磁盘分区,首先建立两个主磁盘分区:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p //建立主分区
Partition number (1-4): 1 //分区号
First cylinder (1-391, default 1): //分区起始位置
Using default value 1
last cylinder or +size or +sizeM or +sizeK (1-391, default 391): 100 //分区结束位置,单位为扇区
Command (m for help): n //再建立一个分区
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2 //分区号为2
First cylinder (101-391, default 101):
Using default value 101
Last cylinder or +size or +sizeM or +sizeK (101-391, default 391): +200M //分区结束位置单位为M
确认分区建立成功:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 125 200812+ 83 Linux
再建立一个逻辑分区:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e //选择扩展分区
Partition number (1-4): 3
First cylinder (126-391, default 126):
Using default value 126
Last cylinder or +size or +sizeM or +sizeK (126-391, default 391):
Using default value 391
确认扩展分区建立成功:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 125 200812+ 83 Linux
/dev/sdb3 126 391 2136645 5 Extended
在扩展分区上建立两个逻辑分区:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l //选择逻辑分区
First cylinder (126-391, default 126):
Using default value 126
Last cylinder or +size or +sizeM or +sizeK (126-391, default 391): +400M
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (176-391, default 176):
Using default value 176
Last cylinder or +size or +sizeM or +sizeK (176-391, default 391):
Using default value 391
确认逻辑分区建立成功:
Command (m for help): p
Disk /dev/sdb: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 100 803218+ 83 Linux
/dev/sdb2 101 125 200812+ 83 Linux
/dev/sdb3 126 391 2136645 5 Extended
/dev/sdb5 126 175 401593+ 83 Linux
/dev/sdb6 176 391 1734988+ 83 Linux
Command (m for help):
从上面的结果我们可以看到在硬盘sdb我们建立了2个主分区sdb1sdb21个扩展分区sdb32个逻辑分区sdb5sdb6
注意主分区和扩展分区的磁盘号位1-4也就是说最多有4个主分区或者扩展分区逻辑分区开始的磁盘号为5因此在这个实验中试没有sdb4的。
最后对分区操作进行写入保存:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# 建立好分区之后我们还需要对分区进行格式化才能在系统中使用磁盘
mkfs.ext4 /dev/sdb1 # 在sdb1上建立ext4分区
# 建立两个目录`/oracle`和`/web`,将新建好的两个分区挂载到系统
mkdir /oracle
mkdir /web
mount /dev/sdb1 /oracle
mount /dev/sdb6 /web
如果需要每次开机自动挂载则需要修改`/etc/fstab`文件,加入两行配置:
vim /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
/dev/sdb1 /oracle ext4 defaults 0 0
/dev/sdb6 /web ext4 defaults 0 0
comment
``` ```

@ -115,6 +115,10 @@ path find命令所查找的目录路径。例如用.来表示当前目录,
## 实例 ## 实例
```bash ```bash
find / -name *.jpg -exec wc -c {} \;|awk '{print $1}'|awk '{a+=$1}END{print a}' # 统计一下服务器下面所有的jpg的文件的大小
find ./ -type f -print | wc -l # 统计一个目录中的全部文件数
find ./ -type d -print | wc -l # 统计一个目录中的全部子目录数
# 查找指定文件并执行删除操作 # 查找指定文件并执行删除操作
find . -name "文件名" | xargs rm -rf find . -name "文件名" | xargs rm -rf
find . -name "文件名" -exec rm -f {}\; find . -name "文件名" -exec rm -f {}\;
@ -137,11 +141,13 @@ find . -regex ".*\(\.txt\|\.pdf\)$" -print # 基于正则表达式匹配文件
find . -iregex ".*\(\.txt\|\.pdf\)$" -print # 基于正则表达式匹配文件路径,但忽略大小写 find . -iregex ".*\(\.txt\|\.pdf\)$" -print # 基于正则表达式匹配文件路径,但忽略大小写
find . -name "[A-Z]*" -print # 查找当前目录及子目录中文件名以一个大写字母开头的文件 find . -name "[A-Z]*" -print # 查找当前目录及子目录中文件名以一个大写字母开头的文件
# 统计var目录下文件以M为大小,以列表形式列出来
find /var -type f | xargs ls -s | sort -rn | awk '{size=$1/1024; printf("%dMb %s\n", size,$2);}' | head
``` ```
```bash ### 通过文件特征查找
# 通过文件特征查找
```bash
: << comment : << comment
常用的find命令的控制选项及其用法 常用的find命令的控制选项及其用法
选项 用途描述 选项 用途描述
@ -169,8 +175,9 @@ comment
``` ```
### 根据-type文件类型进行搜索
```bash ```bash
# 根据-type文件类型进行搜索
: << comment : << comment
类型参数列表: 类型参数列表:
@ -186,24 +193,25 @@ comment
find . -maxdepth 3 -type f # 基于目录深度搜索,向下最大深度限制为3 find . -maxdepth 3 -type f # 基于目录深度搜索,向下最大深度限制为3
find . -mindepth 2 -type f # 搜索出深度距离当前目录至少2个子目录的所有文件 find . -mindepth 2 -type f # 搜索出深度距离当前目录至少2个子目录的所有文件
find .-type f -user root -exec chown tom {} \; # 找出当前目录下所有root的文件并把所有权更改为用户tom find .-type f -user root -exec chown tom {} \; # 找出当前目录下所有root的文件并把所有权更改为用户tom
find . -type f -mtime +30 -name "*.log" -exec cp {} old \; # 将30天前的log文件移动到old目录中
find . -type f -name "*.txt" -delete # 删除当前目录下所有.txt文件 find . -type f -name "*.txt" -delete # 删除当前目录下所有.txt文件
find . -type f -name "*.txt" -exec cat {} \;> all.txt # 查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 find . -type f -name "*.txt" -exec cat {} \;> all.txt # 查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; # 找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来 find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; # 找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
find . -type f -name "*" | xargs grep "test" # 当前目录搜索包含test内容的文件 find . -type f -name "*" | xargs grep "test" # 当前目录搜索包含test内容的文件
find . -type f -mmin -10 # 搜索当前目录中所有过去10分钟中更新过的普通文件。如果不加-type f参数则搜索普通文件+特殊文件+目录 find . -type f -mmin -10 # 搜索当前目录中所有过去10分钟中更新过的普通文件。如果不加-type f参数则搜索普通文件+特殊文件+目录
``` ```
### 根据文件时间戳进行搜索
```bash ```bash
# 根据文件时间戳进行搜索
: << comment : << comment
find . -type f 时间戳,UNIX/Linux文件系统每个文件都有三种时间戳 find . -type f 时间戳,UNIX/Linux文件系统每个文件都有三种时间戳
精确到分钟的用amin,mmin,cmin精确到天的用atime,mtime,ctime 精确到分钟的用amin,mmin,cmin精确到天的用atime,mtime,ctime
-mtime -n +n -n表示文件更改时间距现在n天以内+n表示文件更改时间距现在n天以前 -mtime -n +n -n表示文件更改时间距现在n天以内+n表示文件更改时间距现在n天以前
* **访问时间** -atime/天,-amin/分钟):用户最近一次访问时间。 * atime:访问时间(-atime/天,-amin/分钟)用户最近一次访问时间。当备份实用程序或脚本已读取文件以及用户已读取文件时atime也会更改
* **修改时间** -mtime/天,-mmin/分钟):文件最后一次修改时间。 * mtime:修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。文件系统备份会随时更改,而原始设备备份不会更改。要实施增量或差异备份很重要
* **变化时间** -ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。 * 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
comment comment
find . -type f -atime -7 # 搜索最近七天内被访问过的所有文件 find . -type f -atime -7 # 搜索最近七天内被访问过的所有文件
@ -214,6 +222,7 @@ find . -type f -ctime -1 # 查找在24小时内状态改变的文件
find . -type f -amin +10 # 搜索访问时间超过10分钟的所有文件 find . -type f -amin +10 # 搜索访问时间超过10分钟的所有文件
find . -type f -mmin -5 # 查找在5分钟内修改过的文件 find . -type f -mmin -5 # 查找在5分钟内修改过的文件
find . -type f -newer file.log # 找出比file.log修改时间更长的所有文件 find . -type f -newer file.log # 找出比file.log修改时间更长的所有文件
find . -type f -mtime +30 -name "*.log" -exec cp {} old \; # 将30天前的log文件移动到old目录中
find . -newer file1 ! -newer file2 -exec ls -l {} \; # 查找更改时间比文件file1新但比file2旧的文件 find . -newer file1 ! -newer file2 -exec ls -l {} \; # 查找更改时间比文件file1新但比file2旧的文件
# 查找当前目录更改时间一天以内的文件并压缩 # 查找当前目录更改时间一天以内的文件并压缩
@ -221,11 +230,11 @@ find . -mtime -1 -type f -print0 | xargs -0 tar rvf "archive.tar"
find . -mtime -1 -type f -exec tar rvf "archive.tar" '{}' \; find . -mtime -1 -type f -exec tar rvf "archive.tar" '{}' \;
``` ```
```bash ### 根据文件大小-size进行匹配
# 根据文件大小-size进行匹配
find . -type f -size 文件大小单元
```bash
: << comment : << comment
find . -type f -size 文件大小单元
文件大小单元: 文件大小单元:
* **b** —— 块512字节 * **b** —— 块512字节
@ -237,14 +246,15 @@ find . -type f -size 文件大小单元
comment comment
find . -empty # 要列出所有空文件 find . -empty # 要列出所有空文件
find . -type f -size 0 # 搜索大小0字节的文件
find . -type f -size +10k # 搜索大于10KB的文件 find . -type f -size +10k # 搜索大于10KB的文件
find . -type f -size -10k # 搜索小于10KB的文件 find . -type f -size -10k # 搜索小于10KB的文件
find . -type f -size 10k # 搜索等于10KB的文件 find . -type f -size 10k # 搜索等于10KB的文件
``` ```
```bash ### 根据文件权限/所有权进行匹配
# 根据文件权限/所有权进行匹配
```bash
-perm mode:文件许可正好符合mode -perm mode:文件许可正好符合mode
-perm +mode:文件许可部分符合mode -perm +mode:文件许可部分符合mode
-perm -mode: 文件许可完全符合mode -perm -mode: 文件许可完全符合mode
@ -270,6 +280,7 @@ find . -perm -g+w,u+w
# 找出设置了SET位的权限的文件,-perm +6000表示不检查基本权限,第一种是find命令执行完才能看到结果第二种没找到一条就立即显示 # 找出设置了SET位的权限的文件,-perm +6000表示不检查基本权限,第一种是find命令执行完才能看到结果第二种没找到一条就立即显示
ls -lh $(find / -type f -perm +6000) ls -lh $(find / -type f -perm +6000)
find / -type f -perm +6000 -exec ls -lh {} \; find / -type f -perm +6000 -exec ls -lh {} \;
find . -type f -user tom # 找出当前目录用户tom拥有的所有文件 find . -type f -user tom # 找出当前目录用户tom拥有的所有文件

@ -1,45 +1,23 @@
finger # finger
===
用于查找并显示用户信息
## 说明 ## 说明
**finger命令** 用于查找并显示用户信息。包括本地与远端主机的用户皆可帐号名称没有大小写的差别。单独执行finger指令它会显示本地主机现在所有的用户的登陆信息包括帐号名称真实姓名登入终端机闲置时间登入时间以及地址和电话。 **finger命令** 用于查找并显示用户信息。包括本地与远端主机的用户皆可帐号名称没有大小写的差别。单独执行finger指令它会显示本地主机
现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话
### 语法
``` ## 选项
finger(选项)(参数)
```
```markdown
```
-l列出该用户的帐号名称真实姓名用户专属目录登入所用的Shell登入时间转信地址电子邮件状态还有计划文件和方案文件内容 -l列出该用户的帐号名称真实姓名用户专属目录登入所用的Shell登入时间转信地址电子邮件状态还有计划文件和方案文件内容
-m排除查找用户的真实姓名 -m排除查找用户的真实姓名
-s列出该用户的帐号名称真实姓名登入终端机闲置时间登入时间以及地址和电话 -s列出该用户的帐号名称真实姓名登入终端机闲置时间登入时间以及地址和电话
-p列出该用户的帐号名称真实姓名用户专属目录登入所用的Shell登入时间转信地址电子邮件状态但不显示该用户的计划文件和方案文件内容。 -p列出该用户的帐号名称真实姓名用户专属目录登入所用的Shell登入时间转信地址电子邮件状态但不显示该用户的计划文件和方案文件内容
```
不指定finger的选项如果提供操作者的话缺省设为`-l`输出风格,否则为`-s`风格注意在两种格式中如果信息不足都有一些域可能丢失如果没有指定参数finger会为当前登录的每个用户打印一个条目。 不指定finger的选项如果提供操作者的话缺省设为`-l`输出风格,否则为`-s`风格,注意在两种格式中,如果信息不足,都有一些域可能丢失,如果没有
指定参数finger会为当前登录的每个用户打印一个条目。
### 参数
用户名:指定要查询信息的用户。
### 实例
在计算机上使用finger
```
[root@localhost root]# finger
login Name Tty Idle Login time Office Office Phone
root root tty1 2 Dec 18 13
root root pts/0 1 Dec 18 13
root root *pts/1 Dec 18 13
``` ```
如果要查询远程机上的用户信息,需要在用户名后面接`@主机名`,采用`用户名@主机名`的格式不过要查询的网络主机需要运行finger守护进程的支持。 ## 实例

@ -36,7 +36,7 @@ free -t # 以总和的形式显示内存的使用信息
free -s 10 # 周期性的查询内存使用信息每10s 执行一次命令 free -s 10 # 周期性的查询内存使用信息每10s 执行一次命令
``` ```
## 输出解释: ## free输出解释:
```markdown ```markdown
total 安装的总内存 (MemTotal and SwapTotal in /proc/meminfo) total 安装的总内存 (MemTotal and SwapTotal in /proc/meminfo)

@ -1,4 +1,4 @@
fsck # **fsck**
=== ===
检查并且试图修复文件系统中的错误 检查并且试图修复文件系统中的错误

@ -1,21 +1,14 @@
ifconfig # **ifconfig**
===
配置和显示Linux系统网卡的网络参数
## 说明 ## 说明
**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息在网卡重启后机器重启后配置就不存在。要想将上述的配置信息永远的存的电脑里那就要修改网卡的配置文件了。 **ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息在网卡重启后机器重启后配置就不存在。
要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件
### 语法
```
ifconfig(参数)
```
### 参数 ## 选项
``` ```markdown
# 参数
add<地址>设置网络设备IPv6的ip地址 add<地址>设置网络设备IPv6的ip地址
del<地址>删除网络设备IPv6的IP地址 del<地址>删除网络设备IPv6的IP地址
down关闭指定的网络设备 down关闭指定的网络设备
@ -36,31 +29,12 @@ IP地址指定网络设备的IP地址
网络设备:指定网络设备的名称。 网络设备:指定网络设备的名称。
``` ```
### 实例
**显示网络设备信息(激活状态的):**
```
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3607197869 (3.3 GiB) TX bytes:6115042 (5.8 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB)
```
说明: ## 实例
```bash
ifconfig # 显示网络设备信息(激活状态的)
: << comment
**eth0** 表示第一块网卡,其中`HWaddr`表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址是`00:16:3E:00:1E:51`。 **eth0** 表示第一块网卡,其中`HWaddr`表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址是`00:16:3E:00:1E:51`。
**inet addr** 用来表示网卡的IP地址此网卡的IP地址是`10.160.7.81`,广播地址`Bcast:10.160.15.255`,掩码地址`Mask:255.255.240.0`。 **inet addr** 用来表示网卡的IP地址此网卡的IP地址是`10.160.7.81`,广播地址`Bcast:10.160.15.255`,掩码地址`Mask:255.255.240.0`。
@ -72,56 +46,28 @@ lo Link encap:Local Loopback
* 第三行UP代表网卡开启状态RUNNING代表网卡的网线被接上MULTICAST支持组播MTU:1500最大传输单元1500字节。 * 第三行UP代表网卡开启状态RUNNING代表网卡的网线被接上MULTICAST支持组播MTU:1500最大传输单元1500字节。
* 第四、五行:接收、发送数据包情况统计。 * 第四、五行:接收、发送数据包情况统计。
* 第七行:接收、发送数据字节数统计信息。 * 第七行:接收、发送数据字节数统计信息。
comment
# 获取IP地址
ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -c 6-
ifconfig eth0 | sed -n '2p' | awk '{print $2}' | cut -c 6-30
ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'
ifconfig -a | perl -ne 'if ( m/^\s*inet (?:addr:)?([\d.]+).*?cast/ ) { print qq($1\n); exit 0; }' # perl获取方法
ifconfig eth0 up # 启动指定网卡
ifconfig eth0 down # 关闭指定网卡
ifconfig eth0 add 33ffe:3240:800:1005::2/64 # 为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 # 为网卡eth0删除IPv6地址
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE # 用ifconfig修改MAC地址
ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255 # 配置IP地址
ifconfig eth0 arp #开启网卡eth0 的arp协议
ifconfig eth0 -arp #关闭网卡eth0 的arp协议
ifconfig eth0 mtu 1500 # 设置能通过的最大数据包大小为 1500 bytes
ifconfig # 处于激活状态的网络接口
ifconfig -a # 所有配置的网络接口,不论其是否激活
ifconfig eth0 # 显示eth0的网卡信息
**启动关闭指定网卡:**
```
ifconfig eth0 up
ifconfig eth0 down
```
`ifconfig eth0 up`为启动网卡eth0`ifconfig eth0 down`为关闭网卡eth0。ssh登陆linux服务器操作要小心关闭了就不能开启了除非你有多网卡。
**为网卡配置和删除IPv6地址**
```
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址
```
**用ifconfig修改MAC地址**
```
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
```
**配置IP地址**
```
[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
```
**启用和关闭arp协议**
```
ifconfig eth0 arp #开启网卡eth0 的arp协议
ifconfig eth0 -arp #关闭网卡eth0 的arp协议
```
**设置最大传输单元:**
```
ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为 1500 bytes
```
**其它实例**
```bash
ifconfig #处于激活状态的网络接口
ifconfig -a #所有配置的网络接口,不论其是否激活
ifconfig eth0 #显示eth0的网卡信息
``` ```

@ -1,74 +1,85 @@
ln # **ln**
===
用来为文件创件连接
## 说明 ## 说明
**ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项 **ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的 注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的
软连接特点: 软连接特点:
1.软连接的权限都是rwxrwxrwx,文件类型是l时间值和原文件的时间值不同
2.类似于windows中的快捷方式操作
3.源文件和链接文件同步更新;
4支持跨文件系统创建链接文件
### 语法
* 软连接的权限都是rwxrwxrwx,文件类型是l时间值和原文件的时间值不同
* 类似于windows中的快捷方式操作
* 源文件和链接文件同步更新
* 支持跨文件系统创建链接文件
## 选项
```markdown
用法ln [选项] [-T] 目标 链接名 (第一种格式)
 ln [选项] 目标 (第二种格式)
 ln [选项] 目标 目录 (第三种格式)
 ln [选项] -t 目录 目标 (第四种格式)
在第一种形式中创建一个名为LINK_NAME的TARGET链接
在第二形式中在当前目录中创建指向TARGET的链接
在第3和第4表格中创建指向DIRECTORY的每个TARGET的链接
默认情况下,创建硬链接,使用--symbolic创建符号链接
默认情况下,每个目的地(新链接的名称)应该不存在
创建硬链接时每个TARGET必须存在。 符号链接可以包含任意文本; 如果以后解析,则会相对于其父目录解释相对链接
Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] 为每个已存在的目标文件创建备份文件
-b 类似--backup但不接受任何参数
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive 删除已存在文件之前先询问用户
-L, --logical dereference TARGETs that are symbolic links
-n, --no-dereference 如果符号链接是一个目录也将其链接名称视作一个普通文件
-P, --physical make hard links directly to symbolic links
-r, --relative create symbolic links relative to link location
-s, --symbolic 用符号链接取代硬链接
-S, --suffix=SUFFIX 覆盖通常的备份后缀(预设是~)
-t, --target-directory=DIRECTORY specify the DIRECTORY in which to create
the links
-T, --no-target-directory treat LINK_NAME as a normal file always
-v, --verbose print name of each linked file
默认备份后缀是~,除非使用--suffix或SIMPLE_BACKUP_SUFFIX指定
可以通过--backup选项或通过VERSION_CONTROL环境变量来选择版本控制方法,这些是值:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件
目标文件:指定源文件的目标连接文件
``` ```
ln [选项]... [-T] 目标 链接名 (第一种格式)
 ln [选项]... 目标 (第二种格式)
 ln [选项]... 目标... 目录 (第三种格式)
 ln [选项]... -t 目录 目标... (第四种格式)
```
```
-b或--backup删除覆盖目标文件之前的备份
-d或-F或——directory建立目录的硬连接
-f或——force强行建立文件或目录的连接不论文件或目录是否存在
-i或——interactive覆盖既有文件之前先询问用户
-n或--no-dereference把符号连接的目的目录视为一般文件
-s或——symbolic对源文件建立符号连接而非硬连接
-S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它
-v或——verbose显示指令执行过程
-V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后备份文件的字尾会被加上一个备份字符串这个字符串不仅可用“-S”参数变更当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串;
--help在线帮助
--version显示版本信息。
```
### 参数
* 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;
* 目标文件:指定源文件的目标连接文件。
### 实例 ## 实例
```bash
: << comment
将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c 将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c
在执行ln命令之前目录/usr/liu中不存在a2.c文件。执行ln之后在/usr/liu目录中才有a2.c表明m2.c和a2.c链接起来
``` 注意二者在物理上是同一文件利用ls -l命令可以看到链接数的变化
cd /usr/mengqc comment
ln /mub1/m2.c /usr/liu/a2.c ln /mub1/m2.c /usr/liu/a2.c
```
在执行ln命令之前目录`/usr/liu`中不存在a2.c文件。执行ln之后在`/usr/liu`目录中才有a2.c这一项表明m2.c和a2.c链接起来注意二者在物理上是同一文件利用`ls -l`命令可以看到链接数的变化。
在目录`/usr/liu`下建立一个符号链接文件abc使它指向目录`/usr/mengqc/mub1` # 在目录/usr/liu下建立一个符号链接文件abc并指向目录/usr/mengqc/mub1,执行命令后/usr/mengqc/mub1代表的路径将存放在/usr/liu/abc文件中
```
ln -s /usr/mengqc/mub1 /usr/liu/abc ln -s /usr/mengqc/mub1 /usr/liu/abc
``` ```
执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。
## 扩展知识 ## 扩展知识
Linux具有为一个文件起多个名字的功能称为链接。被链接的文件可以存放在相同的目录下但是必须有不同的文件名而不用在硬盘上为同样的数据重复备份。另外被链接的文件也可以有相同的文件名但是存放在不同的目录下这样只要对一个目录下的该文件进行修改就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件我们可以给它们指定不同的存取权限以控制对信息的共享和增强安全性。 文件链接有两种形式,即硬链接和符号链接
文件链接有两种形式,即硬链接和符号链接。 Linux具有为一个文件起多个名字的功能称为链接。被链接的文件可以存放在相同的目录下但是必须不同的文件名而不用在硬盘上为同样的数据
重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录
下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性
### 硬链接 ### 硬链接
@ -78,43 +89,54 @@ Linux具有为一个文件起多个名字的功能称为链接。被链接的
3.硬链接是同步更新的; 3.硬链接是同步更新的;
4.硬链接不能跨文件系统,类似于跨分区....(实质上文件系统就是一个初始化后的分区,属于独立存储空间,同时在文件的逻辑结构上是隶属于根目录) 4.硬链接不能跨文件系统,类似于跨分区....(实质上文件系统就是一个初始化后的分区,属于独立存储空间,同时在文件的逻辑结构上是隶属于根目录)
建立硬链接时在另外的目录或本目录中增加目标文件的一个目录项这样一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。 建立硬链接时在另外的目录或本目录中增加目标文件的一个目录项这样一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都
建立了目录项
创建硬链接后己经存在的文件的I节点号Inode会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到无额外链接的文件的链接数为l。 创建硬链接后己经存在的文件的I节点号Inode会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到无额外链接
的文件的链接数为l
在默认情况下ln命令创建硬链接。ln命令会增加链接数rm命令会减少链接数。一个文件除非链接数为0否则不会从文件系统中被物理地删除 在默认情况下ln命令创建硬链接。ln命令会增加链接数rm命令会减少链接数。一个文件除非链接数为0否则不会从文件系统中被物理地删除
对硬链接有如下限制: 对硬链接有如下限制:
* 不能对目录文件做硬链接 * 不能对目录文件做硬链接
* 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中 * 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中
### 软,硬链接不同点: ### 软,硬链接不同点:
1.如果源文件被删除的话,软连接文件只是一个符号链接,因此软连接文件不可访问。硬链接文件是可以访问的,相当于源文件的一个拷贝,大小内容是一样的,同步更新。
如果源文件被删除的话,软连接文件只是一个符号链接,因此软连接文件不可访问。硬链接文件是可以访问的,相当于源文件的一个拷贝,
大小内容是一样的,同步更新
为了更好的理解两者的不同点,下面来分析一下软硬链接的原理: 为了更好的理解两者的不同点,下面来分析一下软硬链接的原理:
在Linux系统中最核心的部分是内核其功能是负责处理几乎所有的事情但处理过程中不能识别字母只能识别数字因此在处理的过程中要有一个数字标识来标记我们称之为i节点uid ,gid ,pid 等数字标识每个文件都有一个i节点如果没有的话就没有办法访问目标文件 在Linux系统中最核心的部分是内核其功能是负责处理几乎所有的事情但处理过程中不能识别字母只能识别数字因此在处理的过程中要有
一个数字标识来标记我们称之为i节点uid ,gid ,pid 等数字标识每个文件都有一个i节点如果没有的话就没有办法访问目标文件
硬链接和源文件有相同的i节点--inode映射到了两个文件删除一个就减掉一个映射还有另一条映射因此不影响对文件的访问。内核查看inode都是相同的数字同步在两个文件中写入而且并不知道那个是源文件那个是硬链接文件这就是硬链接为什么会同步更新 硬链接和源文件有相同的i节点--inode映射到了两个文件删除一个就减掉一个映射还有另一条映射因此不影响对文件的访问。内核查看inode
都是相同的数字,同步在两个文件中写入,而且并不知道那个是源文件那个是硬链接文件,这就是硬链接为什么会同步更新
切记i节点是内核调用的数字标识; 切记inode是内核调用的数字标识
### 符号链接 ### 符号链接
符号链接也称为软链接是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上它只是一个文本文件如图中的abc文件其中包含它提供链接的另一个文件的路径名如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时将沿着链接方向前进来访问实际的文件。 符号链接也称为软链接是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上它只是一个文本文件如图中的abc文件
其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于
符号链接时,将沿着链接方向前进来访问实际的文件
符号连接与硬链接不同的是符号链接确实是一个新文件当然它具有不同的I节点号而硬链接并没有建立新文件。 符号连接与硬链接不同的是符号链接确实是一个新文件当然它具有不同的I节点号而硬链接并没有建立新文件
符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接 符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接
用`ln -s`命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。 用`ln -s`命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的
工作路径与要创建的符号链接文件所在路径不同,就不能进行链接
符号链接保持了链接与源文件或目录之间的区别: 符号链接保持了链接与源文件或目录之间的区别:
* 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。 * 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据
* 在目录长列表中符号链接作为一种特殊的文件类型显示出来其第一个字母是l。 * 在目录长列表中符号链接作为一种特殊的文件类型显示出来其第一个字母是l
* 符号链接的大小是其链接文件的路径名中的字节数。 * 符号链接的大小是其链接文件的路径名中的字节数
* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。 * 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如:
lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file其中表示“文件大小”的数字“14”恰好说明源文件名original_file
由14个字符构成

@ -57,6 +57,8 @@ ls -al # 列出所有文件(包括隐藏)的详细信息
ls ??R* # 列出任意两个字符开始,接着跟R,后面任何字符的文件 ls ??R* # 列出任意两个字符开始,接着跟R,后面任何字符的文件
ls log.[0-9]* # 匹配log+任何数字+任意字符的文件 ls log.[0-9]* # 匹配log+任何数字+任意字符的文件
ls /usr/bin | pr -T9 -W$COLUMNS # 在当前终端宽度上以9列打印输出 ls /usr/bin | pr -T9 -W$COLUMNS # 在当前终端宽度上以9列打印输出
ls -l | awk '/^d/' | wc -l # 统计一个目录中的目录个数
ls -l | awk '/^-/' | wc -l # 统计一个目录中的文件个数
for i in `ls *test.log`;do mv $i `echo ${i//test/}`;done # 批量将*test.log文件重命名去掉test字符 for i in `ls *test.log`;do mv $i `echo ${i//test/}`;done # 批量将*test.log文件重命名去掉test字符
ls -lrt | awk '{print $9}'|xargs file|grep ELF| awk '{print $1}'|tr -d ':' # 查找当前目录所有二进制文件 ls -lrt | awk '{print $9}'|xargs file|grep ELF| awk '{print $1}'|tr -d ':' # 查找当前目录所有二进制文件

@ -1,75 +1,43 @@
lscpu # lscpu
===
显示有关CPU架构的信息
## 说明 ## 说明
**lscpu命令** 是显示有关CPU架构的信息。 **lscpu命令** 是显示有关CPU架构的信息
## 选项
```markdown
-a, --all 同时打印在线和离线 CPU (-e 选项默认值)
-b, --online 只打印在线 CPU (-p 选项默认值)
-c, --offline 只打印离线 CPU
-e, --extended[=<列表>] 打印扩展的可读格式
-p, --parse[=<列表>] 打印可解析格式
-s, --sysroot <目录> 以指定目录作为系统根目录
-x, --hex 打印十六进制掩码而非 CPU 列表
-y, --physical print physical instead of logical IDs
可用的列:
CPU 逻辑 CPU 数量
CORE 逻辑核心数量
SOCKET 逻辑(CPU)座数量
NODE 逻辑 NUMA 节点数量
BOOK 逻辑 book 数
DRAWER logical drawer number
CACHE shows how caches are shared between CPUs
POLARIZATION CPU dispatching mode on virtual hardware
ADDRESS physical address of a CPU
CONFIGURED shows if the hypervisor has allocated the CPU
ONLINE shows if Linux currently makes use of the CPU
MAXMHZ shows the maximum MHz of the CPU
MINMHZ shows the minimum MHz of the CPU
### 语法
```
lscpu [选项]
``` ```
## 实例
```
-a, --all 打印在线和离线CPU默认为-e
-b, --online 仅打印在线CPU-p的默认值
-c, --offline 打印离线CPU
-e, --extended[=<list>] 打印出一个扩展的可读格式
-p, --parse[=<list>] 打印出可解析的格式
-s, --sysroot <dir> 将指定的目录用作系统根目录
-x, --hex 打印十六进制掩码而不是CPU列表
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
```
### 参数
```bash ```bash
可用列: lscpu
CPU 逻辑CPU编号
CORE 逻辑核心号码
SOCKET 逻辑套接字号
NODE 逻辑NUMA节点号
BOOK 逻辑书号
CACHE 显示了如何在CPU之间共享高速缓存
POLARIZATION 虚拟硬件上的CPU调度模式
ADDRESS CPU的物理地址
CONFIGURED 显示管理程序是否分配了CPU
ONLINE 显示Linux是否正在使用CPU
```
### 例子
```bash
[root@localhost ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 30
Model name: Intel(R) Xeon(R) CPU X3430 @ 2.40GHz
Stepping: 5
CPU MHz: 2394.055
BogoMIPS: 4788.11
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-3
``` ```

@ -127,4 +127,6 @@ lsof输出各列信息的意义如下:
```bash ```bash
lsof -i # 列出所有的网络连接或端口 lsof -i # 列出所有的网络连接或端口
lsof ~ # 查看打开用户目录的进程 lsof ~ # 查看打开用户目录的进程
lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh # 杀掉80端口相关的进程
``` ```

@ -61,6 +61,7 @@ PCI access options:
```bash ```bash
lspci -tv # 显示PCI信息 lspci -tv # 显示PCI信息
lspci | grep Ethernet # 显示网卡信息 lspci | grep Ethernet # 显示网卡信息
lspci | grep VGA
``` ```

@ -1,89 +1,35 @@
md5sum # **md5sum**
===
计算和校验文件报文摘要的工具程序
## 说明 ## 说明
**md5sum命令** 采用MD5报文摘要算法128位计算和检查文件的校验和。一般来说安装了Linux后就会有md5sum这个工具直接在命令行终端直接运行。 **md5sum命令** 采用MD5报文摘要算法128位显示和检查文件的校验和。直接在命令行终端直接运行
MD5算法常常被用来验证网络文件传输的完整性防止文件被人篡改。MD5 全称是报文摘要算法Message-Digest Algorithm 5此算法对任意长度的信息逐位进行计算产生一个二进制长度为128位十六进制长度就是32位的“指纹”或称“报文摘要”不同的文件产生相同的报文摘要的可能性是非常非常之小的。
### 语法
```
md5sum(选项)(参数)
```
```
-b二进制模式读取文件
-t或--text把输入的文件作为文本文件看待
-c从指定文件中读取MD5校验和并进行校验
--status验证成功时不输出任何信息
-w当校验不正确时给出警告信息。
```
### 参数
文件:指定保存着文件名和校验和的文本文件。
### 实例
**生成一个文件insert.sql的md5值**
```
[root@localhost ~]# md5sum insert.sql
bcda6cb5c704664f989703ac5a88f112 insert.sql
```
**检查文件testfile是否被修改过**
首先生成md5文件 MD5算法常常被用来验证网络文件传输的完整性防止文件被人篡改。MD5 全称是报文摘要算法Message-Digest Algorithm 5此算法对任意长度的
信息逐位进行计算产生一个二进制长度为128位十六进制长度就是32位的“指纹”或称“报文摘要”不同的文件产生相同的报文摘要极小可能性存在
``` ## 选项
md5sum testfile > testfile.md5
```
检查:
``` ```markdown
md5sum testfile -c testfile.md5 若没有文件选项,或者文件处为"-",则从标准输入读取。
```
如果文件没有变化,输出应该如下:
```
forsort: OK
```
此时md5sum命令返回0。 -b, --binary 以二进制模式读取
-c, --check 从文件中读取MD5 的校验值并予以检查
--tag create a BSD-style checksum
-t, --text 以纯文本模式读取(默认)[注意GNU系统上的二进制和文本模式选项没有区别]
如果文件发生了变化,输出应该如下: 以下四个选项对于验证校验和非常有用
--quiet don't print OK for each successfully verified file
--status don't output anything, status code shows success
--strict exit non-zero for improperly formatted checksum lines
-w, --warn warn about improperly formatted checksum lines
``` ```
forsort: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
```
此时md5sum命令返回非0。
这里,检查用的文件名随意。如果不想有任何输出,则`md5sum testfile --status -c testfile.md5`,这时候通过返回值来检测结果。 ## 实例
检测的时候如果检测文件非法则输出信息的选项: ```bash
md5sum insert.sql # 生成一个文件insert.sql的md5值
md5sum file -c file.md # 检查file是否被修改file.md包含file文件的原始md5值
``` ```
md5sum -w -c testfile.md5
```
输出之后,文件异常输出类似如下:
```
md5sum: testfile.md5: 1: improperly formatted MD5 checksum line
md5sum: testfile.md5: no properly formatted MD5 checksum lines found
```
这里testfile.md5只有一行信息但是我认为地给它多加了一个字符导致非法。如果md5文件正常那么`-w`有没有都一样。

@ -4,33 +4,30 @@
**nice命令** 用于以指定的进程调度优先级启动其他的程序。Crontab中用什么命令定义某个程序执行的优先级别 **nice命令** 用于以指定的进程调度优先级启动其他的程序。Crontab中用什么命令定义某个程序执行的优先级别
nice/renice进程执行优先级 ## 选项
概念进程优先级系统按进程优先级的不同分配CPU时间优先级高的进程会得到更多的CPU使用时间以提高速度缩短总的执行时间。 ```markdown
-n, --adjustment=N 指定进程的优先级(整数,默认是10
进程优先级范围:-20至19
最高等级:-20
最低等级19
系统管理员有权将进程优先级设置为-1至-20而普通用户只能设置0至19。进程运行的默认等级为0。用nice执行的进程其默认等级为10即nice <程序名>,不指定等级时)。
nice/renice 进程执行优先级
概念:进程优先级 系统按进程优先级的不同分配CPU时间优先级高的进程会得到更多的CPU使用时间以提高速度缩短总的执行时间
进程优先级范围 -20至19
最高等级 -20
最低等级 19
系统管理员有权将进程优先级设置为-1至-20而普通用户只能设置0至19。进程运行的默认等级为0。
用nice执行的进程其默认等级为10即nice <程序名>,不指定等级时)
```info
-n, --adjustment=N 指定进程的优先级(整数,默认是10
``` ```
## 实例 ## 实例
```sh ```bash
nice -19 tar zcf pack.tar.gz documents # 新建一个进程并设置优先级将当前目录下的documents目录打包但不希望tar占用太多CPU nice -19 tar zcf pack.tar.gz documents # 将当前目录下的documents目录打包但不希望tar占用太多CPU,-19中的“-”仅表示参数前缀
nice --19 tar zcf pack.tar.gz documents # 将当前目录下的documents目录打包并且赋予tar进程最高的优先级
方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了最低优先级不是19么那是因为这个“-19”中的“-”仅表示参数前缀所以如果希望将当前目录下的documents目录打包并且赋予tar进程最高的优先级
nice --19 tar zcf pack.tar.gz documents
如:(命令后加&表示以后台运行) : << comment
(命令后加&表示以后台运行)
vi & 优先等级0默认等级 vi & 优先等级0默认等级
nice vi & 优先等级10使用nice执行程序时的默认等级 nice vi & 优先等级10使用nice执行程序时的默认等级
nice -50 vi & 优先等级19-号表示选项等级50超过最低等级19因此系统以等级19执行 nice -50 vi & 优先等级19-号表示选项等级50超过最低等级19因此系统以等级19执行
@ -42,8 +39,9 @@ nice --18 vi & 优先等级-18
renice <等级> <PID> renice <等级> <PID>
注意:<等级>是参数,不是选项,没有前缀-号。 注意:<等级>是参数,不是选项,没有前缀-号。
调整指定用户的所有进程的等级 renice <等级> <用户名1> <用户名2> # 调整指定用户的所有进程的等级
renice <等级> <用户名1> <用户名2> ...
调整指定组的所有用户的所有进程的等级 renice <等级> -g <组名1> # 调整指定组的所有用户的所有进程的等级
renice <等级> -g <组名1> comment
```

@ -9,7 +9,7 @@ OpenSSL有两种运行模式交互模式和批处理模式
直接输入openssl回车进入交互模式输入带命令选项的openssl进入批处理模式 直接输入openssl回车进入交互模式输入带命令选项的openssl进入批处理模式
OpenSSL整个软件包大概可以分成三个主要的功能部分密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构也是围绕这三个功能部分进行规划 OpenSSL整个软件包大概可以分成三个主要的功能部分密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构也是围绕这三个功能部分进行规划
**对称加密算法** **对称加密算法**
@ -32,20 +32,70 @@ OpenSSL实现了5种信息摘要算法分别是MD2、MD5、MDC2、SHASHA1
密钥和证书管理是PKI的一个重要组成部分OpenSSL为之提供了丰富的功能支持多种标准 密钥和证书管理是PKI的一个重要组成部分OpenSSL为之提供了丰富的功能支持多种标准
首先OpenSSL实现了ASN.1的证书和密钥相关标准提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能使得密钥可以安全地进行存储和分发。  首先OpenSSL实现了ASN.1的证书和密钥相关标准提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。
OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的
编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能使得密钥可以安全地进行存储和分发
在此基础上OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库支持证书的管理功能包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。  在此基础上OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库支持证书的管理功能
包括证书密钥产生、请求产生、证书签发、吊销和验证等功能
事实上OpenSSL提供的CA应用程序就是一个小型的证书管理中心CA实现了证书签发的整个流程和证书管理的大部分机制 事实上OpenSSL提供的CA应用程序就是一个小型的证书管理中心CA实现了证书签发的整个流程和证书管理的大部分机制
## 实例 ## 实例
**1、消息摘要算法应用例子** ```bash
: << comment
key格式私有的密钥
csr格式证书签名请求证书请求文件含有公钥信息certificate signing request的缩写
crt格式证书文件certificate的缩写
pem格式用于导出导入证书时候的证书的格式有证书开头结尾的格式
crl格式证书吊销列表Certificate Revocation List的缩写
comment
# 制作并信任您自己的证书任何人都可以在没有CA帮助的情况下制作自己的证书。 唯一的区别是您自己制作的证书不会被其他任何人信任
# CA根证书的生成步骤:生成CA私钥.key-->生成CA证书请求.csr-->自签名得到根证书(.crtCA给自已颁发的证书
openssl genrsa -out ca.key 4096 # 生成ca私钥
openssl req -new -x509 -key ca.key -days 365 -out ca.crt # 生成ca根证书
# 用户证书的生成步骤:生成私钥(.key)-->生成证书请求(.csr)-->用ca根证书签名得到(.crt)
## 服务器端用户证书:
openssl genrsa -des3 -out server.key 4096 # 生成ca私钥
openssl req -new -key server.key -out server.csr # 生成csr,此处组织名称可以填写泛域名如:*.19950128.com
openssl x509 -req -days 365 -sha256 ca -keyfile ca.key -cert ca.crt -in server.csr -out server.crt
## 客户端用户证书(和服务端类似,目的是为了实现双向认证)
openssl genrsa -des3 -out client.key 4096
openssl req -new -key client.key -out client.csr
openssl x509 -req -days 365 -sha256 -keyfile ca.key ca -cert ca.crt -in client.csr -out client.crt
## 生成pem格式证书
cat client.crt client.key > client.pem
cat server.crt server.key > server.pem
: << comment
SSL证书的公共名称 (CN)。 该公共名称 (CN) 是使用该证书的系统的标准名称。 如果您使用的是动态 DNS那么 CN 应该具有通配符,
例如: *.api.com. 否则,使用网关集群中设置的主机名或 IP 地址
生成自己专用密钥和公用证书。回答问题并在出现提示时输入公共名称
comment
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
# 检查已创建的证书
openssl x509 -text -noout -in certificate.pem
openssl dhparam -out dhparams.pem -dsaparam 2048 # 生成dhparams.pem文件
# 一步生成crt和key
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 -days 3650\
-subj '/CN=*.19950128.com' -extensions EXT -config <( \
printf "[dn]\nCN=*.19950128.com\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:*.19950128.com\\
nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
```
用SHA1算法计算文件file.txt的哈西值输出到stdout ```bash
# 消息摘要算法应用例子
openssl dgst -sha1 file.txt # 用SHA1算法计算文件file.txt的哈西值输出到stdout
```
# openssl dgst -sha1 file.txt
``` ```
用SHA1算法计算文件file.txt的哈西值输出到文件digest.txt 用SHA1算法计算文件file.txt的哈西值输出到文件digest.txt

@ -88,23 +88,58 @@ Miscellaneous options:
## 实例 ## 实例
```bash ```bash
# 查看所有用户执行的进程的详细信息 ps -aux | sort -nk +3 | tail # 查看消耗CPU最多的十个进程
ps -aux ps -aux | sort -nk +4 | tail # 查看消耗内存最多的十个进程
ps -le ps -le
pstree | more # 进程树,非常直观的观察父子进程
ps -eo pid,args,psr # 查看进程在哪个CPU上运行
ps -p pid1,pid2 # 显示指定进程id的信息此例为pid1pid2进程的信息 ps -p pid1,pid2 # 显示指定进程id的信息此例为pid1pid2进程的信息
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps aux | sort -nk 3 # 按CPU 资源的使用量对进程进行排序
ps -eo pid,args --forest # 以树结构显示进程 ps -eo pid,args --forest # 以树结构显示进程
ps aux | sort -nk 3 # 按CPU 资源的使用量对进程进行排序
ps -eo pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d' # 以CPU占用率为序显示进程 ps -eo pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d' # 以CPU占用率为序显示进程
ps -eo "%C : %p : %z : %a" | sort -nr # 按CPU利用率从大到小排序
ps -e -orss=,args= | sort -rb -k1,1n | pr -TW$COLUMNS # 以内存使用量排序显示进程 ps -e -orss=,args= | sort -rb -k1,1n | pr -TW$COLUMNS # 以内存使用量排序显示进程
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps -eo "%C : %p : %z : %a" | sort -k5 -nr # 按内存占用从大到小排序
ps -eo "%C%p%z%a"|sort -k3 -nr # 进程按虚拟内存从大到小排列
ps -eo user,pid,size,pmem,vsize,command|sort -k4 -nr|more # 按实际使用内存百分比排序
ps -eo rss,pmem,pcpu,vsize,args | sort -k 1 -r -n | less # 按进程消耗内存多少排序
ps -auxww|awk '{print $5,$1,$11}'|sort -r|more # 按照内存使用量从大到小排序
ps -C nginx -L -o pid,tid,pcpu,state # 显示指定进程的所有线程信息 ps -C nginx -L -o pid,tid,pcpu,state # 显示指定进程的所有线程信息
ps -aux --sort pid # 可按照进程执行的时间PIDUID等对进程进行排序 ps -aux --sort pid # 可按照进程执行的时间PIDUID等对进程进行排序
ps -uU tangsir / ps -aux | grep tangsir # 查看系统中指定用户执行的进程 ps -uU tangsir / ps -aux | grep tangsir # 查看系统中指定用户执行的进程
pstree | more # 进程树,非常直观的观察父子进程
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }' # PHP-FPM进程的平均内存占用
ps -u root | awk '/^test/ {print "kill -9" $1}' | sh # 将用户root下所有进程名以test开头的全部强制杀死 ps -u root | awk '/^test/ {print "kill -9" $1}' | sh # 将用户root下所有进程名以test开头的全部强制杀死
# PHP-FPM进程的平均内存占用
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
# 统计僵尸进程数目
ps -ef | grep defunct | grep -v grep | wc -l
ps -eo ppid,stat | grep Z | wc -l
# 清理僵尸进程
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
ps -eo ppid,stat | grep Z | cut -d " " -f2 | xargs kill -9
kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`
ps -A -ostat,ppid | awk '/[zZ]/{print $2}'
kill $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}' | sort -u)
: << comment
rss: resident set size, 表示进程占用RAM(内存)的大小单位是KB
pmem: %M, 占用内存的百分比
pcpu%C占用cpu的百分比
vsize:表示进程占用的虚拟内存的大小KB
comment
# java进程cpu占用过高排查
ps -mp pid -o THREAD,tid,time
printf "%x\n" tid # 将需要的线程ID转换为16进制格式
jstack pid |grep tid -A 30 # 打印线程的堆栈信息
# java进程占用内存过高排查
jmap -histo:live [pid] # 分析具体的对象数目和占用内存大小,从而定位代码
jmap -dump:live,format=b,file=xxx.hprof [pid] # 利用MAT工具分析是否存在内存泄漏等
``` ```
## linux进程5种状态 ## linux进程5种状态
@ -117,9 +152,9 @@ ps -u root | awk '/^test/ {print "kill -9" $1}' | sh # 将用户root下所
ps命令标识进程的5种状态码 ps命令标识进程的5种状态码
* D 不可中断 uninterruptible sleep (usually IO) * D 不可中断 uninterruptible sleep (usually IO)
* R 运行 runnable (on run queue) * R 运行 runnable (on run queue)
* S 中断 sleeping * S 中断 sleeping
* T 停止 traced or stopped * T 停止 traced or stopped
* Z 僵死 a defunct (”zombie”) process * Z 僵死 a defunct (”zombie”) process

@ -114,6 +114,13 @@ sed '/test/{ n; s/aa/bb/; }' file # 若匹配到test则移动到匹配行
sed '1,10y/abcde/ABCDE/' file # y变形命令将1至10行所有abcde转为大写但正则表达式元字符不能使用该命令 sed '1,10y/abcde/ABCDE/' file # y变形命令将1至10行所有abcde转为大写但正则表达式元字符不能使用该命令
sed '10q' file # q退出命令打印完第10行后退出sed命令 sed '10q' file # q退出命令打印完第10行后退出sed命令
# 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 方法一
setenforce 0 # 方法二
# 禁止root用户远程登录
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# 已匹配字符串标记&;正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词,输出:[this] [is] [a] [test] [line] # 已匹配字符串标记&;正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应于之前所匹配到的单词,输出:[this] [is] [a] [test] [line]
echo this is a test line | sed 's/\w\+/[&]/g' echo this is a test line | sed 's/\w\+/[&]/g'
@ -422,38 +429,3 @@ sed -n '1000p;1000q' # 输出第一千行
sed -n '10,20p;20q' # 输出第10-20行 sed -n '10,20p;20q' # 输出第10-20行
``` ```
```

@ -16,5 +16,5 @@ sync命令用来flush文件系统buffer这样数据才会真正的写到磁
如果不去手动的输入sync命令来真正的去写磁盘linux系统也会周期性的去sync数据。 如果不去手动的输入sync命令来真正的去写磁盘linux系统也会周期性的去sync数据。
```sh ```sh
sync; echo 3 > /proc/sys/vm/drop_caches # 清空缓存 sync; echo 3 > /proc/sys/vm/drop_caches # 清空Linux Buffer Cache
``` ```

@ -38,6 +38,10 @@
## 实例 ## 实例
```bash ```bash
# tcpdump 抓包 用来防止80端口被人攻击时可以分析数据,然后检查IP的重复数 并从小到大排序 注意 "-t\ +0"中间是两个空格
tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts
less pkts | awk {'printf $3"\n"'} | cut -d. -f 1-4 | sort | uniq -c | awk {'printf $1" "$2"\n"'} | sort -n -t\ +0
tcpdump # 直接启动tcpdump将监视第一个网络接口上所有流过的数据包 tcpdump # 直接启动tcpdump将监视第一个网络接口上所有流过的数据包
tcpdump -i eth1 # 监视指定接口eth1的数据包 tcpdump -i eth1 # 监视指定接口eth1的数据包
tcpdump host 210.27.48.1 # 指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包 tcpdump host 210.27.48.1 # 指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包

@ -100,5 +100,20 @@ S 进程的状态S休眠R运行Z僵尸进程N
%MEM 进程使用的物理内存和总内存百分比 %MEM 进程使用的物理内存和总内存百分比
TIME+ 进程启动占用的总CPU时间即占用CPU使用时间的累加值 TIME+ 进程启动占用的总CPU时间即占用CPU使用时间的累加值
COMMAND 进程启动命令名称 COMMAND 进程启动命令名称
1. R 运行 runnable (on run queue)#运行(正在运行或在运行队列中等待)
2. S 中断 sleeping#中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. D 不可中断 uninterruptible sleep (usually IO)#不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. Z 僵死 a defunct (”zombie”) process#僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. T 停止 traced or stopped#停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
``` ```
```bash
top -d 1 -n 1 -b |awk -F '[ ,.%k]+' '/^Cpu/{printf "UPU_USAGE %.f%%\t",100-$11}/^Mem/\
{printf "MEM_USAGE %.f%%\n",($4-$8)/$2*100}'
top -d 1 -n 1 -b |awk -F '[ ,.%k]+' '/^Cpu/{printf "CPU_USAGE %.f%%\t",100-$11}/^Mem/\
{printf "MEM_USAGE %.f%%\t",($4-$8)/$2*100;now=strftime("%D %T");print now}'
```

@ -1,40 +1,24 @@
userdel # **userdel**
===
用于删除给定的用户以及与用户相关的文件
## 说明 ## 说明
**userdel命令** 用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。 **userdel命令** 用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件
### 语法
``` ## 选项
userdel(选项)(参数)
```
```markdown
-f, --force 强制执行某些否则会失败的动作,例如:即使用户已经登录状态
-r, --remove 删除用户的同时删除主目录和邮件池
-R, --root CHROOT_DIR chroot 到的目录
-Z, --selinux-user 为用户删除所有的 SELinux 用户映射
``` ```
-f强制删除用户即使用户当前已登录
-r删除用户的同时删除与用户相关的所有文件。
```
### 参数
用户名:要删除的用户名。 ## 实例
### 实例 ```bash
userdel linuxde # 删除用户linuxde但不删除其家目录及文件
userdel -r linuxde # 删除用户linuxde其家目录及文件一并删除;不要轻易用`-r`选项
userdel命令很简单比如我们现在有个用户linuxde其家目录位于`/var`目录中,现在我们来删除这个用户:
```
userdel linuxde //删除用户linuxde但不删除其家目录及文件
userdel -r linuxde //删除用户linuxde其家目录及文件一并删除
``` ```
请不要轻易用`-r`选项;他会删除用户的同时删除用户所有的文件和目录,切记如果用户目录下有重要的文件,在删除前请备份。
其实也有最简单的办法,但这种办法有点不安全,也就是直接在`/etc/passwd`中删除您想要删除用户的记录;但最好不要这样做,`/etc/passwd`是极为重要的文件,可能您一不小心会操作失误。

@ -1,39 +1,41 @@
w # **w**
===
显示目前登入系统的用户信息
## 说明 ## 说明
**w命令** 用于显示已经登陆系统的用户列表并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人以及他们正在执行的程序。单独执行w命令会显示所有的用户您也可指定用户名称仅显示某位用户的相关信息。 **w命令** 用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。
单独执行w命令会显示所有的用户您也可指定用户名称仅显示某位用户的相关信息
### 语法
``` ## 选项
w(选项)(参数)
```
```markdown
-h, --no-header 不打印头信息
-u, --no-current ignore current process username
-s, --short short format
-f, --from show remote hostname field
-o, --old-style old style output
-i, --ip-addr display IP address instead of hostname (if possible)
```
-h不打印头信息
-u当显示当前进程和cpu时间时忽略用户名
-s使用短输出格式
-f显示用户从哪登录
-V显示版本信息。
``` ```
### 参数 ## 实例
用户:仅显示指定用户。 ```bash
w
: << comment
20:59:50 up 60 days, 6:58, 2 users, load average: 0.05, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
Load average 分别显示系统在过去的1,5,15分钟内的平均负载程序
USER 登陆用户
TTY 登陆终端是本地登陆还是远程登陆pts/0,1,2,3
FROM 显示用户从何处登陆系统,如果显示“:0”显示代表了该用户是从Xwindows下打开文本模式窗口登陆的
IDLE 用户闲置的时间,这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
JCPU 以终端代号来区分该终端所有相关的进程执行时所消耗的CPU时间会显示在这里
PCPU CPU执行程序耗费的时间
WHAT 用户正在执行的操作
comment
### 实例
```
w
20:39:37 up 136 days, 3:58, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM login@ IDLE JCPU PCPU WHAT
root pts/0 222.94.97.122 20:39 1.00s 0.00s 0.00s w
``` ```

@ -219,6 +219,7 @@ wget -bc http://www.jsdig.com/testfile.zip # -b进行后台下载-c实现断
wget -m -p --convert-links -P ./LOCAL URL # 下载整个网站到本地 wget -m -p --convert-links -P ./LOCAL URL # 下载整个网站到本地
cd path && wget -nd -pHEKk http://www.pixelbeat.org/cmdline.html # cd到目录中下载指定网页及其相关的文件使其可完全浏览 cd path && wget -nd -pHEKk http://www.pixelbeat.org/cmdline.html # cd到目录中下载指定网页及其相关的文件使其可完全浏览
wget --user-agent="Mozilla/5.0" http://www.jsdig.com/testfile.zip # 伪装代理名称下载 wget --user-agent="Mozilla/5.0" http://www.jsdig.com/testfile.zip # 伪装代理名称下载
wget -me robots=off -U "Mozilla/5.0" http://www.example.com/
wget --mirror http://www.example.com/ # 更新网站的本地拷贝可以方便地用于cron wget --mirror http://www.example.com/ # 更新网站的本地拷贝可以方便地用于cron
wget -r -nd -np -l1 -A '*.jpg' http://www.example.com/ # 批量下载文件到当前目录中 wget -r -nd -np -l1 -A '*.jpg' http://www.example.com/ # 批量下载文件到当前目录中
wget --tries=40 URL # 增加重试次数 wget --tries=40 URL # 增加重试次数

119
ls.md

@ -1,119 +0,0 @@
warning: CRLF will be replaced by LF in Linux_man_cn/apt-get.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/badblocks.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/crontab.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/gdb.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/iostat.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/kill.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/ldd.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/mv.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/ps.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/screen.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/set.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/tar.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/top.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/touch.md.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in Linux_man_cn/vmstat.md.
The file will have its original line endings in your working directory
diff --git a/Linux_man_cn/apt-get.md b/Linux_man_cn/apt-get.md
index 025c7f7..42e1a42 100644
--- a/Linux_man_cn/apt-get.md
+++ b/Linux_man_cn/apt-get.md
@@ -2,79 +2,38 @@

## 说明

-**apt-get命令** 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起大体就如同Windows上的安装文件。
+**apt-get命令** 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个
+应用的文件包在一起大体就如同Windows上的安装文件

-```
--c指定配置文件。
-```
-
-### 参数 
-
-* 管理指令对APT软件包的管理操作
-* 软件包:指定要操纵的软件包。
-
-### 实例 
+## 选项

-使用apt-get命令的第一步就是引入必需的软件库Debian的软件库也就是所有Debian软件包的集合它们存在互联网上的一些公共站点上。把它们的地址加入apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件其格式如下
+```markdown

-```
-deb web或[ftp地址] [发行版名字] main/contrib/non-[free]
```

-我们常用的Ubuntu就是一个基于Debian的发行我们使用apt-get命令获取这个列表以下是我整理的常用命令
+## 实例

-在修改`/etc/apt/sources.list`或者`/etc/apt/preferences`之后运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的:
+```markdown
+使用apt-get命令的第一步就是引入必需的软件库Debian的软件库也就是所有Debian软件包的集合它们存在互联网上的一些公共
+站点上。把它们的地址加入apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件其格式如下
+deb web或[ftp地址] [发行版名字] main/contrib/non-[free]

-```
+修改`/etc/apt/sources.list`或者`/etc/apt/preferences`之后运行该命令。需要定期运行这一命令以确保您的软件包列表是最新的:
apt-get update
```

-安装一个新软件包:
-
-```
-apt-get install packagename
-```
-
-卸载一个已安装的软件包(保留配置文件):
-
-```
-apt-get remove packagename
-```
-
-卸载一个已安装的软件包(删除配置文件):
-
-```
-apt-get purge remove packagename
-```
-
-会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件:
-
-```
-apt-get autoclean apt
-```
-
-这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的:
-
-```
-apt-get clean
-```
-
-更新所有已安装的软件包:
-
-```
-apt-get upgrade
-```
-
-将系统升级到新版本:
-
-```
-apt-get dist-upgrade
-```

-定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式您可以释放大量的磁盘空间。如果您的需求十分迫切可以使用`apt-get clean`以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试:
+```
Loading…
Cancel
Save