logo头像

PHP是世界上最好的语言

liunx常用命令

Linux 是我们开发完成后,部署应用的标准系统,介绍一些常用的命令

tar 打包命令(压缩)

选项:

  1. -c 打包
  2. -f 指定压缩包的文件名
  3. -v 显示打包文件过程
    1
    2
    # 选项 -cvf 一般是习惯用法,打包时需要指定打包之后的文件名,而且要用".tar"作为扩展名
    [root@localhost ~]# tar -zvf fileNmae.tar sourceFile

tar 解打包命令(解压缩)

选项:

  1. -x 解打包
  2. -f 指定压缩包的文件名
  3. -v 显示打包文件过程
  4. -t 测试,就是不解打包,只是査看包中有哪些文件
  5. -C 指定解打包位置
    1
    2
    3
    4
    5
    6
    # 解打包到当前目录下
    [root@localhost ~]# tar -xvf fileNmae.tar
    # 解打包到当前指定目录下(/tmp/目录下)
    [root@localhost ~]# tar -xvf fileNmae.tar -C /tmp
    # 査看文件包中有哪些文件
    [root@localhost ~]# tar -tvf fileNmae.tar

.tar.gz.tar.bz2格式

选项:

  1. -z 压缩和解压缩 .tar.gz格式
  2. -j 压缩和街压缩 .tar.bz2格式

压缩与解压缩 .tar.gz格式

1
2
3
4
# 压缩文件或目录为 .tar.gz 格式
[root@localhost ~]# tar -zcvf tmp.tar.gz sourceFile
# 解压缩文件或目录为 .tar.gz 格式
[root@localhost ~]# tar -zxvf sourceFile.tar.gz -C /tmp

压缩与解压缩 .tar.bz2格式

1
2
3
4
# 压缩文件或目录为 .tar.bz2 格式
[root@localhost ~]# tar -jcvf tmp.tar.bz2 sourceFile
# 解压缩文件或目录为 .tar.bz2 格式
[root@localhost ~]# tar -jxvf sourceFile.tar.bz2 -C /tmp

useradd (添加用户)

选项 含义
-u 手工指定用户的UID,注意UID的范围不要小于500
-d 手工指定用户的主目录,主目录必须写绝对路径,如果手工指定主目录,则一定要注意权限
-c 手工指定/etc/passwd文件中各用户信息中第5个字段的描述性内容,可随意配置
-g 手工指定用户的初始组.一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组.一旦手动指定,则系统将不会在创建此默认的初始组目录
-G 指定用户的附加组.我们把用户加入其他组,一般都使用附加组
-s 手工指定用户的登录Shell,默认是 /bin/bash
-e 指定用户的失效曰期,格式为YYYY-MM-DD.也就是 /etc/shadow文件的第八个字段
-o 允许创建的用户的UID相同.例如,执行useradd -u 0 -o usertest命令建立用户usertest,它的UIDroot用户的UID相同,都是0
-m 建立用户时强制建立用户的家目录.在建立系统用户时,该选项是默认的
-r 创建系统用户,也就是UID1~499之间,供系统程序使用的用户.由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录

useradd 默认参数文件 /etc/default/useradd

1
2
3
4
5
6
# 创建 test 普通用户
[root@localhost ~]# useradd test
# 创建 test 普通用户组
[root@localhost ~]# groupadd test
# 查看 useradd 默认参数设置
[root@localhost ~]# useradd -D

userdel (删除用户)

1
2
# -r 选项表示在删除 test 用户的同时删除 test 用户的家目录
[root@localhost ~]# userdel -r test

passwd (设置密码)

选项 含义
-s 查询用户密码的状态,也就是 /etc/shadow文件中此用户密码的内容.仅root用户可用
-l 暂时锁定用户,该选项会在 /etc/shadow文件中指定用户的加密密码串前添加 !,使密码失效.仅root用户可用
-u 解锁用户,和 -l选项相对应,也是只能root用户使用
–stdin 可以将通过管道符输出的数据作为用户的密码.主要在批量添加用户时使用
-n 设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow文件中各行密码的第4个字段
-x 设置该用户的密码有效期,对应 /etc/shadow文件中各行密码的第5个字段
-w 设置用户密码过期前的警告天数,对于 /etc/shadow文件中各行密码的第6个字段
-i 设置用户密码失效日期,对应 /etc/shadow文件中各行密码的第7个字段
1
2
3
4
5
6
7
8
9
10
11
# 修改当前用户的密码
[root@localhost ~]#passwd
Changing password for user lamp.
New password: //直接输入新的口令,但屏幕不会有任何反应
BAD PASSWORD: it is WAY too short //口令太简单或过短的错误!这里只是警告信息,输入的密码依旧能用
Retype new password: //再次验证输入的密码,再输入一次即可
passwd: all authentication tokens updated successfully. //提示修改密码成功
# 修改 test 用户的密码
[root@localhost ~]# passwd test
# 查看 test 用户密码的状态
[root@localhost ~]# passwd -S test

usermod (修改用户)

选项 含义
-c 修改用户的说明信息,即修改 /etc/shadow文件目标用户信息的第5个字段
-d 修改用户的主目录,即修改 /etc/shadow文件中目标用户信息的第6个字段,需要注意的是,主目录必须写绝对路径
-e 修改用户的失效曰期,格式为YYYY-MM-DD,即修改 /etc/shadow文件目标用户密码信息的第8个字段
-g 修改用户的初始组,即修改 /etc/passwd文件目标用户信息的第4个字段(GID)
-u 修改用户的UID,即修改 /etc/passwd文件目标用户信息的第3个字段(UID)
-G 修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group文件
-l 修改用户名称
-L 临时锁定用户(Lock)
-U 解锁用户(Unlock),和 -L对应
-s 修改用户的登录Shell,默认是 /bin/bash
1
2
3
4
5
6
7
8
#锁定 test 用户
[root@localhost ~]# usermod -L test
#解锁 test 用户
[root@localhost ~]# usermod -U test
#把 test 用户加入 root组
[root@localhost ~]# usermod -G root test
#修改 test 用户说明
[root@localhost ~]# usermod -c "test user" test

chage (修改用户密码状态)

chage的这个功能常和passwd批量初始化用户密码功能合用,来达到第一次登陆需要重新设置密码的目的

选项 含义
-l 列出用户的详细密码状态
-d 修改 /etc/shadow文件中指定用户密码信息的第3个字段,也就是最后一次修改密码的日期,格式为YYYY-MM-DD
-m 修改密码最短保留的天数,也就是 /etc/shadow文件中的第4个字段
-M 修改密码的有效期,也就是 /etc/shadow文件中的第5个字段
-W 修改密码到期前的警告天数,也就是 /etc/shadow文件中的第6个字段
-i 修改密码过期后的宽限天数,也就是 /etc/shadow文件中的第7个字段
-E 修改账号失效日期,格式为YYYY-MM-DD,也就是 /etc/shadow文件中的第8个字段
1
2
3
4
5
6
#查看一下 test 用户密码状态
[root@localhost ~]# chage -l test
# 设置 test 用户的密码: test
[root@localhost ~]# passwd test
#通过chage命令设置此账号密码创建的日期为1970年1月1日(0 就表示这一天),这样用户登陆后就必须修改密码
[root@localhost ~]#chage -d 0 test

groupadd (添加用户组)

选项:

  1. -g: 指定组ID(GID)
  2. -r: 创建系统群组
    1
    2
    # 添加group1组
    [root@localhost ~]# groupadd group1

groupmod (修改用户组)

选项:

  1. -g: 修改组ID(GID)
  2. -n: 修改组名
    1
    2
    # 把组名 group1 修改为 testgrp 
    [root@localhost ~]# groupmod -n testgrp group1

groupdel (删除用户组)

此命令仅适用于删除那些不是任何用户初始组的群组,如果有群组还是某用户的初始群组,则无法使用groupdel命令成功删除

1
2
# 删除 group1 组
[root@localhost ~]#groupdel group1

gpasswd (添加用户组)

选项 功能
选项为空时,表示给群组设置密码,仅root用户可用
-A 将群组的控制权交给 user1,… 等用户管理,设置 user1,… 等用户为群组的管理员,仅root用户可用
-M 将 user1,… 加入到此群组中,仅root用户可用
-r 移除群组的密码,仅root用户可用
-R 让群组的密码失效,仅root用户可用
-a 将 user 用户加入到群组中
-d 将 user 用户从群组中移除
1
2
3
4
5
6
7
8
9
10
# 创建新群组 group1,并将群组交给 test 管理
[root@localhost ~]# groupadd group1 // 创建群组
[root@localhost ~]# gpasswd group1 // 设置密码吧
Changing the password for group group1
New Password:
Re-enter new password:
[root@localhost ~]# gpasswd -A test group1 // 加入群组管理员为 test
# 以test用户登陆系统,并将用户 test 和 test1 加入group1群组。
[test@localhost ~]#gpasswd -a test group1
[test@localhost ~]#gpasswd -a test1 group1

chgrp(修改文件/目录的所属组)

1
2
3
4
# -R(注意是大写)选项,表示更改连同子目录中所有文件的所属组信息
# chgrp [-R] 所属组 文件名/目录名
# 修改test.log文件的所属组为group1
[root@localhost ~]# chgrp group1 test.log

chown(修改文件/目录的所有者和所属组)

1
2
3
4
5
6
7
8
9
10
11
# -R(注意是大写)选项,表示更改连同子目录中所有文件的所属组信息
# 当只需要修改所有者时,可使用如下 chown 命令的基本格式: chown [-R] 所有者
# 将 testFile 文件的所属用户改成 user
[root@localhost ~]# chown user testFile
# 将 test 目录下中所有文件所属用户改成 user
[root@localhost ~]# chown -R user test/
# 同时更改所有者和所属组,chown 命令的基本格式为: chown [-R] 所有者:所属组 文件/目录
# 将 testFile 文件的所属用户和所属组改成 user
[root@localhost ~]# chown user:user testFile
# 将 test 目录下中所有文件所属用户和所属组改成 user
[root@localhost ~]# chown -R user:user test/

chmod(修改文件/目录的权限)

各个权限与数字的对应关系如下:

权限 数字
-r 4
-w 2
-x 1

rwxrw-r-x来说,所有者、所属组和其他人分别对应的权限值为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5
# chmod [-R] 权限值 文件名
# 设置 test 文件的权限为 777
[root@localhost ~]# chmod -R 777 test
# 设置 test 目录下的所有子文件的权限为 777
[root@localhost ~]# chmod -R 777 test/
# 权限前的字符,表示文件的具体类型,比如 d 表示目录,- 表示普通文件,l 表示连接文件,b 表示设备文件
[root@localhost ~]# ls -l
total 36
drwxr-xr-x. 2 root root 4096 Apr 15 16:33 Desktop
drwxr-xr-x. 2 root root 4096 Apr 15 16:33 Documents
-rwxr-xr-x. 2 root root 4096 Apr 15 16:33 post-install
...

chattr(修改文件/目录的权限属性)

chattr命令,专门用来修改文件或目录的隐藏属性,只有root用户可以使用.该命令的基本格式为:
[root@localhost ~]# chattr [+-=] [属性] 文件或目录名
+表示给文件或目录添加属性,-表示移除文件或目录拥有的某些属性,=表示给文件或目录设定一些属性

选项 功能
i 如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件
a 如果对文件设置a属性,那么只能在文件中増加数据,但是不能删除和修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除文件
u 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录
s u相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用0填充所占用的区域),不可恢复
1
2
3
4
# 给 test 文件添加 i 属性
[root@localhost ~]# chattr +i test
# 给 test 目录添加 i 属性
[root@localhost ~]# chattr +i test/

lsattr(查看文件系统属性)

常用选项:

  1. -a 后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
  2. -d 如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息
  3. -R 和 -d恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来
    lsattr 用于显示文件或目录的隐藏属性,其基本格式如下:
    1
    2
    [root@localhost ~]# lsattr [选项] 文件或目录名
    [root@localhost ~]# chattr +aij attrtest

ps(静态地查看系统中正在运行的进程)

选项:

  1. a 显示一个终端的所有进程,除会话引线外
  2. u 显示进程的归属用户及内存的使用情况
  3. x 显示没有控制终端的进程
  4. -l 长格式显示,显示更加详细的信息
  5. -e 显示所有进程
    1
    2
    3
    4
    5
    6
    # 查看系统中所有的进程
    [root@localhost ~]# ps aux
    # 查看系统中所有的进程,而且还能看到进程的父进程的PID和进程优先级
    [root@localhost ~]# ps -le
    # 只能查看当前Shell产生的进程
    [root@localhost ~]# ps -l

top(显示命令运行时这个时间节点的进程状态)

top命令格式如下:
[root@localhost ~]#top [选项]
选项:

  1. -d 秒数,指定top命令每隔几秒更新,默认是3秒
  2. -b 使用批处理模式输出.一般和 -n选项合用,用于把top命令重定向到文件中
  3. -n 次数,指定top命令执行的次数
  4. -p 指定PID只查看某个PID的进程
  5. -s 使top命令在安全模式中运行,避免在交互模式中出现错误,
  6. -u 用户名,只监听某个用户的进程
    top命令的交互模式中可以执行的命令:
  7. ? 或h显示交互模式的帮助
  8. P 按照CPU的使用率排序,默认就是此选项
  9. M 按照内存的使用率排序
  10. N 按照PID排序
  11. T 按照CPU的累积运算时间排序,也就是按照(TIME+)项排序
  12. k 按照PID给予某个进程一个信号,一般用于中止某个进程
  13. r 按照PID给某个进程重设优先级(Nice)值
  14. q 退出top命令

    pstree(查看进程树)

    pstree命令格式如下:
    [root@localhost ~]# pstree [选项]
    选项:
  15. -p 菜单进程的 PID
  16. -u 显示进接的所属用户

    kill(终止进程)

    命令格式如下:
    [root@localhost ~]# kill [信号] PID
    常见的进程信号:
信号代号 信号名称 说 明
1 SIGHUP 该信号让进程立即关闭,然后重新读取配置文件之后重启
9 SIGKILL 用来立即结束程序的运行,本信号不能被阻塞、处理和忽略,一般用于强制中止进程
15 SIGTERM 正常结束进程的信号,kill命令的默认信号
1
2
3
4
5
6
# 杀死PID是2248的进程,默认信号是15,正常停止
[root@localhost ~]# kill 2248
# 使用 -1 信号,让 PID 是2248主进程重新启动
root@localhost ~]# kill -1 2246
# 使用 -19 信号,让PID为2313的进程暂停.相当于在vi界面按Ctrl+Z快捷键
[root@localhost ~]# kill -19 2313

killall(终止特定的一类进程)

命令格式如下:
[root@localhost ~]# killall [选项] [信号] 进程名
选项:

  1. -i 交互式,询问是否要杀死某个进程
  2. -l 忽略进程名的大小写