一 启动项管理
1 /etc/init.d文件夹
/etc/init.d是/etc/rc.d/init.d文件夹的软链接,这个文件夹的主要作用是在该目录下寻找服务脚本,并且根据脚本的run level确定不同的启动等级。即本质上,该文件夹内是各种各样的shell脚本。
CentOS和Ubuntu,需要在两个版本中都可以开机启动服务。但Ubuntu没有 /etc/rc.d/init.d这个目录,所以,为了保持同一种服务在CentOS和Ubuntu使用的统一性,将服务脚本(注:服务脚本在两个不同版本中是不同的)都放在 /etc/init.d 目录下,最终达到的效果是相同的
2 chkconfig命令
检查、设置系统的各种服务,可以查询操作系统在每一个执行等级中会执行哪些系统服务,包括各类常驻服务。
谨记chkconfig不是立即禁止或者激活一个服务,而是简单改变了符号连接。
等级代号列表: 等级0表示:表示关机 等级1表示:单用户模式 等级2表示:无网络连接的多用户命令行模式 等级3表示:有网络连接的多用户命令行模式 等级4表示:不可用 等级5表示:带图形界面的多用户模式 等级6表示:重新启动
二 字符串处理
1 grep命令
普通用法不用在意引号
grep match_pattern file_name
grep "match_pattern" file_name
正则使用 grep –E 或者直接使用 egrep都可以
2 shell echo命令
显示变量输入与输出
#!/bin/bash
read name
echo “$name is a test”
显式换行
echo -e "OK! "
显式不换行
echo -e "OK! c"
echo "接上面"
显示命令执行结果
echo `date`
3 shell printf命令
printf使用类似于c的该函数
4 shell test命令
test命令用于检查某个条件是否成立,它可以进行数值,字符和文件三个方面的测试
#!/bin/bash
num1=100
num2=100
if test $num1 -eq $num2
then
echo "equal"
else
echo "not equal"
fi
5 sed命令
1 -r
表示扩展的正则匹配方式,其中的/之类的不用转义
例子:echo ${_current_path} | sed -r "s#/root/(.*)/action.*#1#g"
# 分隔符
() 取值符,匹配所有
1 第一个取值
三 文件系统
实例1:显示磁盘使用情况
命令:
df
输出:
[root@CT1190 log]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda7 19840892 890896 17925856 5% /
/dev/sda9 203727156 112797500 80413912 59% /opt
/dev/sda8 4956284 570080 4130372 13% /var
/dev/sda6 19840892 1977568 16839184 11% /usr
/dev/sda3 988116 23880 913232 3% /boot
tmpfs 16473212 0 16473212 0% /dev/shm
linux中df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区)
最后一列是挂载点,表示的是一个目录
linux就是把各种文件,包括磁盘分区之类的都往目录结构上进行挂载,linux默认有三个分区,即boot分区,swap分区和根分区,这些分区由对应的物理存储空间,但是需要目录结构来进行访问,故就分配了/boot等目录预支对应
创建文件系统,命令是mkfs,在windows下通常叫格式化。创建文件系统这个操作一般针对的设备是分区,就是上文中说到的partition。当然也可以是某个文件,具体用法可以参见man mkfs。
一个例子
df -h
/dev/mapper/VolGroup-lv_root 39G 17G 21G 44% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 780K 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/xvda1 488M 34M 419M 8% /boot
tmpfs 782M 0 782M 0% /run/user/0
[root@dbs_gauss1 ~]# fdisk -l
Disk /dev/xvda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00017f27
Device Boot Start End Blocks Id System
/dev/xvda1 * 2048 1050623 524288 83 Linux
/dev/xvda2 1050624 16777215 7863296 8e Linux LVM
/dev/xvda3 16777216 83886079 33554432 8e Linux LVM
Disk /dev/xvde: 429.5 GB, 429496729600 bytes, 838860800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/VolGroup-lv_root: 42.4 GB, 42404413440 bytes, 82821120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
这里可以看到,/dev/xvda磁盘被分为了3个分区,其中/dev/xvda1是作为了/boot分区来使用的,作为整个linux的启动分区。而其他两个分区没有被使用到
另一块磁盘/dev/mapper/VolGroup-lv_root作为了主硬盘,没有进行分区,直接挂载到了/根目录
tmpfs文件系统,是一种基于内存的虚拟文件系统,一般挂载在目录/dev/shm下,载redhat中默认使用物理内存的一半
分区
明白三个概念:设备,分区,目录!
在linux当中,每一个设备都是用/dev文件夹下的一个文件来进行表示的
其中第一列的信息
若是文件系统或者是分区信息时,格式为 /dev/xxyN:dev是表示设备目录,xxyN是分区名
l /dev/代表设备所在的目录名。因为分区在硬盘上,硬盘是设备。而/dev/之后的所有这些文件代表所有可能的分区
l xx分区名的前两个字符代表分区所在设备的类型,例如hd(IDE磁盘)或者sd(SCSI磁盘)
l y表明分区所在的设备的编号,例如/dev/had(第一个IDE磁盘)或/dev/sdb(第二个SCSI磁盘)
l N表示分区编号,主分区1~4(扩展分区只能有一个,即四个主分区中仅有一个能够成为扩展分区),逻辑分区从5开始(扩展分区由所有的逻辑分区构成,逻辑分区理论上可有无限多个)
挂载
挂载的本质就是将分区关联到某一个目录的过程
一个目录的子目录可以被再次挂载到其他分区上
linux和windows最大区别在于,linux中硬件就是硬件,路径就是路径,而后者则是混淆在一起的。
动作
- 查看是否已经分配磁盘
fdisk -l
- 如果有磁盘,则对磁盘建立分区
fisk /dev/sdb
- 分区参数设置
输入m查看帮助菜单
输入p,设置为主分区
输入1,设置为分区号
直接回车,选择默认起始扇区
直接回车,选择默认结尾扇区
- 保存分区
输入w,保存分区设置
- 使用fdisk -l查看,确认分区建立成功
- 建立好分区之后,对分区进行格式化,建立文件系统
mkfs.xfs -f /dev/sdb1
- 进行挂载
mount /dev/sdb1 /home/data
如果挂载点不存在,则需要先进行目录的创建
- 查看一下挂载是否成功
df -TH /home/data
- 修改系统配置/etc/fstab,让系统启动后自动进行挂载,否则可能会掉盘,添加如下内容
/dev/sdb1 /home/data xfs defaults 0 0
四 权限管理
1 添加用户
useradd leichuang
passwd 123456789
2 查看文件权限
getfacl
查看文件的权限的详细信息
stat:列出文件的详细信息
stat -c %a /var/rds/tomcat/conf/server.p12
600
查看文件的权限,并且以校验数字码的方式进行输出
3 sudo 配置
http://blog.csdn.net/yu412346928/article/details/21622029
当前用户临时切换到超级用户下,以超级用户的权限去执行指定的命令。sudo所需要输入执行sudo命令的用户自身的口令,而非root用户口令。这样,即使你偶尔离开,但终端依然不会被居心险恶的人利用。
党用户执行sudo时,系统会去寻找/etc/sudoers配置文件,判断当前用户是否具备使用root的资格。对该配置的修改主要依靠命令visudo进行,其中的语法如下
3.1 user host = commands
user host = commands
User_Alias
Host_Alias
Cmnd_Alias
user表示使用者(这里也可以填入group名,在组名前加%),host是登录主机的方式,而commands是具体命令
例如
switf localhost = /usr/bin/emerge
表示用户swift可以在本地(非ssh连接的情况下)使用emerge命令
%wheel localhost = /usr/bin/emerge, /usr/bin/ebuild, /usr/sbin/emerge-webrsync
标示wheel组同时具有3条命令的权限
3.2 定义别名
Host_Alias hostalias = hostname1, hostname2, ...
User_Alias useralias = user1, user2, ...
Cmnd_Alias cmndalias = command1, command2, ...
为了不频繁输入各个用户名,可以定义一些别名
通用别名ALL 代指所有可能的设置。
代码 2.8: 允许任何用户在非ssh时执行 shutdown |
||
ALL localhost = /sbin/shutdown
|
3.3 以其他非root用户命令执行权限语法
让一名用户像其他用户(非root用户)那样地运行程序是可行的。这非常有趣,你可以使用另一个用户(譬如网络服务器apache)的身份来运行程序或执行一些系统管理操作(比如杀死僵死进程)。
在/etc/sudoers文件中,在命令列表之前,可以在( 与 )之间列举需要改变身份的用户。
代码 2.12: 非root用户命令执行权限示例 |
Cmnd_Alias KILL = /bin/kill, /usr/bin/pkill swift ALL = (apache, gorg) KILL |
使用这一设定,用户可以运行sudo -u来选择他想担当的角色
代码 2.13: 像apache用户那样运行pkill |
$ sudo -u apache pkill apache |
可以使用Runas_Alias指令为这些要切换身份的用户设置别名,它的用法与前面所讲的别名设置指令的用法相似。
3.4 密码与默认设置
默认情况,sudo要求用户提供自己的登录口令来做身份验证。一旦输入了相应口令(密码),sudo会记忆它5分钟,用户要把任务集中在这段时间内来完成,否则就要每5分钟重复输入一次口令。
当然,这种默认行为是可以改变的:可以在/etc/sudoers中设定Defaults:指令来修改一名用户的默认行为。
例如,要将默认的5分钟修改为0分钟(即不记忆所输入口令):
代码 2.14: 更改时限 |
Defaults:swift timestamp_timeout=0 |
如果将timestamp_timeout设置为-1,sudo会永远记住用户口令,直至系统重新启动。
有一个设置可以在使用sudo时要输入所执行命令的所属用户口令,而不是执行sudo命令的用户口令。这一功能可由runaspw指令进行设定。下面示例演示了runaspw的用法,同时也演示了重复输入口令次数限制的设定方法
代码 2.15: 需要root口令而非用户john的口令 |
Defaults:john runaspw, passwd_tries=2 |
还有一个有趣的功能是保持DISPLAY变量不变,这样就可以运行一些X Window工具了:
代码 2.16: 保持DISPLAY变量的值不变 |
Defaults:john env_keep=DISPLAY |
使用Defaults:指令可以更改许多默认设置,要知详情,可在sudo手册中搜索Defaults。
如果很想允许一名用户使用sudo运行一些程序时无需输入任何口令,应当在命令列表前冠以NOPASSWD:,例如:
代码 2.17: 允许像root那样使用emerge,而无需口令 |
swift localhost = NOPASSWD: /usr/bin/emerge |
3.5 查看当前用户关于sudo的权限
列出权限
运行sudo -l可以查看当前用户的sudo权限:
代码 3.1: 列出权限 |
$ sudo -l User swift may run the following commands on this host: (root) /usr/libexec/xfsm-shutdown-helper (root) /usr/bin/emerge (root) /usr/bin/passwd [a-zA-Z0-9_-]* (root) !/usr/bin/passwd root (apache) /usr/bin/pkill (apache) /bin/kill |
若在/etc/sudoers中设定了任何命令都不需要输入口令,那么在使用sudo -l时也不需要输入口令。否则,在口令未被sudo记忆时,依然要输入相应口令。
3.6 延长口令时延
延长口令时限
默认情况下,sudo的验证口令会维持在5分钟内有效。如果用户想延长这一时间,可以运行sudo -v重设时间戳,这样就会又开始一个5分钟口令记忆时间。
代码 3.2: sudo口令时限延长 |
$ sudo -v |
相反,若要停掉当前时间戳,可使用sudo -k.
一些注意事项
# Defaults env_keep += "HOME"
注释此行的意思是,sudo运行某条命令时获取到的HOME路径是该用户自己本身的HOME路径
always_set_home: Always set $HOME to the target user's home directory