如何熟悉Linux经典命令?

RHEL-Like

1 管道或字符处理

1.1 grep的经典用法

1.1.1 扩展查找参数

表达或逻辑:

grep -E 'vmx|svm' /proc/cpuinfo

表达与逻辑:

grep -E '0.*bash' /etc/passwd

注:
– ID是“0”并可以使用bash登录的用户
– 其实可以理解为通配符

1.1.2. 过滤注解和空行

grep -E -v "(^#|^$)" /etc/yum.conf

1.1.3 搜索文本的内容

grep –r "string" .

1.1.4 搜索私网地址

grep -E '^(192.168|10.|172.1[6789].|172.2[0-9].|172.3[01].)'

1.2 awk的经典用法

1.2.1 按指定的列打印

echo './ftp1/abc/efg.txt' | awk  -F '/'  '{print $1"/"$2"/"$3"/"$4}'

1.2.2 去掉最前列打印

cat /tmp/ftplist | awk -F'/' '{$1="";OFS="/";print}'

1.2.3 去掉最后列打印

echo './ftp1/abc/efg.txt' | awk -F'/' '{NF-=1;OFS="/";print}'

1.2.4 去掉前后列打印

echo './ftp1/abc/efg.txt' | awk -F'/' '{$1="";NF-=1;OFS="/";print}'

1.2.5 打印最后一列

echo './ftp1/abc/efg.txt' | awk -F '/' '{print $NF}'

1.3 cut的经典用法

1.3.1 多区域截取

cat /etc/passwd | cut -d: -f1,2,3

1.3.2 按字符截取

cat /etc/passwd | cut -c 1-4,6
echo '测试用例' | cut -c 1-2,4

1.3.3 按字节截取

cat /etc/passwd | cut -b 1-4,6
echo '测试用例' | cut -b 1-2,4

注:以上中文用例可见,按字符可以保证截取的完整性,按字节不能不能保证。

1.4 sort经典用法

删除重复行

cat /proc/cpuinfo | grep 'model name' | sort -u

1.5 sed经典用法

1.5.1 控制字符转义

echo ' `~!@#$%^&*()_+{}[]|\:;",./<>?' | sed 's/[[:blank:]]\|[&'"'"'()]/\\&/g'
echo ' `~!@#$%^&*()_+{}[]|\:;",./<>?' | sed 's/[^[:alnum:]]/\\&/g'

1.5.2 无歧义的方式输出字符

echo "test example" > test.txt
echo -e "test\texample" >> test.txt
sed l 'test.txt'
sed -n l 'test.txt'

1.5.3 字符串替换

echo "API_KEY = 0000000" | sed 's/ //g'

1.5.4 空格的替换

sed 's/^[ \t]*//g' #删除行首的空格
sed 's/[ \t]*$//g' #删除行尾的空格
sed s/[[:space:]]//g #删除全文的空格

1.6 字符集转换

iconv -f utf8 -t gb2312 file-before.txt > result.txt

1.7 根据列表批量删除

cat list.txt | xargs rm -rf

1.8 实现URL转码

1.8.1 部署Python转码

echo "alias urldecode='python -c \"import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])\"'" > /etc/profile.d/urlcode.sh
echo "alias urlencode='python -c \"import sys, urllib as ul; print ul.quote_plus(sys.argv[1])\"'" >> /etc/profile.d/urlcode.sh
source /etc/profile.d/urlcode.sh

1.8.2 测试URL转码

urlencode '%^&'

显示如下:

%25%5E%26

1.8.3 测试URL反转码

urldecode '%25%5E%26'

显示如下:

%^&

2 目录或文件处理

2.1 find的经典用法

#查找最近30分钟修改的当前目录下的.php文件

find . -name '*.php' -mmin -30

#查找最近24小时修改的当前目录下的.php文件

find . -name '*.php' -mtime 0

#查找最近24小时修改的当前目录下的.php文件,并列出详细信息

find . -name '*.php' -mtime 0 -ls

#查找当前目录下,最近24-48小时修改过的文件。

find . -type f -mtime 1

#查找当前目录下,最近1天前修改过的文件。

find . -type f -mtime +1

#查找软连接并显示软连接的目录

find /var -type l -exec ls -l {} \;

#查找包含特殊字符的对象

find /data -name '*\**' -o -name '*\\*' -o -name '*\:*' -o -name '*\?*' -o -name '*\"*' -o -name '*\*' -o -name '*\|*'

2.2 tree用法

显示目录层数:

tree -L 2

2.3 当前目录大小

du -h --max-depth=1

2.4 强制卸载目录(慵懒模式)

umount -l /mnt

2.5 文件同步

2.5.1 文件同步限制速度

rsync -avzP --bwlimit=500K *.tar www.cmdschool.org:/data/images/

3 时间相关

3.1 修改时区域时间同步

yum install -y ntpdate
timedatectl list-timezones #时区查看
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #配置时区
timedatectl set-timezone Asia/Shanghai #配置时区
ntpdate 0.centos.pool.ntp.org #时间同步

3.2 NTP客户端配置

yum -y install chrony
vim /etc/chrony.conf

修改NTP服务器地址:

server 0.centos.pool.ntp.org iburst

设置服务开机启动与重启

systemctl enable chronyd
systemcatl restart chronyd

查看服务状态:

timedatectl status #时间日期状态
chronyc sources -v #同步时间源
chronyc sourcestats -v #同步时间状态

4 硬件相关

4.1 CPU信息

4.1.1 CPU的型号

dmidecode -t processor

echo "cpu "$(cat /proc/cpuinfo | grep 'model name' | sort -u)

4.1.2 CPU的核数

echo "cpu core number:"$(cat /proc/cpuinfo | grep 'core id' | sort -u | wc -l)

4.2 内存信息

4.2.1 查询内存相关信息

dmidecode -t memory

显示如下:

# dmidecode 2.12
SMBIOS 2.5 present.

Handle 0x0019, DMI type 16, 15 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: Multi-bit ECC
        Maximum Capacity: 8 GB
        Error Information Handle: Not Provided
        Number Of Devices: 4

Handle 0x001A, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0019
        Error Information Handle: No Error
        Total Width: 42504 bits
        Data Width: 42568 bits
        Size: 1024 MB
        Form Factor: DIMM
        Set: 1
        Locator: DIMM 1
        Bank Locator: DIMM 1
        Type: DDR2
        Type Detail: Synchronous
        Speed: 667 MHz
        Manufacturer: Hyundai Electronics
        Serial Number: 04004023
        Asset Tag: 41420836
        Part Number: 48594D503531325537324350382D59352020

Handle 0x001B, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0019
        Error Information Handle: No Error
        Total Width: Unknown
        Data Width: Unknown
        Size: No Module Installed
        Form Factor: DIMM
        Set: 2
        Locator: DIMM 2
        Bank Locator: DIMM 2
        Type: DDR2
        Type Detail: Synchronous
        Speed: Unknown
        Manufacturer: 48spaces
        Serial Number: 01234567
        Asset Tag: 01234567
        Part Number: 012345678901234567890123456789012345

注:size可知内存大小或者有无插内存

4.2.2 物理内存的大小

echo $(expr $(cat /proc/meminfo | grep MemTotal | awk -F ' ' '{print $2}') / 1024 / 1024)"GB"

4.3 硬盘

4.3.1 硬盘

fdisk -l | grep 'Disk /dev'

4.3.2 硬盘IO

iostat -d -k 2

4.4 查看ISCSI设备

lsscsi

4.5 查看PCI设备

lspci

4.5.1 查看HBA卡

lspci | grep Fibre

4.5.2 查看网卡

lspci | grep Ethernet

4.5.3 网卡信息

ethtool eth0

4.6 UUID相关的

ls -l /dev/disk/by-uuid
uuidgen | xargs tune2fs /dev/sda1 -U
blkid /dev/sda1

4.7 查看接口

 dmidecode -t connector

注:可查询主板上的USB接口、网络接口、SATA接口等

4.8 文件系统

tune2fs -l /dev/sda3

如果显示如下,则文件系统需要Init 1模式下修复

Filesystem state:         clean with errors

5 源相关的配置

5.1 wget下载整个yum源目录

wget -c -r -np --reject=html,gif,A,D -nH https://repos.fedorapeople.org/repos/openstack/EOL/openstack-juno/epel-7/

5.2 yum源下载

yum install --downloadonly --downloaddir=/tmp httpd

5.3 yum源制作

5.3.1 进入光盘挂载目录

cd CentOS-6.8-x86_64/

目录结构大致如下:

tree -L 2

显示如下:

.
├── DVD1
│   ├── CentOS_BuildTag
│   ├── EFI
│   ├── EULA
│   ├── GPL
│   ├── images
│   ├── isolinux
│   ├── Packages
│   ├── RELEASE-NOTES-en-US.html
│   ├── repodata
│   ├── RPM-GPG-KEY-CentOS-6
│   ├── RPM-GPG-KEY-CentOS-Debug-6
│   ├── RPM-GPG-KEY-CentOS-Security-6
│   ├── RPM-GPG-KEY-CentOS-Testing-6
│   └── TRANS.TBL
├── DVD2
│   ├── CentOS_BuildTag
│   ├── EULA
│   ├── Packages
│   ├── RPM-GPG-KEY-CentOS-6
│   ├── RPM-GPG-KEY-CentOS-Debug-6
│   ├── RPM-GPG-KEY-CentOS-Security-6
│   ├── RPM-GPG-KEY-CentOS-Testing-6
│   └── TRANS.TBL
[...]

9 directories, 27 files

5.3.2 生成yum源所需的信息

createrepo .
createrepo -g repodata/repomd.xml .

5.4 curl的使用

curl --ftp-ssl -v -k -s  -u user1:pwd1 ftp://ftp.cmdschool.org/data/ -T "/home/will/file1.xlsx"

6 逻辑结构

6.1 if的使用

6.1.1 判断目录是否存在

if [ ! -d /backup ]; then
 mkdir /backup
fi

注:如果检测到目录“/backup”不存在则建立目录“/backup”

6.1.2 判断文件是否存在

if [ ! -f /backup/list.txt ]; then
 rm -rf /backup/list.txt
fi

注:如果检测到文件“/backup/list.txt”存在则删除文件“/backup/list.txt”

6.1.3 其他判断

man bash

输入如下命令:

\CONDITIONAL EXPRESSIONS

7 测试或检查命令

7.1 IO速度测试

7.1.1 写速度测试

dd if=/dev/zero of=/dev/sda1 bs=8k count=800000
dd if=/dev/zero of=/data/test.iso bs=8k count=80000

7.1.2 读速度测试

dd if=/dev/sda1 of=/dev/null bs=8k count=800000
dd if=/data/test.iso of=/dev/null bs=8k count=80000

8 邮件相关

8.1 邮件发送

8.1.1 Shell直接处理

mail -s "test" admin@cmdschool.org
hello,this is test mail
[ctrl + d]

8.1.2 管道命令

echo "hello,this is test mail" | mail -s "test2" admin@cmdschool.org

8.1.3 文件导入

echo "hello,this is test mail" > mail.txt
mail -s "test3" admin@cmdschool.org < mail.txt

8.1.4 含附件发送

1)安装相关包

yum install sharutils

2)测试发送

echo "hello,this is test mail" > mail.txt
tar -cf attachment.tar mail.txt
uuencode attachment.tar attachmentName | mail -s "test4" admin@cmdschool.org < mail.txt

9 备份相关

9.1 磁带机控制

9.1.1 安装磁带机控制软件

yum install mt-st

9.1.2 列出磁带机状态

mt -f /dev/st0 status
mt -f /dev/st0 status ; echo $?

注:SCSI接口磁带机显示为/dev/st[n-1];ATAPI显示为/dev/ht[n-1]

9.1.3 擦除磁带

mt -f /dev/st0 erase

9.1.4 倒带

mt -f /dev/st0 rewind

9.1.5 拉紧磁带

mt -f /dev/st0 retension

9.2 单机备份操作

9.2.1 列出明细操作

tar tvf /dev/st0

9.2.2 创建数据操作

tar cvf /dev/st0 backupFileName

9.2.3 追加数据操作

tar rvf /dev/st0 backupFileName

9.2.4 提取数据操作

tar xvf /dev/st0 backupFileName

10 bash

10.1 bash快捷方式

10.1.1 编辑命令

Ctrl + a :移到命令行首
Ctrl + e :移到命令行尾
Ctrl + f :按字符前移(右向)
Ctrl + b :按字符后移(左向)
Alt + f :按单词前移(右向)
Alt + b :按单词后移(左向)
Ctrl + xx:在命令行首和光标之间移动
Ctrl + u :从光标处删除至命令行首
Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Alt + d :从光标处删除至字尾
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符
Ctrl + y :粘贴至光标后
Alt + c :从光标处更改为首字母大写的单词
Alt + u :从光标处更改为全部大写的单词
Alt + l :从光标处更改为全部小写的单词
Ctrl + t :交换光标处和之前的字符
Alt + t :交换光标处和之前的单词
Alt + Backspace:与 Ctrl + w 相同类似,分隔符有些差别 [感谢 rezilla 指正]

10.1.2 重新执行命令

Ctrl + r:逆向搜索命令历史
Ctrl + g:从历史搜索模式退出
Ctrl + p:历史中的上一条命令
Ctrl + n:历史中的下一条命令
Alt + .:使用上一条命令的最后一个参数

10.1.3 控制命令

Ctrl + l:清屏
Ctrl + o:执行当前命令,并选择上一条命令
Ctrl + s:阻止屏幕输出
Ctrl + q:允许屏幕输出
Ctrl + c:终止命令
Ctrl + z:挂起命令
Bang (!) 命令

!!:执行上一条命令
!blah:执行最近的以 blah 开头的命令,如 !ls
!blah:p:仅打印输出,而不执行
!$:上一条命令的最后一个参数,与 Alt + . 相同
!$:p:打印输出 !$ 的内容
!*:上一条命令的所有参数
!*:p:打印输出 !* 的内容
^blah:删除上一条命令中的 blah
^blah^foo:将上一条命令中的 blah 替换为 foo
^blah^foo^:将上一条命令中所有的 blah 都替换为 foo

==========================================================
参考文献:
http://lorysun.blog.51cto.com/1035880/1606530/
http://www.360doc.com/content/13/0523/16/7044580_287544243.shtml
http://www.mzone.cc/article/317.html
http://wenku.baidu.com/link?url=1rI4xuYZVvkTkG9Vz3yj16cQ_IfoCiUg5o8fry4rflf8-ql5KqRag2ZBlDZqVDb-ad0hQrvKvoMYLILxiyBcXF29vFHubRrXhe6EcyZrPYe

没有评论

发表回复

RHEL-Like
如何配置rsyncd服务?

1 前言 一个问题,一篇文章,一出故事。 由于笔者想实现文件通过rsync自动传输,但是又不想使用o …

RHEL-Like
如何用pam_google_authenticator认证模块实现SSH 2FA?

1 前言 一个问题,一篇文章,一出故事。 笔者想开启2FA以便增强SSH服务的安全性,于是便整理此文 …

RHEL-Like
如何升级RHEL clamav杀毒?

1 前言 一个问题,一篇文章,一出故事。 笔者需要卸载旧的病毒软件,然后更新rpm包的病毒软件,于是 …