linux常用命令

一 启动项管理

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

动作

  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

原文地址:https://www.cnblogs.com/aguai1992/p/9341225.html