linux经常使用命令

一 启动项管理

1 /etc/init.d文件夹

/etc/init.d是/etc/rc.d/init.d文件夹的软连接,这个文件夹的主要做用是在该目录下寻找服务脚本,而且根据脚本的run level肯定不一样的启动等级。即本质上,该文件夹内是各类各样的shell脚本。linux

CentOS和Ubuntu,须要在两个版本中均可以开机启动服务。但Ubuntu没有 /etc/rc.d/init.d这个目录,因此,为了保持同一种服务在CentOS和Ubuntu使用的统一性,将服务脚本(注:服务脚本在两个不一样版本中是不一样的)都放在 /etc/init.d 目录下,最终达到的效果是相同的web

2 chkconfig命令

检查、设置系统的各类服务,能够查询操做系统在每个执行等级中会执行哪些系统服务,包括各种常驻服务。shell

谨记chkconfig不是当即禁止或者激活一个服务,而是简单改变了符号链接。apache

等级代号列表: 等级0表示:表示关机 等级1表示:单用户模式 等级2表示:无网络链接的多用户命令行模式 等级3表示:有网络链接的多用户命令行模式 等级4表示:不可用 等级5表示:带图形界面的多用户模式 等级6表示:从新启动swift

 

二 字符串处理

1 grep命令

普通用法不用在乎引号windows

grep match_pattern file_nametomcat

grep "match_pattern" file_namebash

 

正则使用 grep –E 或者直接使用 egrep均可以服务器

 

2 shell echo命令

显示变量输入与输出

#!/bin/bash网络

read name

echo “$name is a test”

显式换行

echo -e "OK! \n"

显式不换行

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中硬件就是硬件,路径就是路径,然后者则是混淆在一块儿的。

动做

  1. 查看是否已经分配磁盘

fdisk -l

  1. 若是有磁盘,则对磁盘创建分区

fisk /dev/sdb

  1. 分区参数设置

输入m查看帮助菜单

输入p,设置为主分区

输入1,设置为分区号

直接回车,选择默认起始扇区

直接回车,选择默认结尾扇区

  1. 保存分区

输入w,保存分区设置

  1. 使用fdisk -l查看,确认分区创建成功
  2. 创建好分区以后,对分区进行格式化,创建文件系统

mkfs.xfs -f /dev/sdb1

  1. 进行挂载

mount /dev/sdb1 /home/data

若是挂载点不存在,则须要先进行目录的建立

  1. 查看一下挂载是否成功

df -TH /home/data

  1. 修改系统配置/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

代码 2.10: 用户与命令的别名

User_Alias  SOFTWAREMAINTAINERS = swift, john, danny
User_Alias  PASSWORDMAINTAINERS = swift, sysop
Cmnd_Alias  SOFTWARECOMMANDS    = /usr/bin/emerge, /usr/bin/ebuild
Cmnd_Alias  PASSWORDCOMMANDS    = /usr/bin/passwd [a-zA-Z0-9_-]*, !/usr/bin/passwd root
 
SOFTWAREMAINTAINERS  localhost = SOFTWARECOMMANDS
PASSWORDMAINTAINERS  localhost = PASSWORDCOMMANDS

 

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

相关文章
相关标签/搜索