linux运维中的命令梳理(一)

在linux日常运维中,我们平时会用到很多常规的操作命令。

在修改文件后,执行下面操作进行代码提交到git:

git add .                                            

git status                               #查看修改了哪些文件信息

git commit -m "edit message"                         

git push                                             

 

-------------------------------------------------------

添加主机名:

# hostname nginx-web01

# vim /etc/sysconfig/network

HOSTNAME= nginx-web01

# vim /etc/hosts

127.0.0.1 nginx-web01

 

还有一种终极修改:

# echo "kernel.hostname = nginx-web01" >> /etc/sysctl.conf

# sysctl -p

---------------------------------------------------------------------------------

-------------------------------------------------------------------------------

[root@zabbix-server ~]# who

root     tty1         2017-10-24 22:33

root     pts/0        2017-10-30 09:30 (172.16.24.193)

root     pts/2        2017-10-30 10:19 (172.16.24.193)

chenlin  pts/3        2017-10-26 15:13 (172.16.24.6)

 

只有root用户才能踢人。任何用户都可以踢掉自己。

 

第一种方法:通过查找出TTY的pid进行kill

[root@zabbix-server ~]# ps -ef|grep pts/3

root      6443  6365  0 10:20 pts/2    00:00:00 grep pts/3

chenlin  26645 26629  0 Oct26 ?        00:00:00 sshd: chenlin@pts/3

chenlin  26646 26645  0 Oct26 pts/3    00:00:00 -bash

[root@zabbix-server ~]# kill -9 26645

[root@zabbix-server ~]# who

root     tty1         2017-10-24 22:33

root     pts/0        2017-10-30 09:30 (172.16.24.193)

root     pts/2        2017-10-30 10:19 (172.16.24.193)

 

第二种:pkill -kill -t TTY

[root@zabbix-server ~]# pkill -kill -t tty1

[root@zabbix-server ~]# who

root     pts/0        2017-10-30 09:30 (172.16.24.193)

root     pts/2        2017-10-30 10:19 (172.16.24.193)

[root@zabbix-server ~]# pkill -kill -t pts/0

[root@zabbix-server ~]# who

root     pts/2        2017-10-30 10:19 (172.16.24.193)

-------------------------------------------------------------------------------

 

删除空格行:

非编辑状态下输入:g/^$/d

删除行首空格:

非编辑状态下输入:%s/^\s*//g

删除行尾空格:

非编辑状态下输入:%s/\s*$//g

 

-------------------------------------------------------

tomcat里面的war包可以使用unzip解压

先关闭tomcat服务,然后创建webapps,将war包放到webapps下解包,然后再将war包删除,最后启动tomcat

 

 

强制踢掉登陆用户的方法

当一台服务器uptime命令查看负载很高的时候,可以通过:

1

2

3

4

5

6

7

8

9

top命令(按数字1可以查看到每颗CPU的使用情况;大写P降序查看CPU使用率,大写M降序查看内存使用率)

htop命令(和top命令差不多,P、M分别表示降序查看CPU和内存使用率)

iftop命令(流量监控,可以看出哪些机器跟本机有连接)

还可以查看crontab有没有定时任务在消耗资源

 

iostat命令(iostat 2 5,重点看下%idel剩余使用率)查看IO性能

iotop命令是一个用来监视磁盘I/O使用状况的top类工具,使用iotop命令可以很方便的查看每个进程是如何使用IO的.

 

mpstat命令(mpstat 2 5,重点看下%idel剩余使用率)查看CPU性能

vim使用技巧

删除不包含任何空格的空行:g/^$/d

删除包含空格的空行:g/^\s*$/d 

删除行首空格:%s/^\s*//g

删除行尾空格:%s/\s*$//g

在所有“--”处进行分行:%s/--/\r/g

删除只有空格的行: %s/^\s\+$//

删除连续两个或两个以上空行,只留一个: %s/\n\{3,\}/\r\r/

清空一行的内容而不删除一行: 0D    (或者0d$)

复制第6行到第9行之间的内容到第12行后面: 6,9 co 12

删除每行第一个字符: %s/^.//g

 

删除当前光标下的字符: x

删除光标之后的单词剩余部分: dw

删除光标之后的该行剩余部分: d$       (删除光标之前的该行剩余部分: d^)

删除当前行: dd

c功能和d相同,区别在于完成删除操作后进入INSERT MODE(即进入编辑模式),比如cw删除贯标之后的单词剩余部分后进入编辑模式

mkdir -p  /home/tools

cd /home/tools

wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz

tar zxvf rarlinux-3.8.0.tar.gz

cd rar

make

make install

 

/opt/www目录压缩为www.rar命令为:

rar a www.rar /opt/www

 

将www.rar解压命令(下面两种方式)

1)rar x www.rar          //解压成www目录

2)unrar -e www.tar       //解压出来的是www目录下的文件,而不是直接的www目录

 

-------------------------------------------

1)报错

bash/usr/local/bin/rar/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

解决办法:

yum install glibc.i686

 

2)报错

error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

解决办法:

yum install libstdc++.so.6

日常操作中的便捷指令-----------------------------------linux下的rar包解压-------------------------------------

1

# nmap -sn 192.168.10.0/24    查看192.168.10.0/24网段的机器启用情况

查看一个机器的外网ip

1

2

# curl ifconfig.me

# curl ifconfig.me/all

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

1)使用pgrep快速查找一个PID

pgrep遍历目前正在运行的进程然后列出符合查找规则的进程ID(PID)。

# pgrep ssh

这条命令会列出所有与ssh有关的进程。

 

2)执行上次执行过的命令

这个标题有些绕口,但是它是名副其实的。

# !!

这会执行你上一次在命令行中执行过的命令。

 

3)执行最近一次以xx开头的命令(lxx)

如果你想要从命令行历史中执行一个iptables开头的命令时,你可以使用如下命令:

# !ipta

它会执行最近一次在命令行中执行且以字母ipta开头的命令。

 

4)反复执行一个命令并在屏幕上输出

watch会反复运行一个命令,并在屏幕上打印输出。它可以让你实时的观察程序的输出变化。默认情况下,程序每2秒运行一次。watch命令与tail命令很相似。

# watch -d ls -l

这条命令会监视当前目录的所有文件,并且高亮文件所发生的改变。

 

5)在VI/VIM中快速保存

如果你很匆忙,你可以通过"shift + zz"快速地从vim的插入模式中退出。

 

6)可以使用如下命令返回你上一次所在的目录:

# cd -

 

7)设置文件的时间戳。日期格式是(YYMMDDhhmm)

比如下面这条命令可以把aaa文件的时间戳设置成2017-01-01 12:00

[root@test3-237 ~]# touch -c -t 1801011200 aaa

[root@test3-237 ~]# ll aaa

-rw-r--r--. 1 root root 9 Jan  1  2018 aaa

[root@test3-237 ~]# stat aaa

  File: `aaa'

  Size: 9           Blocks: 8          IO Block: 4096   regular file

Device: fc02h/64514d  Inode: 265217      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2018-01-01 12:00:00.000000000 +0800

Modify: 2018-01-01 12:00:00.000000000 +0800

Change: 2017-04-24 16:35:53.028995737 +0800

 

8)访问上一个命令中的最后一个参数,使用Esc + .

[root@test3-237 ~]# ls /usr/local/mysql/

 

比如执行了上面的命令,现在想切换到/usr/local/mysql目录下,做法是:

先输入cd,然后在后面依次按键Esc 加上 .号就会自动补出/usr/local/mysql(即上一个命令中的最后一个参数)

 

9)linux终端操作上的快捷键

ctrl +a   跳到行首

ctrl +e   跳到行尾

ctrl +u   剪切光标之前的内容

ctrl +k   剪切光标之后的内容

ctrl +w   删除光标之前的内容

ctrl +s   锁住当前终端

ctrl +q   当当前终端解锁

 

10)vim编辑器里常用快捷键

gg  光标跳到第一行

nG  光标跳到第n行。也可以在尾行模式下输入:n  回车即可

G   光标跳到最后一行

 

o  光标跳到当前所在行的下一行

O  光标跳到当前所在行的上一行

 

yyp  复制当前所在行的内容到下一行

yyP  复制当前所在行的内容到上一行

 

dd    删除当前所在行

ndd   删除当前以下n行

 

shift+v  选中行区域

ctrl+v   选中列区域

 

命令行模式下按键^    跳到行首,相当于home键

命令行模式下按键$    跳到行尾,相当于end键

 

命令行模式下按键u    撤销

命令行模式下按键r    恢复

 

尾行模式下输入:%s/m/n/g   替换文件中所有行中的m字符为n字符

尾行模式下输入:s/m/n/g    替换光标所在行的m字符为n字符

命令行日常系快捷键(不分大小写)


CTRL + A 移动光标到行首
CTRL + E 移动光标到行末
CTRL + U 剪切光标前的内容
CTRL + K 剪切光标至行末的内容
CTRL + Y 粘贴
CTRL + S 锁住当前终端
CTRL + Q 解锁
CRTL + T 将光标所在当前字符移到前一个字符的前面
CRTL + W 删除光标前面的内容
Shift + Insert 向终端内粘贴文本
ESC + . 显示上一条命令的最后一部分

暂停或挂起前台的命令,并在后台运行它(相当于nohup .... &)
当在linux终端里运行一个要执行很长时间的命令,为了让其在后台运行(释放当前终端),步骤如下:
CTRL + Z     将这个命令在前台挂起,会显示一个序列号,比如1
bg 1            即bg 序列号
disown -a     将其放到后台运行。这样即使退出ssh登陆后,命令仍会在目标机器上运行

设置系统环境变量
1)在终端命令行下设置,这是临时设置。服务器重启后就失效了。比如export PATH=$APTH:/usr/local/mysql/bin 
2) 在/etc/profile文件里设置,这是永久性设置。比如
# vim /etc/profile
.....
export PATH=$APTH:/usr/local/mysql/bin

# source /etc/profile
需要注意的是:
在/etc/profile里设置系统环境变量时,路径末尾不能以"/"结尾,否则将导致整个PATH变量出错。

alias设置别名:
在当前用户家目录的.bashrc文件中设置,如下设置:
[root@wangshibo ~]# cat /root/.bashrc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# .bashrc

 

# User specific aliases and functions

 

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

alias nginx='/opt/zwl/myscripts/nginx.sh'

alias phpd5329='/opt/zwl/myscripts/phpd5329.sh'

alias mysql='/Data/app/mysql5.6.25/bin/mysql'

alias grep='grep --color'

 

# Source global definitions

if [ -f /etc/bashrc ]; then

    /etc/bashrc

fi

linux下删除特殊字符命名文件(加转义符号)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@cdn tmp]# touch \(22\)

[root@cdn tmp]# touch \1231

[root@cdn tmp]# touch \\1231

[root@cdn tmp]# touch \<22:23\>

[root@cdn tmp]# ll

-rw-r--r-- 1 root root 0 Nov 19 11:47 (22)

-rw-r--r-- 1 root root 0 Nov 19 11:48 1231

-rw-r--r-- 1 root root 0 Nov 19 11:49 \1231

-rw-r--r-- 1 root root 0 Nov 19 11:48 <22:23>

删除的时候,也要加上转义符号"/"

[root@cdn tmp]# rm -rf 1231

[root@cdn tmp]# rm -rf \\1231

[root@cdn tmp]# rm -rf \(22\)

[root@cdn tmp]# rm -rf \<22:23\>

echo命令中使用-e选项启用'\'转义,将'\n'解析成换行,如下:
[root@bastion-IDC ~]# echo -e "q11\n3452345\nHASHHDF\n数据库\nuuu\n4444" >a.txt
[root@bastion-IDC ~]# cat a.txt
q11
3452345
HASHHDF
数据库
uuu
4444

xargs命令:这个命令的使用率很高!可参考:http://man.linuxde.net/xargs
这个命令可以变多行为一行输出
结合管道符|使用,表示将前面命令结果输出

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

[root@slave-server ~]# rpm -qa|grep ssh

openssh-5.3p1-118.1.el6_8.x86_64

openssh-server-5.3p1-118.1.el6_8.x86_64

libssh2-1.4.2-2.el6_7.1.x86_64

openssh-clients-5.3p1-118.1.el6_8.x86_64

[root@slave-server ~]# rpm -qa|grep ssh|xargs

openssh-5.3p1-118.1.el6_8.x86_64 openssh-server-5.3p1-118.1.el6_8.x86_64 libssh2-1.4.2-2.el6_7.1.x86_64 openssh-clients-5.3p1-118.1.el6_8.x86_64

 

[root@slave-server ~]# cat test.file

dfs 123 45  56

asdf ii  iij  jnh

fg hy 7u 8i 9o

0o o00 67y jhsdafhja asdfasdfasdfasdfasdfs

[root@slave-server ~]# cat test.file|xargs

dfs 123 45 56 asdf ii iij jnh fg hy 7u 8i 9o 0o o00 67y jhsdafhja asdfasdfasdfasdfasdfs

 

xargs 结合-n选项,表示以n个字符为一行行输出:

[root@slave-server ~]# cat test.file |xargs -n2

dfs 123

45 56

asdf ii

iij jnh

fg hy

7u 8i

9o 0o

o00 67y

jhsdafhja asdfasdfasdfasdfasdfs

[root@slave-server ~]# cat test.file |xargs -n5

dfs 123 45 56 asdf

ii iij jnh fg hy

7u 8i 9o 0o o00

67y jhsdafhja asdfasdfasdfasdfasdfs

 

xargs结合-d选项表示自定义一个定界符:

[root@slave-server ~]# echo "nameXnameXnameXname" | xargs -dX

name name name name

[root@slave-server ~]# echo "nameXnameXnameXname" | xargs -dX -n1

name

name

name

name

 

[root@slave-server ~]# echo "nameXnameXnameXname" | xargs -dX -n2

name name

name name

 

[root@slave-server ~]# echo "nameXnameXnameXname" | xargs -dX -n3

name name name

name

 

xargs结合选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:

[root@slave-server ~]# cat arg.txt

 

aaa

bbb

ccc

[root@slave-server ~]# cat arg.txt |xargs

aaa bbb ccc

[root@slave-server ~]# cat arg.txt |xargs -I {} echo wang {} -l

wang aaa -l

wang bbb -l

wang ccc -l

[root@slave-server ~]# cat arg.txt |xargs -I {} echo wang {} shibo

wang aaa shibo

wang bbb shibo

wang ccc shibo

 

停止php进程

[root@slave-server ~]# ps -ef|grep php|grep -v grep|awk -F" " '{print $2}'|xargs kill -9

 

[root@slave-server opt]# ll

total 12

-rw-r--r--. 1 root root  0 Jan  6 07:09 aa

-rw-r--r--. 1 root root  0 Jan  6 07:09 bb

-rw-r--r--. 1 root root  0 Jan  6 07:09 dd

-rw-r--r--. 1 root root 24 Jan  6 06:23 haha.txt

-rw-r--r--. 1 root root 17 Jan  6 06:29 hehe.txt

-rw-r--r--. 1 root root  6 Jan  6 06:32 test.sh

-rw-r--r--. 1 root root  0 Jan  6 07:09 vv

[root@slave-server opt]# ls -l|awk -F" " '{print $9}'|xargs

aa bb dd haha.txt hehe.txt test.sh vv

系统信息查询
cat /etc/issue 查看系统版本
cat /etc/redhat-release 查看系统版本
getconf LONG_BIT 查看系统的位数(32bit or 64bit)
arch 显示机器的处理器架构
uname -m 显示机器的处理器架构 
uname -r 显示正在使用的内核版本 
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) 
hdparm -i /dev/hda 罗列一个磁盘的架构特性 
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 
cat /proc/cpuinfo 显示CPU info的信息 
cat /proc/interrupts 显示中断 
cat /proc/meminfo 校验内存使用 
cat /proc/swaps 显示哪些swap被使用 
cat /proc/version 显示内核的版本 
cat /proc/net/dev 显示网络适配器及统计 
cat /proc/mounts 显示已加载的文件系统 
lspci -tv 罗列 PCI 设备 
lsusb -tv 显示 USB 设备

cal 2007 显示2007年的日历表 
date 041217002007.00 设置日期和时间 - 月日时分年.秒 
clock -w 将时间修改保存到 BIOS

echo 1 >/proc/sys/vm/drop_caches 手动释放缓存
echo 1 >/proc/sys/net/ipv4/ip_forward 打开ip路由转发功能
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all 禁止ping(禁止别人ping本机ip)

ntpdate us.pool.ntp.org     在线更新系统时间

系统最小化安装,没装开发环境,需要yum groupinstall -y "development tools"安装

date命令总结:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

date命令是显示或设置系统时间与日期。 很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。

 

选项:

-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;

-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;

-u:显示GMT;

--help:在线帮助;

--version:显示版本信息。

 

参数:

<+时间日期格式>:指定显示时使用的日期时间格式。

 

日期格式字符串列表:

%a    当前locale 的星期名缩写(例如: 日,代表星期日),星期的简称(Sun~Sat)

%A    当前locale 的星期名全称 (如:星期日),星期的全称(Sunday~Saturday)

%b    当前locale 的月名缩写 (如:一,代表一月)

%B    当前locale 的月名全称 (如:一月),月的全称(January~December)

%c    当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25),日期和时间(Tue Nov 20 14:12:58 2012)

%C    世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)

%d    按月计的日期(例如:01),一个月的第几天(01~31)

%D    按月计的日期;等于%m/%d/%y;日期(mm/dd/yy) ,相当于%x

%e    按月计的日期,添加空格,等于%_d

%F    完整日期格式,等价于 %Y-%m-%d

%g    ISO-8601 格式年份的最后两位 (参见%G)

%G    ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用

%h    等于%b,月的简称(Jan~Dec)

%H    小时,24小时制(00~23)

%I    小时,12小时制(01~12)

%c    按年计的日期(001-366)

%k    小时,24小时制(0~23)

%l    小时,12小时制(1~12)

%m    月份(01~12)

%M    分钟(00~59)

%j    一年的第几天(001~366)

%n    换行

%N    纳秒(000000000-999999999)

%p    显示出AM或PM,即显示当前locale下的"上午"或者"下午",未知时输出为空

%P    与%p 类似,但是输出小写字母

%r    当前locale下的12 小时时钟时间 (hh:mm:ss %p)(如:11:11:04 下午)

%R    24 小时时间的时和分,等价于 %H:%M

%s    自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数,即从1970年1月1日00:00:00到目前经历的秒数

%S    显示秒(00~59)

%t    输出制表符 Tab

%T    显示时间,24小时制(hh:mm:ss),等于%H:%M:%S

%u    星期,1 代表星期一

%U    一年中的第几周,以周日为每星期第一天(00-53)

%V    ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)

%w    一星期中的第几日(0-6),0 代表周一,一个星期的第几天(0代表星期天)

%W    一年中的第几周,以周一为每星期第一天(00-53),一年的第几个星期(00~53,星期一为第一天)

%x    当前locale 下的日期描述 (如:12/31/99)

%X    显示时间的格式(%H:%M:%S),当前locale 下的时间描述 (如:23:13:48)  

%Z    显示时区,日期域(CST)

%y    年份最后两位数位 (00-99),(2016则是16)

%Y    年份

%z +hhmm              数字时区(例如,-0400)

%:z +hh:mm            数字时区(例如,-04:00)

%::z +hh:mm:ss        数字时区(例如,-04:00:00)

%:::z                 数字时区带有必要的精度 (例如,-04,+05:30)

%Z                    按字母表排序的时区缩写 (例如,EDT)

 

 

默认情况下,日期的数字区域以0 填充。

以下可选标记可以跟在"%"后:

 

  - (连字符)不填充该域

  _ (下划线)以空格填充

  0 (数字0)以0 填充

  ^ 如果可能,使用大写字母

  # 如果可能,使用相反的大小写

 

在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。

作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的

表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号。

 

时间输出

date是Linux系统里自带的一个系统命令,用来显示当前的系统时间,不过默认显示的结果里包括很多信息,特别是做为文件名输出时,不是很方便

好在date命令里包含格式化输出的选项

 

 

实例操作说明:

 

加减操作:

date +%Y%m%d //显示前天年月日

date -d "+1 day" +%Y%m%d //显示前一天的日期

date -d "-1 day" +%Y%m%d //显示后一天的日期

date -d "-1 month" +%Y%m%d //显示上一月的日期

date -d "+1 month" +%Y%m%d //显示下一月的日期

date -d "-1 year" +%Y%m%d //显示前一年的日期

date -d "+1 year" +%Y%m%d //显示下一年的日期

 

设定时间:

date -s //设置当前时间,只有root权限才能设置,其他只能查看

date -s 20120523 //设置成20120523,这样会把具体时间设置成空00:00:00

date -s 01:01:01 //设置具体时间,不会对日期做更改

date -s "01:01:01 2012-05-23" //这样可以设置全部时间

date -s "01:01:01 20120523" //这样可以设置全部时间

date -s "2012-05-23 01:01:01" //这样可以设置全部时间

date -s "20120523 01:01:01" //这样可以设置全部时间

 

有时需要检查一组命令花费的时间,比如检查“ntpdate us.pool.ntp.org”和“yum list”等命令执行所花费的时间:

[root@bastion-IDC ~]# cat time.sh

#!/bin/bash

start=$(date +%s)

ntpdate us.pool.ntp.org &> /dev/null

yum list > /dev/null 2>&1

end=$(date +%s)

difference=$(( end - start ))

echo $difference seconds

 

[root@bastion-IDC ~]# sh time.sh

7 seconds

 

 

输出当前日期:

[root@bastion-IDC ~]# date +"%Y-%m-%d"

2009-12-07

 

输出昨天日期:

[root@bastion-IDC ~]# date -d "1 day ago" +"%Y-%m-%d"

2012-11-19

 

2秒后输出:

[root@bastion-IDC ~]# date -d "2 second" +"%Y-%m-%d %H:%M.%S"

2012-11-20 14:21.31

 

传说中的 1234567890 秒:

[root@bastion-IDC ~]# date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"

2009-02-13 23:02:30

 

普通转格式:

[root@bastion-IDC ~]# date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"

2009/12/12 00:00.00

 

apache格式转换:

[root@bastion-IDC ~]# date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"

2009-12-05 00:00.37

 

格式转换后时间游走:

[root@bastion-IDC ~]# date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"

2007-12-05 00:00.37

 

 

[root@bastion-IDC ~]# date "+%Y-%m-%d" 

2013-02-19 

[root@bastion-IDC ~]# date "+%H:%M:%S" 

13:13:59 

[root@bastion-IDC ~]# date "+%Y-%m-%d %H:%M:%S" 

2013-02-19 13:14:19 

[root@bastion-IDC ~]# date "+%Y_%m_%d %H:%M:%S"   

2013_02_19 13:14:58 

[root@bastion-IDC ~]# date -d today  

Tue Feb 19 13:10:38 CST 2013 

[root@bastion-IDC ~]# date -d now 

Tue Feb 19 13:10:43 CST 2013 

[root@bastion-IDC ~]# date -d tomorrow 

Wed Feb 20 13:11:06 CST 2013 

[root@bastion-IDC ~]# date -d yesterday 

Mon Feb 18 13:11:58 CST 2013

[root@bastion-IDC ~]# date

Thu Nov 24 15:55:21 CST 2016

[root@bastion-IDC ~]# date +%A

Thursday

[root@bastion-IDC ~]# date +%a

Thu

[root@bastion-IDC ~]# date +%b

Nov

[root@bastion-IDC ~]# date +%B

November

[root@bastion-IDC ~]# date +%y

16

[root@bastion-IDC ~]# date +%w

4

[root@bastion-IDC ~]# date +%W

47

[root@bastion-IDC ~]# date +%j

329

关机 (系统的关机、重启以及登出 ) 
shutdown -h now 关闭系统
init 0 关闭系统
init 6 重启系统
telinit 0 关闭系统
shutdown -h hours:minutes & 按预定时间关闭系统 
shutdown -c 取消按预定时间关闭系统 
shutdown -r now 重启
poweroff 关机
reboot 重启
logout 注销

文件和目录 
cd /home 进入 '/ home' 目录' 
cd .. 返回上一级目录 
cd ../.. 返回上两级目录 
cd 进入个人的主目录 
cd ~user1 进入个人的主目录 
cd - 返回上次所在的目录 
pwd 显示工作路径 
ls 查看目录中的文件 
ls -F 查看目录中的文件 
ls -l 显示文件和目录的详细资料 
ls -a 显示隐藏文件 
ls *[0-9]* 显示包含数字的文件名和目录名 
tree 显示文件和目录由根目录开始的树形结构(1) 
lstree 显示文件和目录由根目录开始的树形结构(2) 
mkdir dir1 创建一个叫做 'dir1' 的目录' 
mkdir dir1 dir2 同时创建两个目录 
mkdir -p /tmp/dir1/dir2 创建一个目录树 
rm -f file1 删除一个叫做 'file1' 的文件' 
rmdir dir1 删除一个叫做 'dir1' 的目录' 
rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 
rm -rf dir1 dir2 同时删除两个目录及它们的内容 
mv dir1 new_dir 重命名/移动 一个目录 
cp file1 file2 复制一个文件 
cp dir/* . 复制一个目录下的所有文件到当前工作目录 
cp -a /tmp/dir1 . 复制一个目录到当前工作目录 
cp -a dir1 dir2 复制一个目录 
ln -s file1 lnk1 创建一个指向文件或目录的软链接 
ln file1 lnk1 创建一个指向文件或目录的物理链接 
touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm) 
file file1 outputs the mime type of the file as text 
iconv -l 列出已知的编码 
iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. 
find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)

文件搜索 
find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 
find / -user user1 搜索属于用户 'user1' 的文件和目录 
find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 
find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限 
find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备 
locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令 
whereis halt 显示一个二进制文件、源码或man的位置 
which halt 显示一个二进制文件或可执行文件的完整路径

find命令在日常运维工作中使用率极高!下面重点总结下find命令的使用:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

find的使用格式如下:

  $ find <指定目录> <指定条件> <指定动作>

  - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

  - <指定条件>: 所要搜索的文件的特征。

  - <指定动作>: 对搜索结果进行特定的处理。

如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

 

find命令用于查找文件和目录,任何位于参数之前的字符串都将被视为欲查找的目录。

find 可以指定查找条件如名称,类型,时间,文件大小,权限和所有者查找,针对多个条件进行与或非的逻辑运算。我们可以控制find的查找的行为,还可以和其他命令组合使用。

find

find .

find . -print

三者等效, 查找当前目录下所有的文件和目录(递归子目录),以每行一个文件或者目录的形式列举出,不包含隐藏文件

find lib opt bin

同上,查找指定的多个目录(lib/opt/bin)

 

一、指定查找条件

1) 按名称查找

find . -name readme.txt

查找当前目录下(递归子目录)的所有名为readme.txt的文件

find . -name \*.txt

find . -name "*.txt"

查找当前目录下(递归子目录)的所有名称以.txt结尾的文件,注意*号的写法,需要前面加\或者放到双引号中

find . -iname \*.txt

默认find是区分大小写的,如果不想区分大小写,请使用-iname替代-name,如上则"abc.TXT"将被查找到

 

2) 按类型查找

find . -type d

查找当前目录下(递归子目录)的所有目录

find . -type f

查找当前目录下(递归子目录)的所有文件

find . -type l

查找当前目录下(递归子目录)的所有符号链接

 

3) 按时间查找

1. 以小时为单位的时间

find 命令三个选项用于按照时间查找,单位都是小时:

mtime — 文件内容上次修改时间

atime — 文件被读取或访问的时间

ctime — 文件状态变化时间

这三个选项都需要配置一个n值使用,可以是-n / n / +n:

-n 小于 n

n 正好与 n 相等

+n 大于 n

find . -mtime -1

查找当前目录下(递归子目录)的所有1小时内修改的文件和目录

find . -mtime +1

查找当前目录下(递归子目录)的所有修改时间超过1小时的文件和目录

find . -mtime 1

查找当前目录下(递归子目录)的所有恰好在1小时前修改的文件和目录

2. 以分钟为单位的时间

用法和*time类似,mmin、amin和cmin 的不同在于单位时间是分钟,用于查找在不到1小时的时间内变化了的文件和目录

find . -mmin -10

查找当前目录下(递归子目录)的所有10分钟内修改的文件和目录

find . -mmin +20

查找当前目录下(递归子目录)的所有20分钟外1小时内修改的文件和目录

3. 与特定的文件比较

-newer,-anewer和-cnewer选项用于查找与特定的文件比较的已修改或访问过的文件,类似mtime,atime和ctime

-newer 指内容最近被修改的文件

-anewer 指最近被读取过的文件

-cnewer 指状态最近发生变化的文件

find . -newer a.txt

查找当前目录下(递归子目录)的所有修改时间在a.txt之后(所以文件更新)的文件和目录

 

4) 按文件大小查找

1. -size 选项用于查找满足指定的大小条件的文件(注意不查找目录), +表示大于, -表示小于, 没有+1表示正好等于。文件大小的单位可以是字节(用c表示), kb(用k表示)。

find . -size -100c

查找当前目录下(递归子目录)的所有文件大小小于100字节的文件

find . -size +100k

查找当前目录下(递归子目录)的所有文件大小大于100k的文件

find . -size 0

查找当前目录下(递归子目录)的所有文件大小为0的文件

2. -empty 查找空文件和空文件夹, 和-size 0不同的在于-size 0 只查找空文件,或者说-empty -type f 等同于-size 0 :

find . -empty

查找当前目录下(递归子目录)的所有文件大小为0的文件和空文件夹

find . -empty -type f

查找当前目录下(递归子目录)的所有文件大小为0的文件

find . -empty -type d

查找当前目录下(递归子目录)的所有空目录

 

5) 按权限和所有者查找

find . -perm 777

查找当前目录下(递归子目录)的所有权限为777的文件和目录

find . -perm -u=rwx

查找当前目录下(递归子目录)的所有user权限为rwx的文件和目录

find . -perm -ug=x

查找当前目录下(递归子目录)的所有user和group权限为x的文件和目录

find . -user sky

查找当前目录下(递归子目录)的所有user为sky的文件和目录

find . -group users

查找当前目录下(递归子目录)的所有group为users的文件和目录

 

二、查找条件的逻辑运算

1. 逻辑与

find . -name "*.java" -size -mmin -10

find . -name "*.java" -a -size -mmin -10

查找当前目录下(递归子目录)的所有名为*.java并且修改时间在10分钟之内的文件,-a是默认选项

2. 逻辑或

find . -name "*.class" -o -name "*.jar"

查找当前目录下(递归子目录)的所有名为*.class或者*.jar的文件和目录

3. 逻辑非

find . ! -user sky

查找当前目录下(递归子目录)的所有user不是sky的文件和目录

 

三、控制查找的行为

find . -maxdepth 3 -name "*.txt"

查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不超过3层

find . -maxdepth 1 -name "*.txt"

查找当前目录下(不递归子目录,因为maxdepth为1)的所有名为*.txt的文件

find . -mindepth 3 -name "*.txt"

查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不低于3层

find . -mindepth 1 -name "*.txt"

查找当前目录下的子目录中(递归子目录)的所有名为*.txt的文件,不包含当前目录

find . -depth -name "*.txt"

查找当前目录下(递归子目录)的所有名为*.txt的文件,每个目录都是先在目录中进行查找,然后才继续查找其子目录

 

四、 find和其他命令的组合

find . -name "*.jar" -exec ls -l {} \;

find . -name "*.jar" -ls

查找当前目录下(递归子目录)的所有*.jar文件并使用ls -l列出详细信息

find . -name "*.java" -exec grep -H -m 1 HashMap {} \;

查找当前目录下(递归子目录)的所有的含有"HashMap"字样的*.java文件

(grep -H -m 1的意思是打印文件名,而且如果文件中有一次匹配就退出,避免多次匹配时为这一个文件打印多行)

find . -name "*.sh" -exec mv {} backup \;

查找当前目录下(递归子目录)的所有的*.sh文件并移动到backup目录中、、、、

 

 

例如经常使用的一个命令场景:

统计代码行数:

find ./ -name "*.[ch]" -o -name "*.cpp" | xargs wc -l

-o:(or)表示两个表达式或的关系。

-a:(and)表示和的关系

xargs将文本内容拆成后面命令的参数。

 

 

以下列出一些find日常使用的命令场景:

1.当前目录下查找文件

[root@linuxidc.com ~]# find . -name test.txt

./findtest/test.txt

2.指定目录下查找

[root@linuxidc.com ~]# find /root/ -name test.txt

/root/findtest/test.txt

3.忽略大小写查找

[root@linuxidc.com ~]# find /root -iname test.txt

/root/findtest/test.txt

/root/findtest/TEST.txt

4.查找目录

[root@linuxidc.com ~]# find / -type d -name test

/usr/lib64/python2.7/unittest/test

/usr/lib64/python2.7/test

/usr/src/kernels/3.10.0-229.14.1.el7.x86_64/include/config/test

/usr/src/kernels/3.10.0-229.14.1.el7.x86_64/lib/raid6/test

5.按名称查找php文件

[root@linuxidc.com zabbix]# find . -type f -name events.php

./events.php

6.在目录中查找所有的php文件

[root@linuxidc.com zabbix]# find . -type f -name "*.php"

./graphs.php

./tr_logform.php

./authentication.php

./popup_httpstep.php

./image.php

..........

7.查找文件权限是777的

[root@linuxidc.com ~]# find . -type f -perm 0777 -print

./findtest/test.txt

8.查找文件权限不是777的

[root@linuxidc.com ~]# find . -type f ! -perm 0777 -print

9.查找644权限的SGID文件

[root@linuxidc.com ~]# find / -perm 2644

10.查找权限为551的粘着位文件

[root@linuxidc.com ~]# find / -perm 1551

11.查找所有SUID文件

root@linuxidc.com ~]# find / -perm /u=s

12.查找所有SGID文件

[root@linuxidc.com ~]# find / -perm /g+s

13.查找所有只读文件

[root@linuxidc.com ~]# find / -perm /u=r

14.查找所有可执行文件

[root@linuxidc.com ~]# find / -perm /a=x

15.查找所有777文件,并改为644

反斜杠用来告诉find何时命令结束

[root@linuxidc.com ~]# find / -type f -perm 0777 -print -exec chmod 644 {} \;

16.查找所有777的目录,并改为755

[root@linuxidc.com ~]# find / -type d -perm 777 -print -exec chmod 755 {} \;

17.查找并删除某个文件

[root@linuxidc.com ~]# find . -type f -name "test.txt" -exec rm -f {} \;

18.查找并删除多个文件

[root@linuxidc.com ~]# find . -type f -name "*.txt" -exec rm -f {} \;

19.查找所有的空文件

[root@linuxidc.com ~]# find /tmp -type f -empty

20.查找所有空目录

[root@linuxidc.com ~]# find /tmp -type d -empty

21.查找所有隐藏文件

[root@linuxidc.com ~]# find /tmp -type f -name ".*"

22.根据用户查找某个文件

[root@linuxidc.com ~]# find / -user root -name test.txt

23.根据用户查找所有的文件

在/home下属于某个用户的所有文件

[root@linuxidc.com ~]# find /home -user zabbix

/home/zabbix

/home/zabbix/.bash_history

/home/zabbix/.config

/home/zabbix/.config/abrt

/home/zabbix/mysql-community-release-el7-5.noarch.rpm

/home/zabbix/.lesshst

/home/zabbix/.cache

/home/zabbix/.cache/abrt

/home/zabbix/.cache/abrt/lastnotification

/home/zabbix/.bash_logout

/home/zabbix/.viminfo

/home/zabbix/.mysql_history

/home/zabbix/.bashrc

/home/zabbix/.bash_profile

24./home目录下查找某个组的所有文件

[root@linuxidc.com ~]# find /home -group developer

25./home目录下忽略大小写查找用户zabbix的所有文件

[root@linuxidc.com ~]# find /home -user zabbix -iname "*.txt"

26.查找50天之内修改过的文件

[root@linuxidc.com ~]# find / -mtime 50

27.查找50天之内被存取过的文件

[root@linuxidc.com ~]# find / -atime 50

28.查找50-100天之内修改过的文件

[root@linuxidc.com ~]# find / -atime +50 -mtime -100

29.查找1个小时之内有变化的文件

[root@linuxidc.com ~]# find / -cmin -60

30.查找1个小时之内修改过的文件

[root@linuxidc.com ~]# find / -mmin -60

31.查找1个小时之内被存取过的文件

[root@linuxidc.com ~]# find / -amin -60

32.查找所有的50M大小的文件

[root@linuxidc.com ~]# find / -size 50M

33.查找50-100M之间的文件

[root@linuxidc.com ~]# find / -size +50M -size -100M

34.查找并删除100M大小的文件

[root@linuxidc.com ~]# find / -size +100M -exec rm -rf {} \;

35.查找并删除指定类型,指定大小的文件

[root@linuxidc.com ~]# find / -type f -name *.mp3 -size +10M -exec rm {} \;

挂载一个文件系统 
mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在 
umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出 
fuser -km /mnt/hda2 当设备繁忙时强制卸载 
umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用 
mount /dev/fd0 /mnt/floppy 挂载一个软盘 
mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom 
mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom 
mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom 
mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件 
mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统 
mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备 
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享

磁盘空间 
df -h 显示已经挂载的分区列表 
ls -lSr |more 以尺寸大小排列文件和目录 
du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间' 
du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小 
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统) 
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)

用户和群组 
groupadd group_name 创建一个新用户组 
groupdel group_name 删除一个用户组 
groupmod -n new_group_name old_group_name 重命名一个用户组 
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户 
useradd user1 创建一个新用户 
userdel -r user1 删除一个用户 ( '-r' 排除主目录) 
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性 
passwd 修改口令 
passwd user1 修改一个用户的口令 (只允许root执行) 
chage -E 2005-12-31 user1 设置用户口令的失效期限 
pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户 
grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组 
newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组

文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消 
ls -lh 显示权限 
ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示 
chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限 
chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限 
chown user1 file1 改变一个文件的所有人属性 
chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 
chgrp group1 file1 改变文件的群组 
chown user1:group1 file1 改变一个文件的所有人和群组属性 
find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件 
chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限 
chmod u-s /bin/file1 禁用一个二进制文件的 SUID位 
chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的 
chmod g-s /home/public 禁用一个目录的 SGID 位 
chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 
chmod o-t /home/public 禁用一个目录的 STIKY 位

文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消 
chattr +a file1 只允许以追加方式读写文件 
chattr +c file1 允许这个文件能被内核自动压缩/解压 
chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件 
chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接 
chattr +s file1 允许一个文件被安全地删除 
chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘 
chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件 
lsattr 显示特殊的属性

打包和压缩文件 
bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件 
bzip2 file1 压缩一个叫做 'file1' 的文件 
gunzip file1.gz 解压一个叫做 'file1.gz'的文件 
gzip file1 压缩一个叫做 'file1'的文件 
gzip -9 file1 最大程度压缩 
rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包 
rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1' 
rar x file1.rar 解压rar包 
unrar x file1.rar 解压rar包 
tar -cvf archive.tar file1 创建一个非压缩的 tarball 
tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件 
tar -tf archive.tar 显示一个包中的内容 
tar -xvf archive.tar 释放一个包 
tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下 
tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包 
tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包 
tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包 
tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包 
zip file1.zip file1 创建一个zip格式的压缩包 
zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包 
unzip file1.zip 解压一个zip格式压缩包

RPM 包 - (Fedora, Redhat及类似系统) 
rpm -ivh package.rpm 安装一个rpm包 
rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 
rpm -U package.rpm 更新一个rpm包但不改变其配置文件 
rpm -F package.rpm 更新一个确定已经安装的rpm包 
rpm -e package_name.rpm 删除一个rpm包 
rpm -qa 显示系统中所有已经安装的rpm包 
rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包 
rpm -qi package_name 获取一个已安装包的特殊信息 
rpm -qg "System Environment/Daemons" 显示一个组件的rpm包 
rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 
rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表 
rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表 
rpm -q package_name --whatprovides 显示一个rpm包所占的体积 
rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l 
rpm -q package_name --changelog 显示一个rpm包的修改历史 
rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供 
rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表 
rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书 
rpm --checksig package.rpm 确认一个rpm包的完整性 
rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性 
rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间 
rpm -Va 检查系统中所有已安装的rpm包- 小心使用 
rpm -Vp package.rpm 确认一个rpm包还未安装 
rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件 
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包 
rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包

YUM 软件包升级器 - (Fedora, RedHat及类似系统) 
yum install package_name 下载并安装一个rpm包 
yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系 
yum update package_name.rpm 更新当前系统中所有安装的rpm包 
yum update package_name 更新一个rpm包 
yum remove package_name 删除一个rpm包 
yum list 列出当前系统中安装的所有包 
yum search package_name 在rpm仓库中搜寻软件包 
yum clean packages 清理rpm缓存删除下载的包 
yum clean headers 删除所有头文件 
yum clean all 删除所有缓存的包和头文件

DEB 包 (Debian, Ubuntu 以及类似系统) 
dpkg -i package.deb 安装/更新一个 deb 包 
dpkg -r package_name 从系统删除一个 deb 包 
dpkg -l 显示系统中所有已经安装的 deb 包 
dpkg -l | grep httpd 显示所有名称中包含 "httpd" 字样的deb包 
dpkg -s package_name 获得已经安装在系统中一个特殊包的信息 
dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表 
dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表 
dpkg -S /bin/ping 确认所给的文件由哪个deb包提供

APT 软件工具 (Debian, Ubuntu 以及类似系统) 
apt-get install package_name 安装/更新一个 deb 包 
apt-cdrom install package_name 从光盘安装/更新一个 deb 包 
apt-get update 升级列表中的软件包 
apt-get upgrade 升级所有已安装的软件 
apt-get remove package_name 从系统删除一个deb包 
apt-get check 确认依赖的软件仓库正确 
apt-get clean 从下载的软件包中清理缓存 
apt-cache search searched-package 返回包含所要搜索字符串的软件包名称

查看文件内容 
cat file1 从第一个字节开始正向查看文件的内容 
tac file1 从最后一行开始反向查看一个文件的内容 
more file1 查看一个长文件的内容 
less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作 
head -2 file1 查看一个文件的前两行 
tail -2 file1 查看一个文件的最后两行 
tail -f /var/log/messages 实时查看被添加到一个文件中的内容

文本处理 
cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT 
cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中 
cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中 
grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug" 
grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇 
grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行 
grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug" 
sed 's/stringa1/stringa2/g' filename.txt 将filename.txt文件中的 "string1" 替换成 "string2" 
sed '/^$/d' filename.txt 从filename.txt文件中删除所有空白行 
sed '/ *#/d; /^$/d' filename.txt 从filename.txt文件中删除所有注释和空白行 
echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容 
sed -e '1d' result.txt 从文件filename.txt 中排除第一行 
sed -n '/stringa1/p' 查看只包含词汇 "string1"的行 
sed -e 's/ *$//g' filename.txt 删除每一行最后的空白字符 
sed -e 's/stringa1//g' filename.txt 从文档中只删除词汇 "string1" 并保留剩余全部 
sed -n '1,5p;5q' filename.txt 查看从第一行到第5行内容 
sed -n '5p;5q' filename.txt 查看第5行 
sed -e 's/00*/0/g' filename.txt 用单个零替换多个零 
cat -n file1 标示文件的行数 
cat filename.txt | awk 'NR%2==1' 删除filename.txt文件中的所有偶数行 
echo a b c | awk '{print $1}' 查看一行第一栏 
echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏 
paste file1 file2 合并两个文件或两栏的内容 
paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分 
sort file1 file2 排序两个文件的内容 
sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) 
sort file1 file2 | uniq -u 删除交集,留下其他的行 
sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) 
comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容 
comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容 
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分

返回顶部索引 ^

字符设置和文件格式转换 
dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX 
unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS 
recode ..HTML < page.txt > page.html 将一个文本文件转换成html 
recode -l | more 显示所有允许的转换格式

文件系统分析 
badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块 
fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性 
fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 
e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 
e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 
fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 
fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性 
fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 
dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性

初始化一个文件系统 
mkfs /dev/hda1 在hda1分区创建一个文件系统 
mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统 
mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统 
mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统 
fdformat -n /dev/fd0 格式化一个软盘 
mkswap /dev/hda3 创建一个swap文件系统

SWAP文件系统 
mkswap /dev/hda3 创建一个swap文件系统 
swapon /dev/hda3 启用一个新的swap文件系统 
swapon /dev/hda2 /dev/hdb3 启用两个swap分区

备份 
dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份 
dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份 
restore -if /tmp/home0.bak 还原一个交互式备份 
rsync -rogpav --delete /home /tmp 同步两边的目录 
rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync 
rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录 
rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录 
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作 
dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件 
tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作 
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容 
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录 
tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接 
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录 
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包 
dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作 
dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容

光盘 
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容 
mkisofs /dev/cdrom > cd.iso 在磁盘上创建一个光盘的iso镜像文件 
mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件 
mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件 
cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件 
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件 
mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件 
cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中 
cd-paranoia -- "-3" 从一个CD光盘转录音轨到 wav 文件中(参数-3) 
cdrecord --scanbus 扫描总线以识别scsi通道 
dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧**************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值