diff --git a/Linux_man_cn/at.md b/Linux_man_cn/at.md index 2e27905..1aa7222 100644 --- a/Linux_man_cn/at.md +++ b/Linux_man_cn/at.md @@ -32,4 +32,29 @@ date >/root/2013.log | at 17:20 tomorrow # 明天17点钟,输出时间到指 atq # 计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务 at -c 8 # 显示已经设置的任务内容 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 + ``` diff --git a/Linux_man_cn/cat.md b/Linux_man_cn/cat.md index f756186..9b64630 100644 --- a/Linux_man_cn/cat.md +++ b/Linux_man_cn/cat.md @@ -26,4 +26,5 @@ cat -n /etc/passwd | sed '3,37c我是好人' # 将2至5行内容替换成我 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 /proc/partitions # 显示所在系统注册的分区 + ``` \ No newline at end of file diff --git a/Linux_man_cn/chage.md b/Linux_man_cn/chage.md index 69185d5..0594e47 100644 --- a/Linux_man_cn/chage.md +++ b/Linux_man_cn/chage.md @@ -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_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 -``` - -当然在`/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帐户密码策略信息如下: +comment -``` -[root@linuxde ~]# chage -l root -最近一次密码修改时间 : 3月 12, 2013 -密码过期时间 :从不 -密码失效时间 :从不 -帐户过期时间 :从不 -两次改变密码之间相距的最小天数 :0 -两次改变密码之间相距的最大天数 :99999 -在密码过期之前警告的天数 :7 -``` +chage -l root # 查看root帐户密码策略信息 +chage -M 60 root # 修改root密码过期时间 +chage -I 5 root # 设置密码失效时间: -我可以通过如下命令修改我的密码过期时间: ``` -[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天,密码自动失效,这个用户将无法登陆系统了。 diff --git a/Linux_man_cn/chfn.md b/Linux_man_cn/chfn.md index c7a9e73..2789439 100644 --- a/Linux_man_cn/chfn.md +++ b/Linux_man_cn/chfn.md @@ -1,66 +1,26 @@ -chfn -=== - -用来改变finger命令显示的信息 +# chfn ## 说明 -**chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项,则chfn命令会进入问答式界面。 - -### 语法 - -``` -chfn(选项)(参数) -``` - - - -``` --f<真实姓名>或--full-name<真实姓名>:设置真实姓名; --h<家中电话>或--home-phone<家中电话>:设置家中的电话号码; --o<办公地址>或--office<办公地址>:设置办公室的地址; --p<办公电话>或--office-phone<办公电话>:设置办公室的电话号码; --u或--help:在线帮助; --v或-version:显示版本信息。 -``` - -### 参数 - -用户名:指定要改变finger信息的用户名。 - -### 实例 +**chfn命令** 用来改变finger命令显示的信息。这些信息都存放在/etc目录里的passwd文件里。若不指定任何选项,则chfn命令会进入问答式界面 -范例1,改变finger信息: +## 选项 -``` -[root@localhost Desktop]# chfn -Changing finger information for root. -Name [root]: jack -Office []: hn -Office Phone []: 888888 -Home Phone []: 9999999 +```markdown +-f, --full-name <全名> 设置真实姓名 +-o, --office <办公> 设置办公号码 +-p, --office-phone <电话> 设置办公电话 +-h, --home-phone <电话> 设置住宅电话 -Finger information changed. ``` -范例2,改变账号真实姓名: +## 实例 -``` -[root@localhost Desktop]# chfn -f jack +```bash +chfn # 改变finger信息;按照提示输入即可 +chfn -f jack # 改变账号真实姓名 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] ``` diff --git a/Linux_man_cn/chsh.md b/Linux_man_cn/chsh.md index 6701030..8bc77f8 100644 --- a/Linux_man_cn/chsh.md +++ b/Linux_man_cn/chsh.md @@ -1,92 +1,25 @@ -chsh -=== - -用来更换登录系统时使用的shell +# chsh ## 说明 -**chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称,则chsh会以应答的方式进行设置。 - -### 语法 - -``` -chsh(选项)(参数) -``` - - - -``` --s或--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 -``` +**chsh命令** 用来更换登录系统时使用的shell。若不指定任何参数与用户名称,则chsh会以应答的方式进行设置 -注意SHELL一定要是大写。可以看到,目前使用的shell是`/bin/bash` +## 选项 - **把我的shell改成zsh:** +```markdown +-s, --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`文件里和你的用户名相对应的那一行。现在来查看下: +## 实例 -``` -[rocrocket@localhost ~]$ cat /etc/passwd|grep ^rocrocket -rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh -``` +```bash +chsh -s /bin/zsh # 把我的shell改成zsh;chsh -s其实修改的是/etc/passwd文件里和你的用户名相对应的那一行 -你可以发现输出内容的最后部分已经变成了`/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. -``` - - diff --git a/Linux_man_cn/cksum.md b/Linux_man_cn/cksum.md index 7b01c2b..6cc6b30 100644 --- a/Linux_man_cn/cksum.md +++ b/Linux_man_cn/cksum.md @@ -1,49 +1,19 @@ -cksum -=== - -检查文件的CRC是否正确 +# cksum ## 说明 -**cksum命令** 是检查文件的CRC是否正确,确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来,在目的系统中又被计算一次,两个数字进行比较,如果校验和相等,则该文件被认为是正确传输了。 - -注意:CRC是指一种排错检查方法,即循环冗余校验法。 - -指定文件交由cksum命令进行校验后,会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则cksum命令会从标准输入设备中读取数据。 - -### 语法 - -``` -cksum(选项)(参数) -``` - - +**cksum命令** 输出每个文件的 CRC 校验值和字节统计,确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来,在目的 +系统中又被计算一次,两个数字进行比较,如果校验和相等,则该文件被认为是正确传输了 -``` ---help:在线帮助; ---version:显示版本信息。 -``` +注意:CRC是指一种排错检查方法,即循环冗余校验法 -### 参数 +指定文件交由cksum命令进行校验后,会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则cksum命令会从 +标准输入设备中读取数据 -文件:指定要计算校验的版本信息。 +## 实例 -### 实例 - -使用cksum命令计算文件"testfile1"的完整性,输入如下命令: - -``` +```bash cksum testfile1 #对指定文件进行CRC校验 ``` -以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示: - -``` -1263453430 78 testfile1 #输出信息 -``` - -上面的输出信息中,"1263453430"表示校验码,"78"表示字节数。 - -注意:如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。 - diff --git a/Linux_man_cn/crontab.md b/Linux_man_cn/crontab.md index ae67f98..a4a750b 100644 --- a/Linux_man_cn/crontab.md +++ b/Linux_man_cn/crontab.md @@ -100,5 +100,20 @@ minute hour day month week command 顺序:分 时 日 月 周 0 4 1 jan * /etc/init.d/smb restart # 一月一号的4点重启smb 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提交任务 + + ``` diff --git a/Linux_man_cn/cut.md b/Linux_man_cn/cut.md index ae33e7a..c44326a 100644 --- a/Linux_man_cn/cut.md +++ b/Linux_man_cn/cut.md @@ -43,6 +43,7 @@ grep "model name" /proc/cpuinfo | uniq | cut -f2 -d : # 显示CPU信息;-f截 cut -f2 --complement test.txt # --complement选项提取指定字段之外的列(打印除了第二列之外的列) cut -f2 -d";" test2.txt # 使用-d选项指定字段分隔符 pip3 list -o --format columns | cut -d ' ' -f1 | xargs -n1 pip install -U # 一次性升级所有pip包 +ls /etc/rc3.d/S* | cut -c 15- # 显示运行级别为3开启的服务 ### 指定字段的字符或者字节范围 diff --git a/Linux_man_cn/dd.md b/Linux_man_cn/dd.md index 9304f02..a468baf 100644 --- a/Linux_man_cn/dd.md +++ b/Linux_man_cn/dd.md @@ -114,8 +114,11 @@ dd if=/dev/hda1 of=~/partition1.img # 备份分区 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=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 ``` \ No newline at end of file diff --git a/Linux_man_cn/dmidecode.md b/Linux_man_cn/dmidecode.md index 57a5f3e..f6092d4 100644 --- a/Linux_man_cn/dmidecode.md +++ b/Linux_man_cn/dmidecode.md @@ -116,10 +116,11 @@ Usage: dmidecode [OPTIONS] ```bash dmidecode -t 1 # 查看服务器信息 +dmidecode -s system-product-name # 查看硬件制造商 dmidecode | grep 'Product Name' # 查看服务器型号 +dmidecode -s system-serial-number # 查看系统序列号 dmidecode | grep 'Serial Number' # 查看主板的序列号 dmidecode -t 2 # 查看主板信息 -dmidecode -s system-serial-number # 查看系统序列号 dmidecode -t memory # 查看内存信息 dmidecode -t 11 # 查看OEM信息 dmidecode -t 17 # 查看内存条数 diff --git a/Linux_man_cn/du.md b/Linux_man_cn/du.md index 97db9a2..8de2f36 100644 --- a/Linux_man_cn/du.md +++ b/Linux_man_cn/du.md @@ -29,6 +29,8 @@ ```bash 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' ``` diff --git a/Linux_man_cn/e2label.md b/Linux_man_cn/e2label.md index f635a18..decc4b4 100644 --- a/Linux_man_cn/e2label.md +++ b/Linux_man_cn/e2label.md @@ -1,45 +1,22 @@ -e2label -=== - -设置第二扩展文件系统的卷标 +# e2label ## 说明 -**e2label命令** 用来设置第二扩展文件系统的卷标。 - -### 语法 - -``` -e2label(参数) -``` - -### 参数 +**e2label命令** 用来修改ext2/ext3/ext4文件系统的卷标 -* 文件系统:指定文件系统所对应的设备文件名; -* 新卷标:为文件系统指定新卷标。 +## 选项 -### 实例 +```markdown +e2label device [ new-label ] -许多用了多年Linux的人可能也没有用过e2label命令。但是这个命令相当有效。在介绍它之前,我们先看看`/etc/fstab文`件: - -``` -label=//ext3 defaults 1 1 -/dev/hda7 /usr ext3 defaults 1 1 +若new-label可选参数未指定则只是查看对应设备的卷标,指定的卷标最多可以包含16个字符; 如果new-label的长度超过16个字符, +则e2label将截断它并打印一个警告信息 ``` -第二行的意思很容易懂,就是把`/dev/hda7` mount到`/usr`上。第一行没有指明分区,意思是把label(卷标)为/ 的分区mount到/上。这样写的好处在于即使如果把硬盘从主板上的ide0(hda) 换到ide2(hdc)上,系统仍然可以自动挂载正确的分区。通常Linux安装的时候已经自动指定了卷标。如果是手动增加的新分区,可以用下边的命令为 其指定卷标: +## 实例 -``` -e2label /dev/hdax /new -mkdir /new -``` +```bash +e2lable /dev/sdb1 # 查看分区的卷标 +e2lable /dev/sdb1 network # 设置分区的卷标 -然后在`/etc/fstab`里加入: - -``` -label=/new /new ext3 defaults 1 1 ``` - -下次重新起动机器的时候,就会把卷标为`/new`的分区挂接到`/new`上。 - - diff --git a/Linux_man_cn/echo.md b/Linux_man_cn/echo.md index d2fc480..38b5741 100644 --- a/Linux_man_cn/echo.md +++ b/Linux_man_cn/echo.md @@ -34,6 +34,16 @@ echo LONG-OPTION ```bash echo "I live in `locale territory`" # 从locale数据库中展开信息 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命令打印带有色彩的文字: ## 文字色:# 颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37 diff --git a/Linux_man_cn/fdisk.md b/Linux_man_cn/fdisk.md index 9f7942f..e3839b3 100644 --- a/Linux_man_cn/fdisk.md +++ b/Linux_man_cn/fdisk.md @@ -29,201 +29,4 @@ fdisk -s <分区> 给出分区大小(块数) e2fsck -f -y -v -C 0 '/dev/sdb2' resize2fs -p '/dev/sdb2' 15171584k 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个主分区(sdb1,sdb2),1个扩展分区(sdb3),2个逻辑分区(sdb5,sdb6) - -注意:主分区和扩展分区的磁盘号位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 - ``` - - - diff --git a/Linux_man_cn/find.md b/Linux_man_cn/find.md index 77c4c89..7fbe76b 100644 --- a/Linux_man_cn/find.md +++ b/Linux_man_cn/find.md @@ -115,6 +115,10 @@ path find命令所查找的目录路径。例如用.来表示当前目录, ## 实例 ```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 "文件名" -exec rm -f {}\; @@ -137,11 +141,13 @@ find . -regex ".*\(\.txt\|\.pdf\)$" -print # 基于正则表达式匹配文件 find . -iregex ".*\(\.txt\|\.pdf\)$" -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 常用的find命令的控制选项及其用法 选项 用途描述 @@ -169,8 +175,9 @@ comment ``` +### 根据-type文件类型进行搜索 + ```bash -# 根据-type文件类型进行搜索 : << comment 类型参数列表: @@ -186,24 +193,25 @@ comment find . -maxdepth 3 -type f # 基于目录深度搜索,向下最大深度限制为3 find . -mindepth 2 -type f # 搜索出深度距离当前目录至少2个子目录的所有文件 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" -exec cat {} \;> all.txt # 查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 find . -type f -name "*.txt" -exec printf "File: %s\n" {} \; # 找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来 find . -type f -name "*" | xargs grep "test" # 当前目录搜索包含test内容的文件 find . -type f -mmin -10 # 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录 + ``` +### 根据文件时间戳进行搜索 + ```bash -# 根据文件时间戳进行搜索 : << comment find . -type f 时间戳,UNIX/Linux文件系统每个文件都有三种时间戳: 精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime -mtime -n +n -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前 -* **访问时间** (-atime/天,-amin/分钟):用户最近一次访问时间。 -* **修改时间** (-mtime/天,-mmin/分钟):文件最后一次修改时间。 -* **变化时间** (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。 +* atime:访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。当备份实用程序或脚本已读取文件以及用户已读取文件时,atime也会更改 +* mtime:修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。文件系统备份会随时更改,而原始设备备份不会更改。要实施增量或差异备份很重要 +* 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。 comment find . -type f -atime -7 # 搜索最近七天内被访问过的所有文件 @@ -214,6 +222,7 @@ find . -type f -ctime -1 # 查找在24小时内状态改变的文件 find . -type f -amin +10 # 搜索访问时间超过10分钟的所有文件 find . -type f -mmin -5 # 查找在5分钟内修改过的文件 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旧的文件 # 查找当前目录更改时间一天以内的文件并压缩 @@ -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" '{}' \; ``` -```bash -# 根据文件大小-size进行匹配 -find . -type f -size 文件大小单元 +### 根据文件大小-size进行匹配 +```bash : << comment +find . -type f -size 文件大小单元 文件大小单元: * **b** —— 块(512字节) @@ -237,14 +246,15 @@ find . -type f -size 文件大小单元 comment 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的文件 ``` -```bash -# 根据文件权限/所有权进行匹配 +### 根据文件权限/所有权进行匹配 +```bash -perm mode:文件许可正好符合mode -perm +mode:文件许可部分符合mode -perm -mode: 文件许可完全符合mode @@ -270,6 +280,7 @@ find . -perm -g+w,u+w # 找出设置了SET位的权限的文件,-perm +6000表示不检查基本权限,第一种是find命令执行完才能看到结果,第二种没找到一条就立即显示 ls -lh $(find / -type f -perm +6000) + find / -type f -perm +6000 -exec ls -lh {} \; find . -type f -user tom # 找出当前目录用户tom拥有的所有文件 diff --git a/Linux_man_cn/finger.md b/Linux_man_cn/finger.md index 43ec880..119266b 100644 --- a/Linux_man_cn/finger.md +++ b/Linux_man_cn/finger.md @@ -1,45 +1,23 @@ -finger -=== - -用于查找并显示用户信息 +# finger ## 说明 -**finger命令** 用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话。 - -### 语法 +**finger命令** 用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机 +现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话 -``` -finger(选项)(参数) -``` +## 选项 - - -``` +```markdown -l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容; -m:排除查找用户的真实姓名; -s:列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话; --p:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容。 -``` +-p:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容 -不指定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的选项如果提供操作者的话,缺省设为`-l`输出风格,否则为`-s`风格,注意在两种格式中,如果信息不足,都有一些域可能丢失,如果没有 +指定参数finger会为当前登录的每个用户打印一个条目。 ``` -如果要查询远程机上的用户信息,需要在用户名后面接`@主机名`,采用`用户名@主机名`的格式,不过要查询的网络主机需要运行finger守护进程的支持。 +## 实例 + diff --git a/Linux_man_cn/free.md b/Linux_man_cn/free.md index d8c7d49..939605a 100644 --- a/Linux_man_cn/free.md +++ b/Linux_man_cn/free.md @@ -36,7 +36,7 @@ free -t # 以总和的形式显示内存的使用信息 free -s 10 # 周期性的查询内存使用信息,每10s 执行一次命令 ``` -## 输出解释: +## free输出解释: ```markdown total 安装的总内存 (MemTotal and SwapTotal in /proc/meminfo) diff --git a/Linux_man_cn/fsck.md b/Linux_man_cn/fsck.md index 6b2a1e0..335a772 100644 --- a/Linux_man_cn/fsck.md +++ b/Linux_man_cn/fsck.md @@ -1,4 +1,4 @@ -fsck +# **fsck** === 检查并且试图修复文件系统中的错误 diff --git a/Linux_man_cn/ifconfig.md b/Linux_man_cn/ifconfig.md index 544dc7b..9718e23 100644 --- a/Linux_man_cn/ifconfig.md +++ b/Linux_man_cn/ifconfig.md @@ -1,21 +1,14 @@ -ifconfig -=== - -配置和显示Linux系统网卡的网络参数 +# **ifconfig** ## 说明 -**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 - -### 语法 - -``` -ifconfig(参数) -``` +**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。 +要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件 -### 参数 +## 选项 -``` +```markdown +# 参数 add<地址>:设置网络设备IPv6的ip地址; del<地址>:删除网络设备IPv6的IP地址; 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`。 **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字节。 * 第四、五行:接收、发送数据包情况统计。 * 第七行:接收、发送数据字节数统计信息。 +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的网卡信息 ``` diff --git a/Linux_man_cn/ln.md b/Linux_man_cn/ln.md index e9d83c3..f9a1cb6 100644 --- a/Linux_man_cn/ln.md +++ b/Linux_man_cn/ln.md @@ -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 - -``` -cd /usr/mengqc +在执行ln命令之前,目录/usr/liu中不存在a2.c文件。执行ln之后,在/usr/liu目录中才有a2.c,表明m2.c和a2.c链接起来 +(注意,二者在物理上是同一文件),利用ls -l命令可以看到链接数的变化 +comment 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 + ``` -执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。 ## 扩展知识 -Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。 +文件链接有两种形式,即硬链接和符号链接 -文件链接有两种形式,即硬链接和符号链接。 +Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须不同的文件名,而不用在硬盘上为同样的数据 +重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录 +下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性 ### 硬链接 @@ -78,43 +89,54 @@ Linux具有为一个文件起多个名字的功能,称为链接。被链接的 3.硬链接是同步更新的; 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。 -* 符号链接的大小是其链接文件的路径名中的字节数。 -* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。 +* 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据 +* 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l +* 符号链接的大小是其链接文件的路径名中的字节数 +* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如: + lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file其中,表示“文件大小”的数字“14”恰好说明源文件名original_file + 由14个字符构成 diff --git a/Linux_man_cn/ls.md b/Linux_man_cn/ls.md index 188ca59..d2c0e33 100644 --- a/Linux_man_cn/ls.md +++ b/Linux_man_cn/ls.md @@ -57,6 +57,8 @@ ls -al # 列出所有文件(包括隐藏)的详细信息 ls ??R* # 列出任意两个字符开始,接着跟R,后面任何字符的文件 ls log.[0-9]* # 匹配log+任何数字+任意字符的文件 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字符 ls -lrt | awk '{print $9}'|xargs file|grep ELF| awk '{print $1}'|tr -d ':' # 查找当前目录所有二进制文件 diff --git a/Linux_man_cn/lscpu.md b/Linux_man_cn/lscpu.md index e7d0fd8..4a19675 100644 --- a/Linux_man_cn/lscpu.md +++ b/Linux_man_cn/lscpu.md @@ -1,75 +1,43 @@ -lscpu -=== - -显示有关CPU架构的信息 +# lscpu ## 说明 -**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[=] 打印出一个扩展的可读格式 - -p, --parse[=] 打印出可解析的格式 - -s, --sysroot 将指定的目录用作系统根目录 - -x, --hex 打印十六进制掩码,而不是CPU列表 - - -h, --help 显示此帮助并退出 - -V, --version 输出版本信息并退出 -``` - -### 参数 +## 实例 ```bash -可用列: - CPU 逻辑CPU编号 - CORE 逻辑核心号码 - SOCKET 逻辑套接字号 - NODE 逻辑NUMA节点号 - BOOK 逻辑书号 - CACHE 显示了如何在CPU之间共享高速缓存 - POLARIZATION 虚拟硬件上的CPU调度模式 - ADDRESS CPU的物理地址 - CONFIGURED 显示管理程序是否分配了CPU - ONLINE 显示Linux是否正在使用CPU -``` - -### 例子 +lscpu -```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 ``` diff --git a/Linux_man_cn/lsof.md b/Linux_man_cn/lsof.md index 99e05d8..2e3a115 100644 --- a/Linux_man_cn/lsof.md +++ b/Linux_man_cn/lsof.md @@ -127,4 +127,6 @@ lsof输出各列信息的意义如下: ```bash lsof -i # 列出所有的网络连接或端口 lsof ~ # 查看打开用户目录的进程 +lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh # 杀掉80端口相关的进程 + ``` diff --git a/Linux_man_cn/lspci.md b/Linux_man_cn/lspci.md index 541e783..a058732 100644 --- a/Linux_man_cn/lspci.md +++ b/Linux_man_cn/lspci.md @@ -61,6 +61,7 @@ PCI access options: ```bash lspci -tv # 显示PCI信息 lspci | grep Ethernet # 显示网卡信息 +lspci | grep VGA ``` diff --git a/Linux_man_cn/md5sum.md b/Linux_man_cn/md5sum.md index 1cd8804..0c45cf1 100644 --- a/Linux_man_cn/md5sum.md +++ b/Linux_man_cn/md5sum.md @@ -1,89 +1,35 @@ -md5sum -=== - -计算和校验文件报文摘要的工具程序 +# **md5sum** ## 说明 -**md5sum命令** 采用MD5报文摘要算法(128位)计算和检查文件的校验和。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。 - -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是否被修改过:** +**md5sum命令** 采用MD5报文摘要算法(128位)显示和检查文件的校验和。直接在命令行终端直接运行 -首先生成md5文件: +MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的 +信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要极小可能性存在 -``` -md5sum testfile > testfile.md5 -``` - -检查: +## 选项 -``` -md5sum testfile -c testfile.md5 -``` - -如果文件没有变化,输出应该如下: - -``` -forsort: OK -``` +```markdown +若没有文件选项,或者文件处为"-",则从标准输入读取。 -此时,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`有没有都一样。 - diff --git a/Linux_man_cn/nice.md b/Linux_man_cn/nice.md index 3852591..9ac1761 100644 --- a/Linux_man_cn/nice.md +++ b/Linux_man_cn/nice.md @@ -4,33 +4,30 @@ **nice命令** 用于以指定的进程调度优先级启动其他的程序。Crontab中用什么命令定义某个程序执行的优先级别 -nice/renice:进程执行优先级 +## 选项 -概念:进程优先级:系统按进程优先级的不同分配CPU时间,优先级高的进程会得到更多的CPU使用时间,以提高速度,缩短总的执行时间。 - -进程优先级范围:-20至19 - -最高等级:-20 - -最低等级:19 - -系统管理员有权将进程优先级设置为-1至-20,而普通用户只能设置0至19。进程运行的默认等级为0。用nice执行的进程其默认等级为10(即nice <程序名>,不指定等级时)。 +```markdown +-n, --adjustment=N 指定进程的优先级(整数,默认是10) +nice/renice 进程执行优先级 +概念:进程优先级 系统按进程优先级的不同分配CPU时间,优先级高的进程会得到更多的CPU使用时间,以提高速度,缩短总的执行时间 +进程优先级范围 -20至19 +最高等级 -20 +最低等级 19 +系统管理员有权将进程优先级设置为-1至-20,而普通用户只能设置0至19。进程运行的默认等级为0。 +用nice执行的进程其默认等级为10(即nice <程序名>,不指定等级时) -```info --n, --adjustment=N 指定进程的优先级(整数,默认是10) ``` ## 实例 -```sh -nice -19 tar zcf pack.tar.gz documents # 新建一个进程并设置优先级,将当前目录下的documents目录打包,但不希望tar占用太多CPU - -方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了,最低优先级不是19么?那是因为这个“-19”中的“-”仅表示参数前缀;所以,如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级: -nice --19 tar zcf pack.tar.gz documents +```bash +nice -19 tar zcf pack.tar.gz documents # 将当前目录下的documents目录打包,但不希望tar占用太多CPU,-19中的“-”仅表示参数前缀 +nice --19 tar zcf pack.tar.gz documents # 将当前目录下的documents目录打包,并且赋予tar进程最高的优先级 -如:(命令后加&表示以后台运行) +: << comment +(命令后加&表示以后台运行) vi & 优先等级0,默认等级 nice vi & 优先等级10,使用nice执行程序时的默认等级 nice -50 vi & 优先等级19,-号表示选项,等级50超过最低等级19,因此系统以等级19执行 @@ -42,8 +39,9 @@ nice --18 vi & 优先等级-18 renice <等级> 注意:<等级>是参数,不是选项,没有前缀-号。 -调整指定用户的所有进程的等级 -renice <等级> <用户名1> <用户名2> ... +renice <等级> <用户名1> <用户名2> # 调整指定用户的所有进程的等级 -调整指定组的所有用户的所有进程的等级 -renice <等级> -g <组名1> \ No newline at end of file +renice <等级> -g <组名1> # 调整指定组的所有用户的所有进程的等级 +comment + +``` diff --git a/Linux_man_cn/openssl.md b/Linux_man_cn/openssl.md index b980772..48af11f 100644 --- a/Linux_man_cn/openssl.md +++ b/Linux_man_cn/openssl.md @@ -9,7 +9,7 @@ OpenSSL有两种运行模式:交互模式和批处理模式 直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式 -OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构也是围绕这三个功能部分进行规划的 +OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构也是围绕这三个功能部分进行规划 **对称加密算法** @@ -32,20 +32,70 @@ OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1 密钥和证书管理是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)-->自签名得到根证书(.crt)(CA给自已颁发的证书) +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: diff --git a/Linux_man_cn/ps.md b/Linux_man_cn/ps.md index 726c062..d9cad7f 100644 --- a/Linux_man_cn/ps.md +++ b/Linux_man_cn/ps.md @@ -88,23 +88,58 @@ Miscellaneous options: ## 实例 ```bash -# 查看所有用户执行的进程的详细信息 -ps -aux +ps -aux | sort -nk +3 | tail # 查看消耗CPU最多的十个进程 +ps -aux | sort -nk +4 | tail # 查看消耗内存最多的十个进程 ps -le - +pstree | more # 进程树,非常直观的观察父子进程 +ps -eo pid,args,psr # 查看进程在哪个CPU上运行 ps -p pid1,pid2 # 显示指定进程id的信息,此例为pid1,pid2进程的信息 -ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序 -ps aux | sort -nk 3 # 按CPU 资源的使用量对进程进行排序 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 "%C : %p : %z : %a" | sort -nr # 按CPU利用率从大到小排序 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 -aux --sort pid # 可按照进程执行的时间,PID,UID等对进程进行排序 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开头的全部强制杀死 +# 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种状态 @@ -117,9 +152,9 @@ ps -u root | awk '/^test/ {print "kill -9" $1}' | sh # 将用户root下所 ps命令标识进程的5种状态码 -* D 不可中断 uninterruptible sleep (usually IO) -* R 运行 runnable (on run queue) -* S 中断 sleeping -* T 停止 traced or stopped -* Z 僵死 a defunct (”zombie”) process +* D 不可中断 uninterruptible sleep (usually IO) +* R 运行 runnable (on run queue) +* S 中断 sleeping +* T 停止 traced or stopped +* Z 僵死 a defunct (”zombie”) process diff --git a/Linux_man_cn/sed.md b/Linux_man_cn/sed.md index 0a8ed51..fdf27c0 100644 --- a/Linux_man_cn/sed.md +++ b/Linux_man_cn/sed.md @@ -114,6 +114,13 @@ sed '/test/{ n; s/aa/bb/; }' file # 若匹配到test,则移动到匹配行 sed '1,10y/abcde/ABCDE/' file # y变形命令,将1至10行所有abcde转为大写,但正则表达式元字符不能使用该命令 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] 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行 ``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - diff --git a/Linux_man_cn/sync.md b/Linux_man_cn/sync.md index fae0e09..87b6ffe 100644 --- a/Linux_man_cn/sync.md +++ b/Linux_man_cn/sync.md @@ -16,5 +16,5 @@ sync命令用来flush文件系统buffer,这样数据才会真正的写到磁 如果不去手动的输入sync命令来真正的去写磁盘,linux系统也会周期性的去sync数据。 ```sh -sync; echo 3 > /proc/sys/vm/drop_caches # 清空缓存 +sync; echo 3 > /proc/sys/vm/drop_caches # 清空Linux Buffer Cache ``` \ No newline at end of file diff --git a/Linux_man_cn/tcpdump.md b/Linux_man_cn/tcpdump.md index b2ab8d2..0fc5c01 100644 --- a/Linux_man_cn/tcpdump.md +++ b/Linux_man_cn/tcpdump.md @@ -38,6 +38,10 @@ ## 实例 ```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 -i eth1 # 监视指定接口eth1的数据包 tcpdump host 210.27.48.1 # 指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包 diff --git a/Linux_man_cn/top.md b/Linux_man_cn/top.md index b1e68f5..7236b36 100644 --- a/Linux_man_cn/top.md +++ b/Linux_man_cn/top.md @@ -100,5 +100,20 @@ S 进程的状态,S:休眠;R:运行;Z:僵尸进程;N: %MEM 进程使用的物理内存和总内存百分比 TIME+ 进程启动占用的总CPU时间,即占用CPU使用时间的累加值 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}' + +``` diff --git a/Linux_man_cn/userdel.md b/Linux_man_cn/userdel.md index e4cb8e3..a5b6c3b 100644 --- a/Linux_man_cn/userdel.md +++ b/Linux_man_cn/userdel.md @@ -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`是极为重要的文件,可能您一不小心会操作失误。 - - diff --git a/Linux_man_cn/w.md b/Linux_man_cn/w.md index 80a9565..adb8db8 100644 --- a/Linux_man_cn/w.md +++ b/Linux_man_cn/w.md @@ -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 ``` diff --git a/Linux_man_cn/wget.md b/Linux_man_cn/wget.md index fddb03d..886679f 100644 --- a/Linux_man_cn/wget.md +++ b/Linux_man_cn/wget.md @@ -219,6 +219,7 @@ wget -bc http://www.jsdig.com/testfile.zip # -b进行后台下载,-c实现断 wget -m -p --convert-links -P ./LOCAL URL # 下载整个网站到本地 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 -me robots=off -U "Mozilla/5.0" http://www.example.com/ wget --mirror http://www.example.com/ # 更新网站的本地拷贝可以方便地用于cron wget -r -nd -np -l1 -A '*.jpg' http://www.example.com/ # 批量下载文件到当前目录中 wget --tries=40 URL # 增加重试次数 diff --git a/ls.md b/ls.md deleted file mode 100644 index bd94ade..0000000 --- a/ls.md +++ /dev/null @@ -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文件,因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试: -+``` \ No newline at end of file