linux常用命令

本文记录一些常用的linux命令,方便在使用时查询,并持续更新中···

一.基础操作

1. 查看目录及文件

1
2
3
4
5
6
> ls            //list列出目录的文件信息
> ls  -l        //list -list以“详细信息”查看目录文件
> ll            //list -list以“详细信息”查看目录文件
> ls  -a        //list  -all查看目录“全部”(包括隐藏文件)文件
> ls  -al       //list  -all list 查看目录“全部”(包括隐藏文件)文件,以“详细信息”展示
> ls  目录      //查看指定目录下有什么文件

2. 目录切换

1
2
3
> cd  dirname       //进行目录切换
> cd  ..            //向上级目录切换
> cd  ~    或 cd     //直接切换到当前用户对应的家目录

3. 目录操作

1) 创建目录 make directory

1
2
3
4
5
6
7
> mkdir  目录名字
> mkdir -p newdir/newdir/newdir       //递归方式创建多个连续目录

//新的多级目录数目如果大于等于2个,就要使用-p参数
mkdir      dir/newdir                //不用-p参数
mkdir  -p  dir/newdir/newdir         //使用-p参数
mkdir  -p  newdir/newdir/newdir      //使用-p参数

2) 移动目录(文件和目录) move

1
2
3
4
> mv  dir1  dir2            //把dir1移动到dir2目录下
> mv  dir1/dir2  dir3       //把dir2移动到dir3目录下
> mv  dir1/dir2  dir3/dir4  //把dir2移动到dir4目录下
> mv  dir1/dir2  ./         //把dir2移动到当前目录下

3) 改名字 (文件和目录)

1
2
3
4
5
6
7
8
> mv  dir1  newdir          //修改dir1的名字为newdir

mv是“移动” 和 “改名字” 合并的指令
> mv  dir1  ./newdir            //dir1移动到当前目录下 并改名字为newdir
> mv  dir1/dir2  dir3           //dir2移动到dir3目录下, 并改名字为“原名”
> mv  dir1/dir2  dir3/newdir    //dir2移动到dir3目录下,并改名字为“newdir”
> mv  dir1/dir2  dir3/dir4      //dir2移动到dir4目录下, 并改名字为“原名”
> mv  dir1/dir2  dir3/dir4/newdir   //dir2移动到dir4目录下, 并改名字为“newdir”

4) 复制(改名字)(文件和目录) copy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
① 文件的复制
> cp  file1  dir/newfile2         //file1被复制一份到dir目录下,并改名字为“newfile2”
> cp  file1  dir               //file1被复制一份到dir目录下,并改名字为“原名”
> cp  dir1/filea  dir2/newfile  //filea被复制一份到dir2目录下,并改名字为“newfile”
② 目录的复制(需要设置-r[recursive递归]参数,无视目录的层次)
> cp -r dir1   dir2             //dir1被复制到dir2目录下,并改名字为"原名"
> cp -r  dir1/dir2  dir3/newdir  //dir2被复制到dir3目录下,并改名字为"newdir"
> cp -r  dir1/dir2  dir3/dir4/   //dir2被复制到dir4目录下,并改名字为"原名"
> cp -r  dir1/dir2  dir3/dir4/newdir   //dir2被复制到dir4目录下,并改名字为"newdir"
> cp -r  dir1  ../../newdir     //dir1被复制到上两级目录下,并改名字为"newdir"

5)删除(文件和目录)remove

1
2
3
4
5
> rm  文件
> rm -r  目录           //-r[recursive递归]递归方式删除目录
> rm -rf  文件/目录     //-r force  递归强制方式删除文件
                        force强制,不需要额外的提示
> rm  -rf  /

4. 文件操作

1) 查看文件内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
cat  filename       //打印文件内容到输出终端
more  filename      //通过敲回车方式逐行查看文件的各个行内容
                    //默认从第一行开始查看
                    //不支持回看
                    //q 退出查看

less                //通过“上下左右”键查看文件的各个部分内容
                    //支持回看
                    //q 退出查看

head -n filename    //查看文件的前n行内容
tail -n filename    //查看文件的最末尾n行内容

wc filename         //查看文件的行数

2) 创建文件

1
2
> touch  dir1/filename
> touch  filename

3) 给文件追加内容

1
2
3
> echo 内容 > 文件名称      //把“内容”以[覆盖写]方式追加给“文件”
> echo 内容 >>  文件名称    //把“内容”以[追加]形式写给“文件”
(如果文件不存在会创建文件)

5.查看当前目录和用户

  • 查看完整的操作位置

    1
    
    pwd
    
  • 查看当前用户是谁

    1
    
    whoami
    

二.系统设置

1. 用户设置

配置文件:/etc/passwd

1) 创建用户 user add

1
2
3
4
># useradd
># useradd  liming          //创建liming用户,同时会创建一个同名的组出来
># useradd  -g 组别编号  username   //把用户的组别设置好,避免创建同名的组出来
># useradd  -g 组编号  -u 用户编号  -d 家目录   username

2) 修改用户 user modify

1
2
># usermod  -g 组编号  -u 用户编号  -d 家目录  -l 新名字  username
(修改家目录时需要手动创建之)

3) 删除用户 user delete

1
2
># userdel  username
># userdel -r  username    //删除用户同时删除其家目录

4) 给用户设置密码,使其登录系统

1
> passwd 用户名

5) 查看用户

1
2
3
4
5
cat /etc/passwd 可以查看所有用户的列表
w 可以查看当前活跃的用户列表

#查看当前是谁
whoami

6) 用户切换

1
2
3
4
5
6
7
8
> su -  或  su - root       //向root用户切换
> exit          //退回到原用户

> su 用户名     //普通用户切换

多次使用su指令,会造成用户的“叠加”:
(su和exit最好匹配使用)
jinnan--->root--->jinnan--->root--->jinnan

2. 组别设置

配置文件: /etc/group

1) 创建组 group add

1
2
3
># groupadd  music
># groupadd  movie
># groupadd  php

2) 修改组 group modify

1
># groupmod  -g gid  -n 新名字  groupname

3) 删除组 group delete

1
># groupdel  groupname    //组下边如果有用户存在,就禁止删除

4) 查看组

1
2
3
cat /etc/group 查看用户组
groups 查看当前登录用户的组内成员
groups gliethttp 查看gliethttp用户所在的组,以及组内成员

3. 权限设置

1).chmod

字母相对方式权限的设置

1
2
3
4
>#chmod (ugo)(+-)(rwx) 目录 u:当前用户,g:同组用户,o:其他组用户;+-增加减少权限;r:读取权限,w:写权限,x:执行权限
>#sudo chmod -R ugo+rwx /usr/local/http2/htdocs/ZZYPHP/ //给该目录下所有子文件目录在当前组其他组都有读写执行权限
//数字绝对方式权限的设置,0:没有权限,1:执行,2:写,3:写执行,4:读,5:读执行,6:读写,7:读写执行
>#chmod 753 目录      //主人7权限,同组5权限,其他组3权限

4.host和hostname设置

  • host

    1
    2
    
    host文件位置:/etc/hosts
    vim /etc/hosts即可编辑
    
  • hostname

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    #查看主机名
    hostname
    
    #修改主机名
    hostname workspace   #立即生效
    sudo vim /etc/hosts
    [新增内容]
    127.0.0.1 workspace
    
    sudo vim /etc/hostname
    [修改内容]
    workspace
    
    sudo vim /etc/sysconfig/network
    [新增或修改]
    HOSTNAME=workspace
    
    sudo vim /etc/cloud/cloud.cfg
    # 删除或者注释语句- update_hostname
    
    reboot
    

5.网络设置

1) 网络服务管理

1
2
3
4
5
#开启停止重启服务
service network start/stop/restart 或
systemctl start/stop/restart network
#服务状态
systemctl status network

2) 查看网络(查看IP)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#查看网络
ifconfig 
ip addr
#查看所使用的网卡名称
ifconfig -a
#############################
ens32:  flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.40  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::20c:29ff:fece:fc3c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ce:fc:3c  txqueuelen 1000  (Ethernet)
        RX packets 17403  bytes 1453165 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1107  bytes 201665 (196.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#############################
当前使用网卡:ens32,ip地址为:192.168.2.40

3) 修改网络配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#查看网卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens32
cd /etc/sysconfig/network-scripts

#修改配置(dhcp)
HWADDR=物理网卡地址
BOOTPROTO=dhcp改为BOOTPROTO=static
HWADDR=00:50:56:2e:c1:74
IPADDR=192.168.103.113
GATEWAY=192.168.103.1
NETMASK=255.255.255.0
DNS1=61.139.2.69
DNS2=114.114.114.114
rm -rf /etc/udev/rules.d/70-persistent-net.rules

6.防火墙

1) firewall

  • 服务管理

    1
    2
    3
    4
    
    启动:systemctl start firewalld
    查看状态:systemctl status firewalld
    停止: systemctl disable firewalld
    禁用: systemctl stop firewalld
    
  • 常用命令

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    #列出所有端口
    firewall-cmd --list-ports
    #列出所有打开的端口
    firewall-cmd --zone=public --list-ports
    #查看端口
    firewall-cmd --zone= public --query-port=80/tcp
    #开放端口,--permanent永久生效,没有此参数重启后失效
    firewall-cmd --zone=public --add-port=2380/tcp --permanent
    firewall-cmd --add-port=445/tcp --permanent
    #删除开放端口
    firewall-cmd --zone= public --remove-port=80/tcp --permanent
    #重新载入
    firewall-cmd --reload
    #显示状态
    firewall-cmd --state
    

2) SELinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统

  • 查看状态

    1
    
    getenforce
    
  • 临时生效

    1
    2
    3
    4
    5
    
    #命令临时生效:
    setenforce 0 (临时生效可以直接用setenforce 0 )
                1 启用
                0 告警,不启用
    chcon -t samba_share_t /go-develop
    
  • 永久生效

    1
    2
    3
    4
    5
    6
    7
    
    # 操作前先备份
    cp /etc/selinux/config /etc/selinux/config.bak
    
    # 更改setlinux级别
    sed -i 's/SELINUX=enforcing/\SELINUX=permissive/' /etc/selinux/config
         ==> vim /etc/selinux/config/  --> SELINUX=enforcing[效果同上]
    # SELINUX参数enforcing代表打开,disabled代表关闭
    
  • 放开权限

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    #开启Samba用户HOME目录权限
    /usr/sbin/setsebool  -P samba_enable_home_dirs=1
    #开启单个共享目录(path)权限
    chcon -t samba_share_t path
    #开启所有共享目录
    #查看防火墙开启状态
    getsebool  -a | grep samba
    
    #只读权限
    /usr/sbin/setsebool -P samba_export_all_ro on
    #读写权限
    /usr/sbin/setsebool -P samba_export_all_rw on
    #查看某个目录(path)是否开启了权限
    ls -ldZ path
    

7.环境变量

  • 临时添加

    1
    2
    
    export ETCDCTL_API=3
    unset ETCDCTL_API
    
  • 永久添加环境变量(影响当前用户)

    1
    2
    3
    4
    
    #vim ~/.bashrc
    export PATH=$PATH:/usr/local/nginx/sbin/
    保存,退出,然后运行:
    #source /etc/profile
    
  • 永久添加环境变量(影响所有用户)

    1
    2
    3
    4
    5
    
    # vim /etc/profile
    在文档最后,添加:
    export PATH=$PATH:/usr/local/nginx/sbin/
    保存,退出,然后运行:
    #source /etc/profile
    
  • 查看系统环境变量

    1
    
    env # 查看环境变量 资源
    

8. 图形界面 与 命令界面 切换

1
2
3
root用户可以切换
># init 3
># init 5 

三.系统管理

1. 系统关机重启

1) 关机命令

1
2
3
4
5
6
7
halt   立刻关机

poweroff  立刻关机

shutdown -h now 立刻关机(root用户使用)

shutdown -h 10 10分钟后自动关机

2) 重启命令

1
2
3
4
5
6
7
reboot  重启

shutdown -r now 立刻重启(root用户使用)

shutdown -r 10 过10分钟自动重启(root用户使用)

shutdown -r 20:35 在时间为20:35时候重启(root用户使用)

3) 日志

1
2
3
4
5
6
#查看关机时间
who -b
last reboot
last reboot | head -1
uptime
cat /proc/uptime

2. 系统服务管理

1) 服务管理

1
2
3
4
5
6
#查看状态
systemctl status {服务名}
#开启停止重启
systemctl start/stop/restart {服务名}  或者 service {服务名} start/stop/restart
#开机启动
systemctl enable/disable {服务名}

2) 服务日志

1
2
3
4
5
6
#查看所有服务日志
journalctl -f
#查看单个服务日志
journalctl -u 服务名 -行数(最新多少行)
#查看系统日志
tail -100 /var/log/message

3. 文件系统挂载/取消挂载

1) 挂载语法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
命令格式:
mount [-fnrsvw] [-t vfstype] [-o options] device dir
---------------------------------------------------------------------------------
参数说明:

1.-fnrsvw
-V:显示程序版本
-h:显示辅助讯息
-v:显示较讯息,通常和 -f 用来除错。
-a:将 /etc/fstab 中定义的所有档案系统挂上。
-F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
-f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
-n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-s-r:等于 -o ro
-w:等于 -o rw

2.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs

3.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集

4.device 要挂接(mount)的设备。

5.dir设备在系统上的挂接点(mount point)

2) 取消挂载语法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
umount [-ahnrvV][-t <文件系统类型>][文件系统]
---------------------------------------------------------------------------------
参数:
-a 卸除/etc/mtab中记录的所有文件系统。
-h 显示帮助。
-n 卸除时不要将信息存入/etc/mtab文件中。
-r 若无法成功卸除,则尝试以只读的方式重新挂入文件系统。
-t<文件系统类型> 仅卸除选项中所指定的文件系统。
-v 执行时显示详细的信息。
-V 显示版本信息。
[文件系统] 除了直接指定文件系统外,也可以用设备名称或挂入点来表示文件系统。

3) 查看挂载

1
df -h

4) 示例:光驱挂载

1
2
3
4
> mount   /dev/cdrom  /home/jinnan/rom      //把光驱挂载到rom目录
> umount  /dev/cdrom                        //(硬件)卸载光驱
> umount  /home/jinnan/rom                  //(挂载点)卸载光驱
> eject                                     //弹出光盘

4. 磁盘管理

1).df查看整体磁盘空间

df:列出文件系统的整体磁盘使用量, 显示磁盘分区上可以使用的磁盘空间

1
2
3
4
5
6
7
8
9
>df [-ahikHTm] [目录或文件名]
选项与参数:
    -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
    -k :以 KBytes 的容量显示各文件系统;
    -m :以 MBytes 的容量显示各文件系统;
    -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
    -H :以 M=1000K 取代 M=1024K 的进位方式;
    -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
    -i :不用硬盘容量,而以 inode 的数量来显示

2).du查看文件和目录

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看

1
2
3
4
5
6
7
8
>du [-ahskm] 文件或目录名称
选项与参数:
    -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
    -h :以人们较易读的容量格式 (G/M) 显示;
    -s :列出总量而已,而不列出每个各别的目录占用容量;
    -S :不包括子目录下的总计,与 -s 有点差别。
    -k :以 KBytes 列出容量显示;
    -m :以 MBytes 列出容量显示;
  • 示例

    1
    
    du -sh --max-depth=1 目录
    

3).fdisk磁盘分区

fdisk 是 Linux 的磁盘分区表操作工具。

1
2
3
4
5
6
7
8
>fdisk [-l] 装置名称
选项与参数:
    -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
    
#### 4).磁盘格式化
>mkfs [-t 文件系统格式] 装置文件名
选项与参数:
    -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

4).lsblk 查看挂载

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#查看挂载信息
$: lsblk  
 
# 查看未挂载的磁盘信息
$: fdisk -l

# 当前未挂载的磁盘为 /dev/sda
$: fdisk /dev/sda
 
# 查看帮助信息
 1. 输入 m 显示所有命令列示。
 2. 输入 p 显示硬盘分割情形,打印分区表。
 3. 输入 a 设定硬盘启动区。
 4. 输入 n 设定新的硬盘分割区。
    4.1. 输入 e 硬盘为[延伸]分割区(extend)。
    4.2. 输入 p 硬盘为[主要]分割区(primary)。
 5. 输入 t 改变硬盘分割区属性。          
    t:分区系统id号
    L:82:linux swap
    83:linux
    86:NTFS window分区
 6. 输入 d 删除硬盘分割区属性。
 7. 输入 q 结束不存入硬盘分割区属性。
 8. 输入 w 结束并写入硬盘分割区属性
 
$: p  => 可查看磁盘类型 要为:gpt

5).fsck磁盘检验

fsck(file system check)用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
>fsck [-t 文件系统] [-ACay] 装置名称
选项与参数:
    -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
    -s : 依序一个一个地执行 fsck 的指令来检查
    -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
    -C : 显示完整的检查进度
    -d : 打印出 e2fsck 的 debug 结果
    -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
    -R : 同时有 -A 条件时,省略 / 不检查
    -V : 详细显示模式
    -a : 如果检查有错则自动修复
    -r : 如果检查有错则由使用者回答是否修复
    -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

6).mount磁盘挂载与卸除

1
>mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点

5.内存管理

1) free查看内存

free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略

  • 语法

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    free [参数]
    
    -b  以Byte为单位显示内存使用情况。 
    
    -k  以KB为单位显示内存使用情况。 
    
    -m  以MB为单位显示内存使用情况。
    
    -g   以GB为单位显示内存使用情况。 
    
    -o  不显示缓冲区调节列。 
    
    -s<间隔秒数>  持续观察内存使用状况。 
    
    -t  显示内存总和列。 
    
    -V  显示版本信息。 
    
  • 常用

    1
    
    free -h
    

2) 释放内存

  • 把buffe中的数据先写入到硬盘中

    1
    
    sync
    
  • 释放内存

    1
    
    echo 3 > /proc/sys/vm/drop_caches
    

3) 查看内存占用前10

1
ps aux | sort -k4nr | head -n 10

三.系统命令

1.查看指令

查看一个指令对应的执行程序文件在哪,查看指令可设置的参数

1
2
> which  指令    #查看指令位置
> man 指令       #查看指令参数'

2. 使用root用户去执行命令

1
2
> sudo 指令
eg.sudo passwd root

3.系统版本信息

1
2
3
#查看系统版本信息
uname -a
cat /etc/redhat-release

4.端口

  • netstat

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    netstat -tunlp | grep 端口号
    -t (tcp) 仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化为数字
    -l 仅列出在Listen(监听)的服务状态
    -p 显示建立相关链接的程序名
    
    #端口监听
    netstat -lnpt
    netstat -nap | grep 15672
    
  • lsof

    1
    
    lsof -i:端口号
    

5.进程

1) 查看进程

  • 语法

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    ps命令查找与进程相关的PID号:
    ps a 显示现行终端机下的所有程序,包括其他用户的程序。
    ps -A 显示所有程序。
    ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    ps -e 此参数的效果和指定”A”参数相同。
    ps e 列出程序时,显示每个程序所使用的环境变量。
    ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
    ps -H 显示树状结构,表示程序间的相互关系。
    ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
    ps s 采用程序信号的格式显示程序状况。
    ps S 列出程序时,包括已中断的子程序资料。
    ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
    ps u 以用户为主的格式来显示程序状况。
    ps x 显示所有程序,不以终端机来区分。
    
  • 示例

    1
    2
    3
    4
    5
    6
    
    #最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。
    ps aux | grep program_filter_word
    ps -ef |grep tomcat
    
    #显示出所有的java进程,去处掉当前的grep进程
    ps -ef|grep java|grep -v grep 
    

2) 杀死进程

1
2
sudo kill -9 端口号
ps killall  httpd  杀死全部的httpd进程

3) 查看线程

1
2
3
4
#查线程
pstree -p 231890
ps -T -p 8240
top -H

6.ssh

  • 安装

    1
    
    yum install ssh
    
  • 服务管理

    1
    2
    3
    4
    
    service sshd start
    或者
    systemctl start sshd
    systemctl status sshd
    
  • 语法

    1
    
    ssh(选项)(参数)
    
  • 选项

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    -1:强制使用ssh协议版本1;
    -2:强制使用ssh协议版本2;
    -4:强制使用IPv4地址;
    -6:强制使用IPv6地址;
    -A:开启认证代理连接转发功能;
    -a:关闭认证代理连接转发功能;
    -b:使用本机指定地址作为对应连接的源ip地址;
    -C:请求压缩所有数据;
    -F:指定ssh指令的配置文件;
    -f:后台执行ssh指令;
    -g:允许远程主机连接主机的转发端口;
    -i:指定身份文件;
    -l:指定连接远程服务器登录用户名;
    -N:不执行远程指令;
    -o:指定配置选项;
    -p:指定远程服务器上的端口;
    -q:静默模式;
    -X:开启X11转发功能;
    -x:关闭X11转发功能;
    -y:开启信任X11转发功能。
    
  • 参数

    1
    2
    3
    4
    5
    6
    
    #name:用户名,server-ip:服务器ip
    ssh name@server-ip
    #如果本地用户和远程用户一致,可以省略name
    ssh server-ip
    #默认端口22,如果远程服务器的端口是其他的,在后面加上-p参数。
    ssh name@server-ip -p 12345
    
  • 远程执行命令

    • 远程执行命令#远程执行命令

      1
      2
      3
      4
      
      #远程执行命令#远程执行命令
      ssh name@server-ip "命令"
      em:
      ssh root@node2 "df -h"
      
    • 执行需要交互的命令

      1
      2
      3
      4
      
      #远程执行命令#远程执行命令
      ssh -t name@server-ip "命令"
      em:
      ssh -t root@node2 "sudo ls /root"
      
    • 执行多行的命令

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      
      #混合使用单引号和双引号换行
      [root@node1 ~]# ssh node2 '
      > ls
      > pwd
      > echo "hello"
      > '
      anaconda-ks.cfg
      infinity-4.2.0-x86_64
      init.txt
      srv-gw-infinity-utils-4.2-1.el7.x86_64.rpm
      yumback
      /root
      hello
      [root@node1 ~]#
      
    • 执行本地的脚本

      1
      2
      3
      4
      5
      
      #不带参数的
      ssh name@server-ip < {路径}.sh
      
      #带参数的
      ssh name@server-ip 'bash -s' < {路径}.sh {脚本参数}
      
    • 执行远程服务器上的脚本

      1
      2
      3
      4
      5
      
      #不带参数的
      ssh name@server-ip {绝对路径}.sh
      
      #带参数的
      ssh name@server-ip {绝对路径}.sh {脚本参数}
      

7.scp

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

  • 参数

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    -1: 强制scp命令使用协议ssh1
    -2: 强制scp命令使用协议ssh2
    -4: 强制scp命令只使用IPv4寻址
    -6: 强制scp命令只使用IPv6寻址
    -B: 使用批处理模式(传输过程中不询问传输口令或短语)
    -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    -p:保留原文件的修改时间,访问时间和访问权限。
    -q: 不显示传输进度条。
    -r: 递归复制整个目录。
    -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
    -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
    -P port:注意是大写的P, port是指定数据传输用到的端口号
    -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
    
  • 从本地复制到远程

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    scp local_file remote_username@remote_ip:remote_folder 
    或者 
    scp local_file remote_username@remote_ip:remote_file 
    或者 
    scp local_file remote_ip:remote_folder 
    或者 
    scp local_file remote_ip:remote_file 
    
    em:
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3 
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music 
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3 
    
  • 从远程复制到本地

    1
    2
    
    scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
    scp -r www.runoob.com:/home/root/others/ /home/space/music/
    

8.find

  • 语法

    find命令使用 Linux find命令可以用不同的搜索标准如名字、类型、所属人、大小等来搜索目录树。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    find path expression search-term
    
    参数说明 :
    find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
    -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
    -amin n : 在过去 n 分钟内被读取过
    -anewer file : 比文件 file 更晚被读取过的文件
    -atime n : 在过去n天内被读取过的文件
    -cmin n : 在过去 n 分钟内被修改过
    -cnewer file :比文件 file 更新的文件
    -ctime n : 在过去n天内被修改过的文件
    -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
    -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
    -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
    -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
    -type c : 文件类型是 c 的文件。
    d: 目录
    c: 字型装置文件
    b: 区块装置文件
    p: 具名贮列
    f: 一般文件
    l: 符号连结
    s: socket
    -pid n : process id 是 n 的文件
    你可以使用 ( ) 将运算式分隔,并使用下列运算。
    exp1 -and exp2
    ! expr
    -not expr
    exp1 -or exp2
    exp1, exp2
    
  • 示例

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
    # find . -name "*.c"
    
    将当前目录及其子目录中的所有文件列出:
    # find . -type f
    
    将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
    # find . -ctime -20
    
    查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
    # find /var/log -type f -mtime +7 -ok rm {} \;
    
    查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
    # find . -type f -perm 644 -exec ls -l {} \;
    
    查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
    # find / -type f -size 0 -exec ls -l {} \;
    

四.备查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量 资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载 磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况 网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息 进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态 用户
# w # 查看活动用户
# id # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户

# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务 服务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务 程序
# rpm -qa # 查看所有安装的软件包

五.软件管理

1.下载到本地

1
>#wget 地址

2.rpm方式安装软件:

1) 安装

1
2
3
4
5
6
7
8
-i: 安装
-v: 显示安装过程
-vv: 显示安装详细过程
-h: 显示安装进度 
-U: 指定的安装包比已安装的安装包新或者未安装
-F: 指定的包比已安装的包新 --oldpackage 指定的包比已安装过的包旧
-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;

2) 卸载

1
2
3
4
5
6
7
-e:删除包

-e 包名
rpm -e `rpm -q vsftpd` 
或
rpm -e vsftpd --allmatches 安装了多个版本的某个rpm可以一次性全部删除
--nodeps 删除时不检查依赖性关系

3) 查询

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
-q: 查询包是否安装
-qa: 查询已安装的所有包
-qf: 文件路径  查询指定的文件来源于哪一个rpm包
-ql: 包名 查询该包提供了哪些文件
-qp: rpm包 对未安装的包,指定rpm文件再配合其他查询子选项来进行各项查询操作
-q: --changelog 包名 查看更新日志
-qc: 包名 查看该软件包所提供的配置文件
-qd: 包名 查看该软件包所提供的文档文件
-qi: 包名 查看该软件包的详细信息
-q**: --scripts 查看安装前及安装后的脚本** 
-q: --provides 包名 查看一个软件包提供了哪些能力
-qR: 包名 查看一个软件包的运行所依赖的能力
-q: --whatprovides 能力名 查看一个能力由哪个包提供
-q: --whatrequires 能力名 查看一个能力依赖于哪些包
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];

-Va:校验所有的RPM软件包,查找丢失的文件[View Lost]

4) 示例

1
2
3
4
5
6
7
>#rpm  -ivh  软件包全名          //安装软件
>#rpm  -q   软件包名(完整)    //query查看软件是否有安装
>#rpm  -e   软件包名 (完整)      //卸载软件
>#rpm  -ql  软件包名 (完整)      //query all  软件安装目录
>#rpm  -qa                      //query all  查看系统里边全部rpm方式安装的软件
>#rpm  -qa  |  grep ftpd(部分名字)          //模糊查找指定软件ftpd是否有安装
软件包全名 = 软件包名+软件版本+支持的系统+支持cpu型号+文件后缀

2.yum安装

1) 语法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#语法
yum [options] [command] package

[options]
-y:对所有的提问都回答“yes”;
-R:设置yum处理一个命令的最大等待时间;
Install:用于安装指定的软件包,同时安装依赖的底层软件包,自动解决依赖关系。
Update:更新系统中已安装的软件包,没有指定软件包名时将更新整个系统中所有软件包。
check-update:检查软件包是否有更新。
remove:卸载指定的软件包,同时删除依赖于指定软件包的其他软件包。
info:查询程序包information。
deplist:查询与指定软件包存在依赖关系的软件包,包括依赖指定软件包,以及指定软件包依赖的底层支持软件包。
groupinstall:安装指定的软件组
groupupdate:更新指定的软件组
grouplist:查询软件组。
groupremove:删除指定的软件组。
list [all | available | installed | updates]:显示程序包   
repolist [all | enabled | disabled]:显示仓库列表

2) 仓库管理

1
2
3
4
5
6
yum repolist [参数]

[参数]
all 显示所有的仓库
enabled 显示已启用的仓库
disabled 显示已禁用的仓库

3) 列表

1
2
3
4
5
6
yum list [参数]

[参数]
available 显示所有可用的,且未安装的
installed 显示所有已安装的包
updates 显示可更新的包

4) 搜索(查找软件包)

1
yum search 关键字

5) 安装

1
2
3
yum install rpm包名 安装远程的rpm包,并用yum解决依赖性关系
yum localinstall |install rpm路径 安装本地的rpm包,并用yum解决依赖性关系
yum localupdate |update rpm路径 更新本地的rpm包,并用yum解决依赖性关系

6) 升级(慎用)

1
2
3
4
5
6
7
#列出所有可更新的软件清单命令:
yum check-update

yum update 包名
注意:
a.如果不跟包名会升级所有包,包括linux内核
b.升级不好你就挂了

7) 卸载(删除软件)

1
2
3
4
yum remove rpm包名
注意:
a.删除的时候会把依赖的也都删了
b.这种删除方式可能导致的问题是,把中间依赖的也删了,但是还有其他组件依赖这个中间包,你会发

8) 软件组管理

1
2
3
4
5
6
7
8
#列出所有可用的软件组列表
yum grouplist

#安装指定软件组,组名可由grouplist查出来
yum groupinstall 组名

#卸载指定软件组
yum groupremove 组名

9) 清理缓存

1
2
3
4
5
#清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

3.压缩管理

1) zip

  • 压缩

    1
    2
    3
    4
    5
    
      #zip命令所在目录为/usr/bin/zip
      #zip [选项] 压缩包名 源文件或源目录
      #选项:
      #   -r:压缩目录
      #em:
    
  • 解压

    1
    2
    3
    4
    5
    
    #unzip [选项] 压缩包名
    #选项:
    #   -d:指定解压缩位置
    #em:
    unzip -d /tmp/ test.zip
    

2) gz

3) tar

  • 压缩(tar.gz,tgz格式是相同的,命名不同而已 )

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    tar -zcvf examples.tgz examples (examples当前执行路径下的目录)
    
    说明:
    -z, --gzip filter the archive through gzip 通过gzip压缩的形式对文件进行归档
    
    举例:
    tar -zcvf file.tgz dir #dir目录
    
    tar -zcvf workspace.tgz clustersvr/ codegen/ datasync/ etc/ gocode-gin/ rbd-man/ smartor/ srv-gw-infinity/ test.go test_syscall.go unicorn var
    tar -zcvf work.tgz work/
    
  • 解压

    1
    2
    3
    4
    5
    6
    
    tar -zxvf examples.tar (解压至当前执行目录下)
    tar -zxvf examples.tar  -C /path (/path 解压至其它路径)
    
    举例:
    tar -zxvf work.tgz
    tar -zxvf work.tgz -C /work/
    

4.上传下载(导入导出)

  • 安装
1
yum install -y lrzsz
  • 导出
1
sz 文件目录路径
  • 导入
1
rz

5.文本转换

  • dos2unix
1
2
3
4
#如果一次转换多个文件,把这些文件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果一样)

dos2unix file1 file2 file3 
dos2unix -o file1 file2 file3 

6.vim

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#打开创建
>vim filename //打开vim并创建名为filename的文件

#vim模式
正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
插入模式(按i键进入) 左下角显示--INSERT--
可视模式(不知道如何进入) 左下角显示--VISUAL--

#退出
>:wq 保存并退出
>ZZ 保存并退出
>:q! 强制退出并忽略所有更改
>:e! 放弃所有修改,并打开原来文件。

#插入命令
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行

#光标移动
在命令行模式下输入G  可以直接跳转到页面的底部
在命令行模式下输入1G 可以跳转到页面的头部位置
>:52    //跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车
>52G    //跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏

#撤销
u 撤销(Undo)
U 撤销对整行的操作
Ctrl + r 重做(Redo),即撤销的撤销。
#删除
双击 d

#显示行号
:set nu 或 :set number
#跳转行号
:数字

#执行shell命令
:!command
:!ls 列出当前目录下文件
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。

7.alnmp软件管理

1) nginx

  • 服务器,启动,停止,重启
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
0)检查nginx配置文件是否正确
nginx -t -c /usr/nginx/conf/nginx.conf 或 /usr/nginx/sbin/nginx -t
1)启动
nginx -c /usr/local/nginx/conf/nginx.conf 或 usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
/usr/sbin/nginx -c /etc/nginx/nginx.conf
2)停止
A.查询主进程号:ps -ef | grep nginx
B.停止主进程号:
从容停止Nginx:kill -QUIT 主进程号
快速停止Nginx:kill -TERM 主进程号
强制停止Nginx:kill -9 主进程号
3)平滑重启
kill -HUP 住进称号或进程号文件路径 或 /usr/local/nginx/sbin/nginx -s reload
/usr/sbin/nginx -c /etc/nginx/nginx.conf -s reload

2) apache

  • 服务器,启动,停止,重启
1
2
3
4
5
6
7
8
0)检查配置文件
/usr/local/apache2/bin/apachectl configtest
1)启动
/usr/local/apache2/bin/apachectl start apaceh
2)停止
/usr/local/apache2/bin/apachectl stop
3)重启
/usr/local/apache2/bin/apachectl restart

3) mysql

  • 服务器,启动,停止,重启
1
2
3
4
5
6
1)启动
/etc/inint.d/mysqld start
2)停止
/etc/inint.d/mysqld stop
3)重启
/etc/inint.d/mysqld restart

4) php

  • php-fpm服务,启动,停止,重启
1
2
3
4
5
6
1)启动
/etc/inint.d/php-fpm start
2)停止
/etc/inint.d/php-fpm stop
3)重启
/etc/inint.d/php-fpm restart