Linux下实现在指定目录中遍历所有文件查找指定字符串

要实现此功能只要使用grep命令就好啦,具体可以看下下边这个小例子:

查找/home目录及其子目录中所有包含”hello”字符串的文件,并显示出该字符串在文件中所处的行数。

[root@localhost ~]# grep -nR "hello" /home
/home/a:8:hello,world!
/home/b/a:10:hello,it7e!

grep命令相关参数介绍

  1. -n 是显示行号
  2. -R 查找所有文件包含子目录
  3. -i 忽略大小写

minicom常用组合键介绍

minicom 组合键的用法是:先按Ctrl+A组合键,然后松开这两个键,再按完成特定功能的按键。常用的功能按键如下

  • S键:发送文件到目标系统中;
  • W键:自动卷屏。当显示的内容超过一行之后,自动将后面的内容换行。这个功能在查看内核的启动信息时很有用;
  • C键:清除屏幕的显示内容;
  • B键:浏览Minicom的历史显示;
  • X键:退出Minicom,会提示确认退出。

samba配置文件smb.conf详解

前言

Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下。
smb.conf含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。每段的参数的格式是:名称=指。配置文件中一行一个段名和参数,段名和参数名不分大小写。
除了[global]段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。
Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm –v命令可以详细的列出smb.conf支持的配置参数。

全局参数

==================Global Settings ===================
[global]

config file = /usr/local/samba/lib/smb.conf.%m
说明:config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在smb.conf中加入:config file = /etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由smb.conf.pc1定义的,而其他机器访问Samba Server则还是应用smb.conf。

workgroup = WORKGROUP
说明:设定 Samba Server 所要加入的工作组或者域。

server string = Samba Server Version %v
说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。

netbios name = smbserver
说明:设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。

hosts allow = 127. 192.168.1. 192.168.10.1
说明:表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容许来自172.17.2..的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=M1,M2
表示容许来自M1和M2两台计算机连接
hosts allow=@xq
表示容许来自XQ网域的所有计算机连接

max connections = 0
说明:max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。

deadtime = 0
说明:deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。

time server = yes/no
说明:time server用来设置让nmdb成为windows客户端的时间服务器。

log file = /var/log/samba/log.%m
说明:设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。

max log size = 50
说明:设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。

security = user
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。

  1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
  2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
  3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
  4. domain:域安全级别,使用主域控制器(PDC)来完成认证。

passdb backend = tdbsam
说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实
用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我列出几个主要的。

pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。

3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

encrypt passwords = yes/no
说明:是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。

smb passwd file = /etc/samba/smbpasswd
说明:用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。

username map = /etc/samba/smbusers
说明:用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯。

guest account = nobody
说明:用来设置guest用户名。

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
说明:用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。

domain master = yes/no
说明:设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。

local master = yes/no
说明:local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。

preferred master = yes/no
说明:设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
如果同一个区域内有多台Samba Server,将上面三个参数设定在一台即可。

os level = 200
说明:设置samba服务器的os level。该参数决定Samba Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。

domain logons = yes/no
说明:设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。

logon . = %u.bat
说明:当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在[netlogon]的path设置的目录路径下。

wins support = yes/no
说明:设置samba服务器是否提供wins服务。

wins server = wins服务器IP地址
说明:设置Samba Server是否使用别的wins服务器提供wins服务。

wins proxy = yes/no
说明:设置Samba Server是否开启wins代理服务。

dns proxy = yes/no
说明:设置Samba Server是否开启dns代理服务。

load printers = yes/no
说明:设置是否在启动Samba时就共享打印机。

printcap name = cups
说明:设置共享打印机的配置文件。

printing = cups
说明:设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx

共享参数

================== Share Definitions ==================
[共享名]

comment = 任意字符串
说明:comment是对该共享的描述,可以是任意字符串。

path = 共享目录路径
说明:path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes]共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m 。

browseable = yes/no
说明:browseable用来指定该共享是否可以浏览。

writable = yes/no
说明:writable用来指定该共享路径是否可写。

available = yes/no
说明:available用来指定该共享资源是否可用。

admin users = 该共享的管理者
说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users =bobyuan,jane(多个用户中间用逗号隔开)。

valid users = 允许访问该共享的用户
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)

invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)

write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob

public = yes/no
说明:public用来指定该共享是否允许guest账户访问。

guest ok = yes/no
说明:意义同“public”。

几个特殊共享:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN%S

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no

[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes

本文转载自:http://yuanbin.blog.51cto.com/363003/115761,在此向原作者致敬。

Apache配置对站点目录的认证

前言:

有的时候需要对站点中的某个目录进行保护,只有输入指定的账号密码才可以浏览。这当然可以通过动态网站设计语言来实现,但通过对Apache本身的配置来实现似乎要更方便一些。

配置方法:

一、Apache配置编辑及站点创建

创建一个站点配置文件。

[root@localhost auth]# vim /etc/httpd/conf.d/vhost1.conf

内容如下:

<Directory "/tmp/html/auth/">      // 要启用认证的目录
    AuthName "请认证身份"           // 服务器返回的认证对话框的标题
    AuthType Basic                 // 认证类型
    AuthUserFile /tmp/html/auth/.htpasswd      // 密码配置文件路径
    require valid-user             // 允许通过认证的所有用户访问,如果改为某一用户名则只允许此用户访问
</Directory>
<VirtualHost *:80>                 // 创建一个简单的虚拟主机用于测试
    DocumentRoot /tmp/html/
</VirtualHost>

创建站点运行目录及要开启认证的站点子目录。

[root@hostname ~]# mkdir -p /tmp/html{,/auth}

查看此时的站点目录结构。

[root@hostname ~]# tree /tmp/html/
/tmp/html/
└── auth

在站点子目录下创建首页文件。

[root@hostname ~]# echo 'Hello,world!' > /tmp/html/auth/index.html

二、生成用户密码配置文件

创建新文件,并向其中添加一个用户认证信息。

[root@hostname ~]# htpasswd -cb /tmp/html/auth/.htpasswd user1 123456     //-c参数用于创建新文件,若文件已存在则无需使用-c参数,-b参数用于指定在命令行中直接键入密码,而不是用交互模式。user1为用户名,123456为密码。
Adding password for user user1   //提示成功添加了user1的用户密码

增加一个新的认证用户。

[root@hostname ~]# htpasswd -b /tmp/html/auth/.htpasswd user2 123456
Adding password for user user2   //成功添加

修改用户的密码。

[root@hostname ~]# htpasswd -mb /tmp/html/auth/.htpasswd user1 654321
Updating password for user user1 //密码更新成功

删除认证用户。

[root@hostname ~]# htpasswd -D /tmp/html/auth/.htpasswd user2
Deleting password for user user1 //删除成功

测试:

使用浏览器访问http://URL/auth(URL是你网站的域名或IP)就会看到要求认证的对话框啦!

这里我为了方便,使用的是Linux下的Links浏览器进行测试的。

正确输入账号密码后,即可看到网页内容。

CentOS 6中创建及管理LVM逻辑卷

LVM简介:

LVM是逻辑管理卷的简写,其可以将多块物理磁盘的分区组成一个大的卷组(可以把他想象成是一个大的资源池),再在卷组上划分出逻辑卷并在其上建立文件系统最终供用户使用。

LVM的好处是可以动态的增加逻辑卷的大小,这样就不用面临随着业务发展,原本的分区空间不足的尴尬啦!

下面是LVM的结构图,最下面是物理磁盘分区,其上是物理卷(一个物理磁盘分区对应一个物理卷),再往上是我称之为“资源池”的卷组,这个“资源池”的容量是由组成其的物理卷的总容量决定的,而最上面则是可以被当成“普通分区”来使用的逻辑卷,逻辑卷可以划分很多个(默认一个卷组可以划分256个逻辑卷),只要其加起来的容量不超过“资源池”的容量就好!

创建LVM:

一、安装LVM软件包

通常情况下,CentOS中都有自带LVM软件包,但为了以防万一,我还是把安装命令贴出来吧~

[root@localhost ~]# yum install -y lvm

二、创建物理磁盘的分区

记得要先添加一块空磁盘呐,本实验中我添加了一块8GB大小的SCSI磁盘。

查看新添加的磁盘。

[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 4.2G 0 rom /media/cdrom
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 7.5G 0 part
 ├─VolGroup-lv_root (dm-0) 253:0 0 6.7G 0 lvm /
 └─VolGroup-lv_swap (dm-1) 253:1 0 816M 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk

如果新加的磁盘不能被系统立即识别请参考此篇文章。

https://www.ibadboy.net/archives/1895.html

使用fdisk工具对新加磁盘进行分区。

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x028d3c84.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
     switch off the mode (command 'c') and change display units to
     sectors (command 'u').
Command (m for help): n          //新建磁盘分区
Command action
   e   extended
   p   primary partition (1-4)
p            //新建为主分区
Partition number (1-4): 1             //设置分区编号
First cylinder (1-1044, default 1):   s           //设置起始扇区
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):522           //设置结束扇区,这里我结束扇区设置为总扇区数的一半,相当于把分区容量设置为总容量的一半
Command (m for help): n          //新建第二块磁盘分区
Command action
   e   extended
   p   primary partition (1-4)
p           //新建为主分区
Partition number (1-4): 2            //设置分区编号
First cylinder (523-1044, default 523):          //设置起始扇区
Using default value 523
Last cylinder, +cylinders or +size{K,M,G} (523-1044, default 1044):             //设置结束扇区
Using default value 1044
Command (m for help): t             //更改分区的标识
Partition number (1-4): 1           //选择编号为1的分区进行操作
Hex code (type L to list codes): 8e //将分区标识更改为“Linux LVM”,其对应的代码是8e,这里可以输入list来查看所有标识对应的代码
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t             //更改分区的标识
Partition number (1-4): 2           //选择编号为2的分区进行操作
Hex code (type L to list codes): 8e //将分区标识更改为“Linux LVM”
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): p             //查看刚刚新建的分区
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x028d3c84
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         522     4192933+  8e  Linux LVM
/dev/sdb2             523        1044     4192965   8e  Linux LVM
Command (m for help): w             //保存并退出fdisk工具
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

三、创建物理卷

使用新创建的/dev/sdb1和/dev/sdb2这两个分区分别组建物理卷。

[root@localhost ~]# pvcreate /dev/sdb[12]
  Physical volume "/dev/sdb1" successfully created          //提示说物理卷创建成功
  Physical volume "/dev/sdb2" successfully created

查看物理卷。

[root@localhost ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1            //物理卷名称
  VG Name                                    //所属的卷组名称,这里还未加入任何卷组
  PV Size               4.00 GiB             //物理卷大小
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               pTps5V-4vKA-em0G-XR8Y-ltJu-4CeL-KEOMn3
  "/dev/sdb2" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2            //物理卷名称
  VG Name                                    //所属的卷组名称
  PV Size               4.00 GiB             //物理卷大小
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               uzW0YS-fl5a-4Qae-6vcG-iXce-a8iB-QYMvf4

四、创建卷组

将刚刚新建的物理卷/dev/sdb1和/dev/sdb2组成一个卷组——vg1

[root@localhost ~]# vgcreate vg1 /dev/sdb[12]
 Volume group "vg1" successfully created          //提示说卷组创建成功卷

查看卷组

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1             //卷组名称
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write      //卷组的访问权限
  VG Status             resizable       //卷组状态
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               7.99 GiB        //卷组容量
  PE Size               4.00 MiB
  Total PE              2046
  Alloc PE / Size       0 / 0
  Free  PE / Size       2046 / 7.99 GiB
  VG UUID               dY8zDo-vD43-DQB8-CpRs-Shla-kWfJ-OuDjhp

五、划分逻辑卷

从总容量为8G(其实不足8G)的卷组vg1中划分四个逻辑卷,分别为lv1、lv2、lv3、lv4,每个大小为2000MB。

[root@localhost ~]# lvcreate -L 2000MB -n lv1 vg1       //-L参数后面接逻辑卷大小,单位可以是KB、MB、GB。
 Logical volume "lv1" created
[root@localhost ~]# lvcreate -L 2000MB -n lv2 vg1
 Logical volume "lv2" created
[root@localhost ~]# lvcreate -L 2000MB -n lv3 vg1
 Logical volume "lv3" created
[root@localhost ~]# lvcreate -L 2000MB -n lv4 vg1
 Logical volume "lv4" created

查看逻辑卷,因为这里的输出信息比较多,我只截取lv1这个逻辑卷的信息做简要说明。

[root@localhost ~]# lvdisplay
 --- Logical volume ---
 LV Path /dev/vg1/lv1          //逻辑卷路径
 LV Name lv1                   //逻辑卷名称
 VG Name vg1                   //逻辑卷所属的卷组的名称
 LV UUID qhypYJ-jPOW-KDDy-NXtO-aWQO-ryHI-Tf04hS
 LV Write Access read/write
 LV Creation host, time localhost.localdomain, 2017-10-11 13:13:54 +0800
 LV Status available
 # open 0
 LV Size 1.95 GiB              //逻辑卷容量
 Current LE 500
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:2

至此,逻辑卷已创建完成,但此时还不能立即使用,还需要在逻辑卷上新建文件系统。

这里为了不让文章显得啰嗦,我只在逻辑卷lv1上创建文件系统。

[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
128000 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=524288000
16 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

挂载逻辑卷。

[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  816M  5.5G  13% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/sr0                      4.2G  4.2G     0 100% /media/cdrom
/dev/mapper/vg1-lv1           2.0G   35M  1.8G   2% /mnt

管理LVM:

卷组的扩容

这里我新增加一块8G的空SCSI磁盘,并在其基础上创建一个8G的物理卷。

将刚刚新建的8G大小的物理卷加入到vg1卷组中,实现对vg1卷组的扩容。

[root@localhost ~]# vgextend vg1 /dev/sdc1
  dev_is_mpath: failed to get device for 8:33
  No physical volume label read from /dev/sdc1
  Physical volume /dev/sdc1 not found
  Physical volume "/dev/sdc1" successfully created
  Volume group "vg1" successfully extended

查看卷组信息,注意看卷组容量。

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  14
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               15.99 GiB          //卷组的总容量已增加
  PE Size               4.00 MiB
  Total PE              4093
  Alloc PE / Size       2000 / 7.81 GiB
  Free  PE / Size       2093 / 8.18 GiB
  VG UUID               dY8zDo-vD43-DQB8-CpRs-Shla-kWfJ-OuDjhp

逻辑卷的扩容

这里对已经挂载在/mnt目录上的lv1逻辑卷进行扩容,将其大小变为10GB。

[root@localhost ~]# lvextend -L 10GB -n /dev/vg1/lv1
 Extending logical volume lv1 to 10.00 GiB
 Logical volume lv1 successfully resized

重设逻辑卷大小,只有正在使用的逻辑卷才需要重设大小。

[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg1/lv1 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/vg1/lv1 to 2621440 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 2621440 blocks long.

查看此时lv1的容量,已实现动态扩容。

[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  816M  5.5G  13% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/sr0                      4.2G  4.2G     0 100% /media/cdrom
/dev/mapper/vg1-lv1           9.9G   37M  9.4G   1% /mnt

Linux下查看串口信息

使用管道命令过滤系统开机时的启动信息来得出当前系统中已存在的串口,可以看到,我的系统中存在ttyS2这个串口。

[root@localhost ~]# dmesg | grep tty
console [tty0] enabled            //这个tty0我暂时没搞懂他是什么,但他肯定不是一个物理串口
serial8250: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A
00:04: ttyS2 at I/O 0x3e8 (irq = 4) is a 16550A

Linux下卸载被进程占用的分区

有的时候在卸载目录时会看到类似下面的错误提示。

[root@localhost ~]# umount /mnt
umount: /mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

这段信息是告诉你,设备正在被使用,无法卸载。此时,想卸载掉这块分区唯一的方法就是杀死占用他的进程。

先找出是谁在占用这块分区,可以看到这里占用他的是进程号为1341的进程,后面的c代表的是进程的权限,不予理会。

[root@localhost ~]# fuser /mnt
/mnt: 1341c

使用kill -9杀死该进程后即可成功卸载磁盘

[root@localhost ~]# kill -9 1341
[root@localhost ~]# umount /mnt
[root@localhost ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root  19166504 3280692  14912196  19% /
tmpfs                           243140       0    243140   0% /dev/shm
/dev/sda1                       495844   33455    436789   8% /boot

CentOS 6下不重启系统就识别新增加的SCSI磁盘的方法

执行以下命令重新扫描SCSI磁盘,若重新扫描后依然没有看到新增加的磁盘,则将路径中的host0改为host1、host2、host3、host4…直到看到新的磁盘为止(我做这个实验的时候试到host2才扫描到)。

[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan

查看硬盘是否被扫描到,可以看到这里多了一块”sdb”就是我新增加的SCSI磁盘。

[root@localhost ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                            8:0    0   20G  0 disk
├─sda1                        8:1    0  500M  0 part /boot
└─sda2                        8:2    0 19.5G  0 part
  ├─VolGroup-lv_root (dm-0) 253:0    0 18.6G  0 lvm  /
  └─VolGroup-lv_swap (dm-1) 253:1    0  960M  0 lvm
sr0                           11:0    1  4.2G  0 rom  /media/cdrom
sdb                            8:16   0   20G  0

disk

Linux在不重启系统的情况下重新挂载根目录下的分区

当修改了/etc/fstab中的分区挂载参数后需要卸载分区并重新挂载,这对于普通分区还好说,但是对于挂载在根目录下的分区呢?如果冒然卸载掉会导致系统无法运行。那,除了重启系统之外还有什么方法可以使修改的分区自动挂载参数立即生效呢?

这里可以使用mount命令的remove选项来实现重新挂载分区的功能~

[root@localhost ~]# mount -o remove /

Linux下创建及调整swap分区

swap分区简介:

Linux下的swap分区类似于Windows下的虚拟内存,都是当物理内存不够用时临时充当“内存”角色的一块磁盘空间。

Linux下增加及新建swap分区有两种方法,一种是基于硬盘分区的方式,另一种是基于文件的方式。

1、基于磁盘分区的swap

要增加基于分区的swap分区,首先得保证你有一块空余的磁盘空间可供分区,这里因为我是在虚拟机环境下实验,所以直接新增一块8G的硬盘用于分区。

下面是操作过程,每一步都有注释。

[root@localhost ~]# fdisk /dev/sdb             //使用fdisk分区工具为新增加的磁盘分区
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n          //新建一个分区
Command action
   e   extended
   p   primary partition (1-4)
p           //新建为主分区
Partition number (1-4): 1            //分区编号为1
First cylinder (1-1044, default 1): 1              /分区起始扇区为1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):             //这里我直接按回车了,使用全部可用磁盘空间
Using default value 1044
Command (m for help): t           //更改分区类型,默认类型为“Linux”,要将其更改为“Linux swap”
Selected partition 1            //如果存在多个分区,则这里会要求选择要操作的分区的编号,因为本实验中只有一个分区,所有直接默认是1
Hex code (type L to list codes): 82           //82就是“Linux swap”分区类型的编号,这里可以输入“list”查看所有分区类型对应的编号
Changed system type of partition 1 to 82 (Linux swap / Solaris)
Command (m for help): p          //查看刚刚划分的swap类型的分区
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa8cc39af
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1044     8385898+  82  Linux swap / Solaris
Command (m for help): w          //保存对磁盘分区做的更改
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

将刚刚创建的分区格式化为swap文件系统。

[root@localhost ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 8385892 KiB
no label, UUID=4b5f9371-3df6-47d5-bc40-15e6f7bb3db8

查看当前系统中启用的swap分区的大小。

[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216      84088     418128          0       6892      31096
-/+ buffers/cache:      46100     456116
Swap:       835576          0     835576

启用新增加的swap分区之后再次查看系统中已生效的swap分区大小,可以发现,其完美增加了8个G~。

[root@localhost ~]# swapon /dev/sdb1
[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216      90048     412168          0       6944      31088
-/+ buffers/cache:      52016     450200
Swap:      9221464          0    9221464

2、基于文件的swap

先使用dd命令生成一个2GB大小的文件。

[root@localhost ~]# dd if=/dev/zero of=/var/swap bs=1M count=2048
记录了2048+0 的读入
记录了2048+0 的写出
2147483648字节(2.1 GB)已复制,6.25394 秒,343 MB/秒</pre>
在这个文件上新建swap文件系统。
<pre>[root@localhost ~]# mkswap /var/swap
mkswap: /var/swap: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=344232eb-9654-4167-873b-bdda9d2b01e6

查看当前系统中生效的swap分区的大小。

[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     495380       6836          0       1056     438852
-/+ buffers/cache:      55472     446744
Swap:      9221464       8532    9212932

启用新建的swap分区,并查看系统中生效的swap分区的大小,可以发现,增加了2G。

[root@localhost ~]# swapon /var/swap
[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     496256       5960          0       1152     437816
-/+ buffers/cache:      57288     444928
Swap:     11318608       8440   11310168

开机自动挂载swap分区:

将要开机挂载的swap分区加入到/etc/fstab文件中。

[root@localhost ~]# vim /etc/fstab

以下是修改后的文件内容,最后两行就是刚刚新建的swap分区,第三行是系统原本的swap分区。

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=143f17a3-2d07-44b9-a577-f1609d3fb0c0 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sdb1               swap                    swap    defaults        0 0
/var/swap               swap                    swap    defaults        0 0

停用swap分区:

先查看系统中已生效的swap分区的大小。

[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     494008       8208          0       3700     431888
-/+ buffers/cache:      58420     443796
Swap:     11318608       7472   11311136

停用掉系统中原本的swap分区,并查看系统中生效的swap分区的大小,可以发现少了800MB左右的空间。

[root@localhost ~]# swapoff /dev/VolGroup/lv_swap
[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:        502216     495748       6468          0       3872     428504
-/+ buffers/cache:      63372     438844
Swap:     10483032         88   10482944

为Apache配置虚拟目录

虚拟目录简介:

虚拟目录就是将原本不存在于网站根目录下的目录映射到一个别名上,这样Apache就可以通过“http(s)://网址/别名”的形式访问他啦!

配置方法:

先配置一个简单的虚拟主机。

[root@localhost ~]# vim /etc/httpd/conf.d/a.conf
<VirtualHost *:80>
       DocumentRoot /tmp/html/
</VirtualHost>

在虚拟主机中定义虚拟目录。

Alias /dir /tmp/html1

最终的虚拟机配置文件的内容是这样的。

<VirtualHost *:80>
       DocumentRoot /tmp/html/
       Alias /dir /tmp/html1
</VirtualHost>

创建站点目录及网页。

[root@localhost ~]# mkdir /tmp/html /tmp/html1
[root@localhost ~]# echo one > /tmp/html/index.html
[root@localhost ~]# echo two > /tmp/html1/index.html

在保证selinux和防火墙均关闭的情况下启动Apache。

[root@localhost ~]# service httpd start

测试:

可以选择在Windows的浏览器上测试,这里我为了方便,直接在CentOS下的文本浏览器中测试。

安装浏览器。

[root@localhost ~]# yum install -y links

使用浏览器打开站点首页,这里的192.168.1.100是我的Apache服务器的IP地址。

[root@localhost ~]# links 192.168.1.100

按q退出后,重新打开带虚拟目录的站点URL,可以看到,成功输出了虚拟目录中的首页文件的内容,至此,虚拟目录配置完成。

[root@localhost ~]# links 192.168.1.100/dir

配置vsftpd服务器的最大并发连接数、每个客户端的最大线程数及文件下载速度

之所以把他们三个放在一起写,是因为这三个都是关乎资源限制及保障FTP服务器稳定运行的。

默认配置文件中是没有这三个选项的,如需要可手动添加。vsftpd配置文件路径:/etc/vsftpd/vsftpd.conf

max_clients=10               #配置最大并发客户端连接数。
max_per_ip=5                 #配置单个IP可使用的线程数(主要为了“照顾”迅雷等多线程下载软件)。
local_max_rate=50000         #配置用户的最大下载速度,单位是b/s。

vsftpd设置无操作时的超时时间及文件传输超时时间

之所以把这两个放在一起写,不是因为他们两个都是关于超时时间的设定,而是因为这俩在配置文件中离得实在太近了(手动滑稽)~

编辑主配置文件。

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

转到第五十九行,其就是设置无操作时的超时时间的选项,默认时间单位是秒,默认动作是什么都不做,如果你想配置一个超时时间那么请取消注释(删除#符号)。

#idle_session_timeout=600

转到第62行,这一行是关于文件传输超时时间的设定,默认单位也是秒,默认动作是什么都不做。

#data_connection_timeout=120</pre>

CentOS 6下挂载NFS共享的方法

挂载前请确保客户机已安装nfs-utils软件包,否则是无法成功挂载的(我是不会告诉你我在这个坑里蹲了四个多小时才爬出来的)。

[root@localhost ~]# yum install -y nfs-utils

挂载使用如下命令格式:

mount nfs服务器ip:共享文件夹的路径 要挂载在本地的路径

例如:

[root@localhost ~]# mount 192.168.1.20:/tmp/test1 /mnt/test1

笔者看到网上有的教程推荐使用类似如下命令来进行挂载:

[root@localhost ~]# mount -t nfs 10.0.2.69:/home /mnt

但经过实测,CentOS 6.5可以不使用-t参数来指定文件系统类型,程序会自动识别。

除了命令行挂载之外,也可以将其加入到/etc/fstab文件中实现开机自动挂载。

之后重启系统即可自动挂载,若想立即生效可以使用如下命令 :

[root@localhost ~]# mount -a

卸载nfs使用此命令格式:

umount nfs共享的挂载点

例如:

[root@localhost ~]# umount /mnt/test1

最后再介绍一种比较特殊的情况,那就是当nfs服务器无响应的时候,在客户端执行df命令或showmount命令时会导致进程假死,而使用umount命令卸载nfs存储则会抛出错误。

此问题的解决方法参考此篇文章:

https://www.ibadboy.net/archives/730.html

Linux下添加虚拟网卡,实现一块物理网卡绑定多个IP地址

前言:
这个功能在实际生产环境中可能没有意义,但是在虚拟机里做实验的时候还是蛮实用的,可以直接在一个网卡上模拟出多个网段,这样就不用再添加单独的网卡啦。
配置方法:
以当前网卡的配置文件为模板创建虚拟网卡。

[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:1

编辑虚拟网卡的配置文件。

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:1

删除其中的MAC地址信息和UUID信息,同时将DEVICE的参数改为eth0:1,并按需求修改IP地址等信息。
以下是我修改好的虚拟网卡配置文件,仅供参考。注意!不要为虚拟网卡配置网关和DNS信息,完全没有意义且容易造成网络连接问题。

DEVICE=eth0:1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.2.100
NETMASK=255.255.255.0

重启网络。

[root@localhost ~]# service network restart

最后,ping一下虚拟网卡的IP地址看看是否配置成功。

[root@localhost ~]# ping 192.168.2.100 -c 4
PING 192.168.2.100 (192.168.2.100) 56(84) bytes of data.
64 bytes from 192.168.2.100: icmp_seq=1 ttl=64 time=0.010 ms
64 bytes from 192.168.2.100: icmp_seq=2 ttl=64 time=0.021 ms
64 bytes from 192.168.2.100: icmp_seq=3 ttl=64 time=0.033 ms
64 bytes from 192.168.2.100: icmp_seq=4 ttl=64 time=0.021 ms