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

-------------------------------------------------------
删除空格行:
非编辑状态下输入:g/^$/d
删除行首空格:
非编辑状态下输入:%s/^\s*//g
删除行尾空格:
非编辑状态下输入:%s/\s*$//g

-------------------------------------------------------
tomcat里面的war包可以使用unzip解压
先关闭tomcat服务,然后创建webapps,将war包放到webapps下解包,然后再将war包删除,最后启动tomcat

强制踢掉登陆用户的方法

-------------------------------------------------------------------------------
[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)
-------------------------------------------------------------------------------

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

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删除贯标之后的单词剩余部分后进入编辑模式

-----------------------------------linux下的rar包解压-------------------------------------

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

日常操作中的便捷指令

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

查看一个机器的外网ip

# curl ifconfig.me
# curl ifconfig.me/all
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

# .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下删除特殊字符命名文件(加转义符号)

[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 这个命令可以变多行为一行输出 结合管道符|使用,表示将前面命令结果输出

[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命令总结:

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命令的使用:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

Windows下RabbitMQ安装及入门

1.Windows下安装RabbitMQ需要以下几个步骤    (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,...

3587
来自专栏程序员阿凯

一条大河波浪宽 -- 数据库连接池实现

1154
来自专栏北京马哥教育

Python爬虫基础知识:urllib2的使用技巧

糖豆贴心提醒,本文阅读时间6分钟 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。 1.Proxy 的设置 urllib2 默认...

3075
来自专栏IT 指南者专栏

【SSH框架】之Struts2系列(二)

微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联 1、Struts2常量配置 (1)、Struts2默认常量配...

33812
来自专栏Java技术栈

单点登录终极方案之 CAS 应用及原理

Cookie的单点登录的实现方式很简单,但是也问题颇多。例如:用户名密码不停传送,增加了被盗号的可能。另外,不能跨域!

3152
来自专栏资深Tester

一定要知道的,那些Linux操作命令(二)

2246
来自专栏Jed的技术阶梯

Kafka 新版消费者 API(一):订阅主题

说明:这两个参数分别指定了 TCP socket 接收和发送数据包的缓冲区大小。如果它们被设为 -1,就使用操作系统的默认值。如果生产者或消费者与 broker...

9042
来自专栏程序员宝库

Linux 基础:文件查找 find

在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助。 find的语法比较简单,常用参数的就那么几个,比如 -name、 -type...

3406
来自专栏IMWeb前端团队

解放双手:如何在本地调试远程服务器上的Node代码

写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具、通过IDE(如vscode)、通过node-inspector,三者本质上差不多。...

5048
来自专栏逆向与安全

GDB多线程调试分析

多线程调试的主要任务是准确及时地捕捉被调试程序线程状态的变化的事件,并且GDB针对根据捕捉到的事件做出相应的操作,其实最终的结果就是维护一根叫thread li...

1240

扫码关注云+社区

领取腾讯云代金券