LINUX

2018-03-14 鲁鲁槟 收藏

鸟哥的Linux私房菜

一、入门

1.1、du

①、du [选项][文件]:显示每个文件和目录的磁盘使用空间。

②、参数

-a或-all  显示目录中个别文件的大小。   
-b或-bytes  显示目录或文件大小时,以byte为单位。   
-c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 
-k或--kilobytes  以KB(1024bytes)为单位输出。
-m或--megabytes  以MB为单位输出。   
-s或--summarize  仅显示总计,只列出最后加总的值。
-h或--human-readable  以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem  以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。   
-S或--separate-dirs   显示个别目录的大小时,并不含其子目录的大小。 
-X<文件>或--exclude-from=<文件>  在<文件>指定目录或文件。   
--exclude=<目录或文件>         略过指定的目录或文件。    
-D或--dereference-args   显示指定符号链接的源文件大小。   
-H或--si  与-h参数相同,但是K,M,G是以1000为换算单位。   
-l或--count-links   重复计算硬件链接的文件。

③、实例

du    显示目录或者文件所占空间,只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小
du log2012.log 显示指定文件所占空间
du scf    查看指定目录的所占空间
du log30.tar.gz log31.tar.gz    显示多个文件所占空间
du -s    只显示总和的大小
du -h test    方便阅读的格式显示
du -ah test    文件和目录都显示
du -c log30.tar.gz log31.tar.gz    显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和,加上-c选项后,du不仅显示两个目录各自占用磁盘空间的大小,还在最后一行统计它们的总和。
du|sort -nr|more    按照空间大小排序
du -h  --max-depth=1    输出当前目录下各个子目录所使用的空间

1.2、ls

①、ls [选项] [目录名]:列出目标目录中所有的子目录和文件。

②、参数

-a, –all 列出目录下的所有文件,包括以 . 开头的隐含文件
-A 同-a,但不列出“.”(表示当前目录)和“..”(表示当前目录的父目录)。
-c  配合 -lt:根据 ctime 排序及显示 ctime (文件状态最后更改的时间)配合 -l:显示 ctime 但根据名称排序否则:根据 ctime 排序
-C 每栏由上至下列出项目
–color[=WHEN] 控制是否使用色彩分辨文件。WHEN 可以是"never"、"always"或"auto"其中之一
-d, –directory 将目录象文件一样显示,而不是显示其下的文件。
-D, –dired 产生适合 Emacs 的 dired 模式使用的结果
-f 对输出的文件不进行排序,-aU 选项生效,-lst 选项失效
-g 类似 -l,但不列出所有者
-G, –no-group 不列出任何有关组的信息
-h, –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
–si 类似 -h,但文件大小取 1000 的次方而不是 1024
-H, –dereference-command-line 使用命令列中的符号链接指示的真正目的地
–indicator-style=方式 指定在每个项目名称后加上指示符号<方式>:none (默认),classify (-F),file-type (-p)
-i, –inode 印出每个文件的 inode 号
-I, –ignore=样式 不印出任何符合 shell 万用字符<样式>的项目
-k 即 –block-size=1K,以 k 字节的形式表示文件的大小。
-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-L, –dereference 当显示符号链接的文件信息时,显示符号链接所指示的对象而并非符号链接本身的信息
-m 所有项目以逗号分隔,并填满整行行宽
-o 类似 -l,显示文件的除组信息外的详细信息。   
-r, –reverse 依相反次序排列
-R, –recursive 同时列出所有子目录层

-s, –size 以块大小为单位列出所有文件的大小
-S 根据文件大小排序
–sort=WORD 以下是可选用的 WORD 和它们代表的相应选项:
extension -X status -c
none -U time -t
size -S atime -u
time -t access -u
version -v use -u
-t 以文件修改时间排序
-u 配合 -lt:显示访问时间而且依访问时间排序
配合 -l:显示访问时间但根据名称排序
否则:根据访问时间排序
-U 不进行排序;依文件系统原有的次序列出项目
-v 根据版本进行排序
-w, –width=COLS 自行指定屏幕宽度而不使用目前的数值
-x 逐行列出项目而不是逐栏列出
-X 根据扩展名排序
-1 每行只列出一个文件
–help 显示此帮助信息并离开
–version 显示版本信息并离开

③、实例

ls -lR /home/peidachang    列出/home/peidachang文件夹下的所有文件和目录的详细资料
ls -l t*    列出当前目录中所有以“t”开头的目录的详细内容
ls -F /opt/soft |grep /$    列出 /opt/soft 文件下面的子目录
ls -l /opt/soft | grep "^d"    列出 /opt/soft 文件下面的子目录详细情况
ls -ltr s*    列出目前工作目录下所有名称是s 开头的档案,愈新的排愈后面
ls -AF    列出目前工作目录下所有档案及目录;目录于名称后加"/", 可执行档于名称后加"*"
ls -l * |grep "^-"|wc -l    文件个数
ls -l * |grep "^d"|wc -l    目录个数
ls | sed "s:^:`pwd`/:"    在ls中列出文件的绝对路径
find $PWD -maxdepth 1 | xargs ls -ld    列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归
find $PWD | xargs ls -ld    递归列出当前目录下的所有文件(包括隐藏文件)的绝对路径
ls -tl --time-style=full-iso    指定文件时间输出格式
ls -ctl --time-style=long-iso    指定文件时间输出格式

1.3、vim

①、vim 单行删除与多行删除

  • 首先在命令模式下,输入“:set nu”显示行号;

  • 通过行号确定你要删除的行;

  • 命令输入“:32,65d”,回车键,32-65行就被删除了,很快捷吧 如果无意中删除错了,可以使用‘u’键恢复(命令模式下) 单行删除

1.4、chmod

chmod [-cfvR] [--help] [--version] mode file

①、作用

用于改变文件或目录的访问权限,用它控制文件或目录的访问权限

②、命令参数

  • -c 当发生改变时,报告处理信息

  • -f 错误信息不输出

  • -R 处理指定目录以及其子目录下的所有文件

  • -v 运行时显示详细处理信息

③、例子

chmod u+x,g+w f01  //为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01  //对文件f01的u,g,o都设置可执行属性

1.5、sudo

①、概念

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。

②、特性

它的特性主要有这样几点:

  • sudo能够限制用户只在某台主机上运行某些命令。

  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。

  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。

  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。

③、原理

在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。

sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。

由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。

1.6、chkconfig

①、概念

chkconfig命令检查、设置系统的各种服务。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

②、语法

chkconfig(选项)

  • --add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据;

  • --del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据;

  • --level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。

等级代号列表:

  • 等级0表示:表示关机

  • 等级1表示:单用户模式

  • 等级2表示:无网络连接的多用户命令行模式

  • 等级3表示:有网络连接的多用户命令行模式

  • 等级4表示:不可用

  • 等级5表示:带图形界面的多用户模式

  • 等级6表示:重新启动

需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

运行级文件:

  • 每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用-代替运行级。第二行对服务进行描述,可以用\跨行注释。

  • 例如random.init包含三行:

  • # chkconfig: 2345 20 80
    # description: Saves and restores system entropy pool for \
    # higher quality random number generation

③、实例

chkconfig --list             #列出所有的系统服务。
chkconfig --add httpd        #增加httpd服务。
chkconfig --del httpd        #删除httpd服务。
chkconfig --level httpd 2345 on        #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。
chkconfig --list               #列出系统所有的服务启动情况。
chkconfig --list mysqld        #列出mysqld服务设置情况。
chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭。
chkconfig mysqld on            #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级。
#memcached开机启动
chkconfig --level 35 memcached on
#关闭memcached开机启动
chkconfig memcached off
#把memcached移出开机启动
chkconfig --del memcached

如何增加一个服务:

  • 服务脚本必须存放在/etc/ini.d/目录下;

  • chkconfig --add servicename在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;

  • chkconfig --level 35 mysqld on修改服务的默认启动等级。

1.7、iptables

①、概念

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

②、语法

iptables(选项)(参数)

  • -t<表>:指定要操纵的表;

  • -A:向规则链中添加条目;

  • -D:从规则链中删除条目;

  • -i:向规则链中插入条目;

  • -R:替换规则链中的条目;

  • -L:显示规则链中已有的条目;

  • -F:清楚规则链中已有的条目;

  • -Z:清空规则链中的数据包计算器和字节计数器;

  • -N:创建新的用户自定义规则链;

  • -P:定义规则链中的默认目标;

  • -h:显示帮助信息;

  • -p:指定要匹配的数据包协议类型;

  • -s:指定要匹配的数据包源ip地址;

  • -j<目标>:指定要跳转的目标;

  • -i<网络接口>:指定数据包进入本机的网络接口;

  • -o<网络接口>:指定数据包要离开本机所使用的网络接口。

iptables命令选项输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

表名包括:

  • raw:高级功能,如:网址过滤。

  • mangle:数据包修改(QOS),用于实现服务质量。

  • net:地址转换,用于网关路由器。

  • filter:包过滤,用于防火墙规则。

规则链名包括:

  • INPUT链:处理输入数据包。

  • OUTPUT链:处理输出数据包。

  • PORWARD链:处理转发数据包。

  • PREROUTING链:用于目标地址转换(DNAT)。

  • POSTOUTING链:用于源地址转换(SNAT)。

动作包括:

  • accept:接收数据包。

  • DROP:丢弃数据包。

  • REDIRECT:重定向、映射、透明代理。

  • SNAT:源地址转换。

  • DNAT:目标地址转换。

  • MASQUERADE:IP伪装(NAT),用于ADSL。

  • LOG:日志记录。

③、实例

清除已有iptables规则

iptables -F
iptables -X
iptables -Z

开放指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

屏蔽IP

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

查看已添加的iptables规则

iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
 191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
 6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

删除已添加的iptables规则

#将所有iptables以序号标记显示,执行:
iptables -L -n --line-numbers
#比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8

1.8、rsync

rsync表示 remote sync,其用于在本地或与远程主机间进行文件或目录备份。相比较scp等工具,rsync有以下优点:

  • 速度:除首次全拷贝外,其他时候实现增量拷贝,加快传输速度

  • 安全:传输数据时可用ssh加密传输

  • 带宽占用:rsync可对数据进行分块压缩传输,相比其他文件传输工具占用更少带宽

  • 权限限制:非root用户也可安转和执行rsync命令

rsync执行方式如下:

rsync options source destination

source 和 destination 既可以指示本地,也可以是远程机器。下面通过实例说明rsync的用法。

①、在本地两个目录间进行数据同步

$ rsync -zvr /var/opt/lx/ /root/temp/
sending incremental file list
a.c
b.c

sent 211 bytes  received 50 bytes  522.00 bytes/sec
total size is 81  speedup is 0.31

以上选项表示意思如下:

  • -z 传输前进行压缩

  • -v 显示命令执行详细信息

  • -r 递归拷贝目录

此时我们看本地和目的地两个文件属性,注意到两者的时间戳是不同的:

$ ll /var/opt/lx/a.c /root/temp/a.c 
-rw-r--r-- 1 root root 73 04-06 21:11 /root/temp/a.c
-rw-r--r-- 1 root root 73 04-06 21:05 /var/opt/lx/a.c

若要保留原文件时间戳、属主/属组、权限属性,我们可以使用 -a 选项:

$ rsync -azv /var/opt/lx/ /root/temp/

-a选项亦包含递归的作用,因而可以替代-r选项。

②、本地与远程主机间完成数据同步

我们可以用rsync将本地的文件,同步到远程机器:

$ rsync -avz /root/temp/ lx@192.168.1.103:/home/lx/tmp/ 
Password: 
sending incremental file list
created directory /home/lx/tmp
./
a.c
b.c

sent 216 bytes  received 53 bytes  21.52 bytes/sec
total size is 81  speedup is 0.30

以上我们指明了目的机器ip、登录用户以及所路径,并且需要输入相应用户的登录密码。以上命令完成本地到远程机器的同步,调换source和destination的位置,我们亦可完成远程机器到本地的数据同步。

③、使用ssh通道进行数据同步

在与远端进行数据同步时,我们一般采用ssh通道,使用 -e ssh 选项可以完成该功能:

$ rsync -avz -e ssh /root/temp/ lx@192.168.1.103:/home/lx/tmp/

④、不覆盖目的地对文件已作的修改

经常出现这样的场景,我们对源文件和目的地文件均作了修改,同时想将源文件作的修改同步到目的地,但又保留对目的地文件的更改,此时可以使用 -u 选项:

$ ls -l /root/temp/b.c 
-rw-r--r-- 1 root root 12 04-06 22:19 /root/temp/b.c
$ ls -l /var/opt/lx/b.c 
-rw-r--r-- 1 root root 8 04-06 21:06 /var/opt/lx/b.c
$ rsync -avzu /var/opt/lx/ /root/temp/
sending incremental file list
./
a.c

sent 172 bytes  received 34 bytes  412.00 bytes/sec
total size is 101  speedup is 0.49

以上目的地 b.c 文件经过修改,与源文件不相同,此时使用 -u 选项,可以看到对 b.c 并不进行同步,目的地 b.c 的修改得以保存。

⑤、删除不存在于源目录的目的地文件

对于不存在于源目录,但存在于目的地的文件,有时我们想在做文件同步时删除它们,--delete 选项可以满足要求:

$ rsync -avz --delete /var/opt/lx/ /root/temp/
sending incremental file list
./
deleting c.c
b.c

sent 101 bytes  received 34 bytes  270.00 bytes/sec
total size is 101  speedup is 0.75

以上目的地相比源目录多了c.c文件,同步时 --delete 将该文件删除。

⑥、在同步时不在目的地创建新文件

有时我们只想对目的地已经有的文件进行同步,而不理会源目录新增的文件,此时可以使用 --existing 选项:

$ rsync -avz --existing /var/opt/lx/ /root/temp/

⑦、显示执行进度

使用 --progress 选项可以显示同步的进度,包括文件传输完成进度、传输速率信息:

$ rsync -avz --progress /var/opt/lx/ /root/temp/
sending incremental file list
./
a.c
          93 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
b.c
           8 100%    7.81kB/s    0:00:00 (xfer#2, to-check=0/3)

sent 220 bytes  received 53 bytes  546.00 bytes/sec
total size is 101  speedup is 0.37

⑧、查看 source 和 destination 间的区别

rsync完成源目录到目的地的拷贝,若能查看到源目录与目的地间的差异,这对同步十分有帮助,-i 选项可以显示源目录与目的地间的差异,示例如下。

source:

$ ls -l /var/opt/lx/
总计 8
-rw-r--r-- 1 root root 145 04-06 23:11 a.c
-rw-r--r-- 1 root root   8 04-06 21:06 b.c

destination:

$ ls -l /root/temp/
总计 8
-rw-r--r-- 1 root root 93 04-06 22:20 a.c
-rw-r--r-- 1 lx   root  8 04-06 21:06 b.c

可以看到 source 与 destination 有两处不同,一处为 a.c 的文件大小,第二处为 b.c 的属主,此时添加 -i 选项进行数据同步,有以下输出:

$ rsync -avzi /var/opt/lx/ /root/temp/
sending incremental file list
.d..t...... ./
>f.st...... a.c
.f....o.... b.c

sent 175 bytes  received 37 bytes  424.00 bytes/sec
total size is 153  speedup is 0.72

对于同步的每个文件,均对应有一条输出,有11个标志位指示源文件与目的地文件的区别,在以上例子中,各标志位意义如下:

  • > 指示传输到本地

  • f  指示所传为文件

  • s  指示文件大小不一致

  • t  指示时间戳不一致

  • o  指示属主不一致

⑨、按指定模式进行同步

使用 --include 和 --exclude 选项,可以帮助我们完成只同步特定文件的目的,例如以下只同步以 'a' 开头的文件:

$ rsync -avz --include 'a*' --exclude '*' /var/opt/lx/ /root/temp/
sending incremental file list
./
a.c
aa.c

sent 220 bytes  received 53 bytes  546.00 bytes/sec
total size is 148  speedup is 0.54

⑩、限制传输文件的大小

使用 --max-size 选项,我们可以限制传输文件的最大大小:

$ rsync -avz --max-size='100K' /var/opt/lx/ /root/temp/

以上命令限制传输的文件大小只能小于或等于100K,另可以使用 M 和 G 作为大小单位。

⑪、全拷贝

默认情况下 rsync 采用增量拷贝,这样能节省带宽,在所同步文件不大的情况下,我们可以通过 -W 选项实现全拷贝:

$ rsync -avzW /var/opt/lx/ /root/temp/

二、问题集锦

2.1、如何解决SSH连接Linux超时自动断开

cd /etc/ssh

查看sshd_config中关于客户端活动状态的配置

grep ClientAlive sshd_config
ClientAliveInterval 0
ClientAliveCountMax 3
ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送。设置60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了。
ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开。正常情况下, 客户端不会不响应,使用默认值3即可。

修改 ClientAliveInterval 为 60

vim sshd_config

重启 sshd

service sshd reload

2.2、Linux 服务器集群管理面板

①、appnode(推荐)

②、AMH

③、宝塔

④、瓦力

2.3、文件操作

① Linux 删除文件夹和文件的命令

  • -r 就是向下递归,不管有多少级目录,一并删除

  • -f 就是直接强行删除,不作任何提示的意思

A 删除文件夹实例

rm -rf /var/log/httpd/access

将会删除/var/log/httpd/access目录以及其下所有文件、文件夹

B 删除文件使用实例

rm -f /var/log/httpd/access.log

将会强制删除/var/log/httpd/access.log这个文件

② 下载文件

wget http://www.workerman.net/download/GatewayWorker.zip

③ 解压文件

A unzip解压缩

一般来讲,unzip命令常用的选项是-o和-d选项,其余的可以在详解中查看

  • -o选项,不询问用户,直接覆盖原文件

  • -d选项,用户可以指定一个解压到指定目录

举例:

在/root/test/目录下,有aaa.zip压缩文件

如果要覆盖原来的test1和test2.txt,则,执行命令

unzip -o aaa.zip

如果要保留原来的文件,把解压后的文件存放在/root/test2目录下,则执行命令

unzip -o -d /root/test2/ ./aaa.zip

④ cp 复制文件或复制文件夹

cp [option] Source Directory

常用选项:

cp命令中有一个常用选项R,它可以递归的复制目录中的所有文件

参数说明:

Source:要复制的源文件

Directory:复制文件的新位置。如果此参数是一个新目录名,则将文件复制到新位置时重命名文件

用法示例:

A、复制并重命名文件

将/etc/samba/smb.conf备份到当前目录中,并将文件重命名为smb.conf_backup:

$cp  /etc/samba/smb.conf   smb.conf_backup

B、复制目录

如果要复制的源目录中还存在子目录,可能会发生错误,此时使用选项R递归地复制子目录。

将目录test复制到目录file中

$cp -R test file/

2.4、linux下 设置php的环境变量 php: command not found

在etc/profile文件下增加php文件的路径,例如:

export PATH=$PATH:/usr/local/php5.6/bin/

保存,执行刚才修改的文件

 source /etc/profile

然后运行php -i 可以查看到 ,已经大功告成。

2.5、linux crontab 计划任务

①、什么是 cron

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

你也可以将这个服务在系统启动的时候自动启动:在/etc/rc.d/rc.local这个脚本的末尾加上:

/sbin/service crond start

②、linux任务调度的工作主要分为以下两类:

  • 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

  • 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

③、crontab命令选项:

-u 指定一个用户,
-l 列出某个用户的任务计划,
-r 删除某个用户的任务,
-e 编辑某个用户的任务

用户所建立的Crontab文件存于/var/spool/cron中,其文件名 与用户名一致。

④、cron文件语法:

 分    小时    日     月      星期      命令
0-59   0-23   1-31   1-12     0-6     command

⑤、记住几个特殊符号的含义:

"*"代表取值范围内的数字,
"/"代表"每",
"-"代表从某个数字到某个数字,
","分开几个离散的数字

⑥、例子

*/1 * * * * curl -i https://www.lulublog.cn 意思是每一分钟访问指定链接
0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime 4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令

⑦、设置流程

/sbin/service crond start
crontab -e
编辑执行的命令行
:wq 保存退出

⑧、crontab执行时间计算

crontab

2.6、php 中php-fpm 的重启、终止操作命令

pkill php-fpm
/usr/local/php/sbin/php-fpm

2.7、linux 775和777权限有什么区别

  • 读取权限 r = 4

  • 写入权限 w = 2

  • 执行权限 x = 1

  • 775 这三个数字代表拥有者,组用户,其他用户的权限。

例如:

7 拥有者有 读取,写入,执行权限
7 组用户有 读取,写入,执行权限
5 其他用户有 读取,执行权限(4+1 = 5)
777 与 775的区别是
其他用户有写入权限,而775的没有。

举个例子:

文件A,权限是775
root是拥有者
www-data是组用户
ooo 是其他用户

那么

root,www-data,ooo都能对文件A读取和执行。
root,www-data 能对文件A写入。
ooo不能对文件A写入。

如果是777

则三个用户都能读取,写入,执行文件A

2.8、linux系统约定不同类型文件默认的颜色

  • 白色:表示普通文件

  • 蓝色:表示目录

  • 绿色:表示可执行文件

  • 红色:表示压缩文件

  • 浅蓝色:链接文件

  • 红色闪烁:表示链接的文件有问题

  • 黄色:表示设备文件

  • 灰色:表示其它文件

2.9、linux杀死占用某端口的所有进程

以下命令可用于杀死占用某端口的所有进程

kill -9 $(lsof -i tcp:进程号 -t)

另外,非root用户可能需要执行

kill -9 $(sudo lsof -i tcp:进程号 -t)

查看某端口占用情况

lsof -i :端口号

2.10、linux下怎么退出telnet

在运维过程中,常常会telnet某个ip端口,如果 能telnet通,怎么退出呢 ?

telnet 63.172.25.18 6463 回车
Trying 63.172.25.18...
Connected to 63.172.25.18 (63.172.25.18).
Escape character is "^]".
ctrl + ] 回车
telnet>
? 回车
close           close current connection
logout          forcibly logout remote user and close the connection
display         display operating parameters
mode            try to enter line or character mode ("mode ?" for more)
open            connect to a site
quit            exit telnet
send            transmit special characters ("send ?" for more)
set             set operating parameters ("set ?" for more)
unset           unset operating parameters ("unset ?" for more)
status          print status information
toggle          toggle operating parameters ("toggle ?" for more)
slc             change state of special charaters ("slc ?" for more)
auth            turn on (off) authentication ("auth ?" for more)
encrypt         turn on (off) encryption ("encrypt ?" for more)
forward         turn on (off) credential forwarding ("forward ?" for more)
z               suspend telnet
!               invoke a subshell
environ         change environment variables ("environ ?" for more)
?               print help information
quit 回车
Connection closed.

2.11、在 Linux 启动或重启时执行命令与脚本

有时可能会需要在重启时或者每次系统启动时运行某些命令或者脚本。我们要怎样做呢?本文中我们就对此进行讨论。 我们会用两种方法来描述如何在 CentOS/RHEL 以及 Ubuntu 系统上做到重启或者系统启动时执行命令和脚本。 两种方法都通过了测试。

①、方法 1 – 使用 rc.local

这种方法会利用 /etc/ 中的 rc.local 文件来在启动时执行脚本与命令。我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本。 

不过我们首先需要为 /etc/rc.local 添加执行权限

sudo chmod +x /etc/rc.local

然后在文件最后加上要执行的脚本

sh /root/script.sh &

注意:执行的脚本一定要记得填写命令的完整路径因为在执行rc.local脚本时,PATH环境变量未全部初始化,目录/usr/local/bin/ 需在执行/etc/profile 后才被添加到环境变量PATH中。

如果是 CentOS,我们修改的是文件 /etc/rc.d/rc.local 而不是 /etc/rc.local。

②、方法 2 – 使用 Crontab

该方法最简单了。我们创建一个 cron 任务,这个任务在系统启动后等待 90 秒,然后执行命令和脚本。

要创建 cron 任务,打开终端并执行

crontab -e

然后输入下行内容

@reboot ( sleep 90 ; sh \location\script.sh )

这里 \location\script.sh 就是待执行脚本的地址

2.12、shell脚本执行mysql语句

①、方法一:shell脚本中写sql语句

#! /bin/bash
host="xxx"
port="xxx"
userName="xxx"
password="xxx"
dbname="xxx"
dbset="--default-character-set=utf8 -A"
 
cmd="show tables;
show table;
show table;"
 
mysql -h${host} -u${userName} -p${password} ${dbname} -P${port}      -e  "${cmd}"

当然, 你也可以这么搞

#! /bin/bash
host="xxx"
port="xxx"
userName="xxx"
password="xxx"
dbname="xxx"
dbset="--default-character-set=utf8 -A"
 
mysql -h${host} -u${userName} -p${password} ${dbname} -P${port}   <<  EOF
 
show tables;
show tables;
show tables;
 
EOF

为了保险起见, 根据经验, 经常需要在上述sql语句后加上 exit;语句, 确保mysql退出。

②、方法二:写sql文件, 然后在shell中执行

test.sql文件内容为

show tables;

执行:

mysql -hDbIP -uUserName -pPassword DbName  -PDbPort --default-character-set=utf8 -A < "test.sql"

请注意替换该替换的, 如DbIP, UserName, Password, DbName, DbPort

上述执行语句也可以改为

mysql -hDbIP -uUserName -pPassword DbName -PDbPort --default-character-set=utf8 -A -e "source test.sql"

2.13、linux和window文件共享

使用samba,可以把linux和window共享,通过映射网络盘的方式可以挂在到windows文件系统下面,使用起来和本地磁盘没有区别。

①、安装samba

yum install samba samba-client samba-swat

②、启动

/etc/init.d/smb start

③、查看samba的服务启动情况

service smb status

④、开机启动

chkconfig --level 35 smb on

⑤、添加用户

useradd -s /sbin/nologin lulublog    
smbpasswd -a lulublog

lulublog是用户名

重复输入密码

⑥、关闭防火墙

service iptables stop

⑦、编辑配置文件:/etc/samba/smb.conf

在文件的末尾添加

[lulublog]  
comment = lulublog project  
path = /www/lulublog  
public = yes  
writable = yes  
printable = no
  • comment:表示注释

  • path:共享文件路劲

  • public:是否全部用户可以访问

  • writable:是否可写

  • printable:是否可打印

重启smaba

service smb restart

注:samba删除用户: smbpasswd -x 用户名

⑧、权限问题:需要设置selinux

setenforce 0

⑨、打开 windows,我的电脑,在地址栏输入服务器地址

\\139.199.201.210

在弹窗中输入用户名和密码即可访问

三、让进程在后台可靠运行的几种方法

3.1、screen

安装yum install screen

①、使用Screen创建一个Session

screen -S sessionName

注:sessionName是要删除的session名字

后台挂起这个窗口请按

Ctrl+a+d

②、结束一个Screen创建的session

首先使用

screen -ls

命令查看全部session列表

使用

screen -S sessionName -X quit

注:sessionName是要删除的session名字

③、恢复一个screen的session

screen -r sessionName

3.2、nohup/setsid/&

①、nohup

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。

标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。

nohup ping lulublog.cn &
ps -ef | grep lulublog.cn
root      2518  2213  0 10:10 pts/9    00:00:00 ping lulublog.cn
root      2605  2441  0 10:13 pts/5    00:00:00 grep lulublog.cn

②、setsid

nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。

setsid ping lulublog.cn
ps -ef | grep lulublog.cn
root      2667     1  0 10:15 ?        00:00:00 ping lulublog.cn
root      2669  2213  0 10:15 pts/9    00:00:00 grep lulublog.cn

值得注意的是,上例中我们的进程 ID(PID)为2667,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。请将此例与nohup 例中的父 ID 做比较。

③、&

这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。

当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。

(ping lulublog.cn)
ps -ef | grep lulublog.cn
root      2748     1  0 10:17 ?        00:00:00 ping lulublog.cn
root      2778  2213  0 10:18 pts/9    00:00:00 grep lulublog.cn

从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。

3.3、disown

①、场景

我们已经知道,如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?

②、解决方法

这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。

  • 用disown -h jobspec来使某个作业忽略HUP信号。

  • 用disown -ah 来使所有的作业都忽略HUP信号。

  • 用disown -rh 来使正在运行的作业忽略HUP信号。

需要注意的是,当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。

③、例子

例1:如果提交命令时已经用“&”将命令放入后台运行,则可以直接使用“disown”

cp -r testLargeFile largeFile &
//先ctrl+z让程序暂停
jobs
disown -h %1
//这里的1是通过jobs命令中看到的进程前[]中的数字

例2:如果提交命令时未使用“&”将命令放入后台运行,可使用 CTRL-z 和“bg”将其放入后台,再使用“disown”)

cp -r testLargeFile largeFile2
//先ctrl+z让程序暂停
bg %1
//这里的1是通过ctrl+z后看到的进程前[]中的数字
jobs
disown -h %1
//这里的1是通过jobs命令中看到的进程前[]中的数字

注:CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg jobspec来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。

3.4、supervisor

他除了监控进程状态还可以在异常退出时自动重启,但是Supervisor目前只能运行在python2.x


暂时还没有评论,快来抢沙发吧~

发表评论

您需要登录后才可以评论。登录 | 立即注册
阅读 570