Linux(3):linux目录结构

时间:2022-04-01 01:25:32

查看系统版本:

[root@neo ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@neo ~]# uname -r
2.6.32-696.el6.x86_64
[root@neo ~]# uname -m
x86_64
[root@neo ~]# uname -a
Linux neo 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@neo ~]# 

# cat /etc/redhat-release  查看系统版本, uname -r  查看内核版本 , 通常用这两个命令即可;uname -m 显示系统位数

 

变量

1. 查看变量的内容:
# echo $变量名,如:
echo $PS1

[root@neo ~]# echo $PS1
[\u@\h \W]\$

2. 向变量中放入内容:
# 变量名=内容

# PS1 是系统的环境变量;环境变量一般都是大写的,而且在系统中任何的地方都可以使用。PS1 这个环境变量就是控制命令行样子的
[root@neo ~]# echo $PS1
[\u@\h \W]\$
# \u 是指当前用户名,\h 是指当前主机名(hostname),\W 是指当前的位置,相当于pwd (工作中 PS1 这个变量一般不要改)

 

linux系统优化:

1. 添加普通用户账号

1.1 linux 用户分类:
    root 用户 --- linux 中的皇帝
    普通用户
1.2 添加普通用户 # 添加普通用户的命令: useradd 普通用户名; 查看用户的信息(以及用户是否存在)的命令: id 普通用户名;为普通用户设置密码: passwd 普通用户名 [root@neo ~]# useradd oldboy [root@neo ~]# id oldboy uid=500(oldboy) gid=500(oldboy) groups=500(oldboy) [root@neo ~]# id neo id: neo: No such user [root@neo ~]# id root uid=0(root) gid=0(root) groups=0(root) [root@neo ~]# [root@neo ~]# passwd oldboy Changing password for user oldboy. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. [root@neo ~]# 1.3 切换用户: # 切换用户的命令: su - 用户名 ; 查看当前用户的命令: whoami [root@neo ~]# whoami root [root@neo ~]# su - oldboy [oldboy@neo ~]$ whoami oldboy 1.4 退出当前用户 # 退出当前用户的命令: 快捷键 --- ctrl + d ;也可以用 su - root (但是root密码会比较复杂,不方便) [oldboy@neo ~]$ # ctrl + d [oldboy@neo ~]$ logout [root@neo ~]#

 

2. 关闭 SELinux

# 查看 SELinux 的状态的命令:getenforce   (Enforcing 表示 SELinux正在运行;permissive 表示 SELinux 临时关闭;disabled 表示 SELinux永久关闭)

2.1 临时关闭 SELinux (重启服务器后 SELinux会重新开启)
# 命令: setenforce 0
[root@neo ~]# getenforce
Enforcing
[root@neo ~]# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@neo ~]# setenforce 0
[root@neo ~]# 
[root@neo ~]# getenforce
Permissive


2.2 永久关闭 SELinux
# 修改 /etc/selinux/config 这个配置文件:把 SELINUX=enforcing 改成 SELINUX=disabled (重启服务器后才会生效)
[root@neo ~]# vim /etc/selinux/config 
[root@neo ~]# grep 'SELINUX=' /etc/selinux/config 
# SELINUX= can take one of these three values:
SELINUX=disabled
[root@neo ~]# 

 

3. 关闭 iptables

# 服务器对外使用时(服务器有外网),需要开启防火墙
# 服务器只有内网(局域网)时,一般要关闭防火墙(并发高时也需要关闭防火墙)

# 查询防火墙是否在运行的命令: /etc/init.d/iptables status
[root@neo ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

[root@neo ~]# 
# 上面的信息表示防火墙正在运行

# 临时关闭防火墙:(工作中关闭防火墙时建议关闭两次)
[root@neo ~]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@neo ~]# /etc/init.d/iptables stop
[root@neo ~]# 
[root@neo ~]# /etc/init.d/iptables status
iptables: Firewall is not running.

# 这是临时关闭防火墙的方法;系统重启后防火墙会重新开启,因为此时的防火墙会开机自动启动
# 查看开机启动项的命令: chkconfig    # 如果 3:on 表示是开机启动的软件
# 查看防火墙是否开机启动: chkconfig | grep iptables
[root@neo ~]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:on    4:on    5:on    6:off


# 永关闭防火墙:设置防火墙开机时,不自动启动
# 让防火墙开机时,不自动启动的命令: chkconfig iptables off
[root@neo ~]# chkconfig iptables off
[root@neo ~]# 
[root@neo ~]# chkconfig |grep ipt
iptables           0:off    1:off    2:off    3:off    4:off    5:off    6:off

# 开机启动防火墙: chkconfig iptables on
[root@neo ~]# chkconfig iptables on
[root@neo ~]# chkconfig |grep ipt
iptables           0:off    1:off    2:on    3:on    4:on    5:on    6:off

 

4. 防止显示中文乱码

# 查看系统的字符集的命令:echo $LANG  # LANG 也是环境变量,表示系统用的什么字符集
[root@neo ~]# echo $LANG
en_US.UTF-8
# 语言.字符集

# 修改字符集
4.1 临时修改: export LANG=zh_CN.UTF-8  # 往环境变量中放入内容时,需要在其前面加上 export
[root@neo ~]# export LANG=zh_CN.UTF-8
[root@neo ~]# echo $LANG
zh_CN.UTF-8

4.2 永久修改字符集:
[root@neo ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@neo ~]# 
# 把上面的 LANG="en_US.UTF-8" 改成你想要的字符集就能永久改变系统字符集(但不要这么做)

# 利用 source 让上面的 /etc/sysconfig/i18n 生效
[root@neo ~]# source /etc/sysconfig/i18n
[root@neo ~]# echo $LANG
en_US.UTF-8
[root@neo ~]# 

# 中文乱码的原因:
    linux使用的字符集 与 远程连接工具使用的字符集(如xshell)不一致

 

Linux目录结构

1. 目录结构特点

1.1 一切从根开始
1.2 Linux中每个设备可以挂在任何目录上面
1.3 Linux下面的设备(光盘/磁盘分区)没有挂载无法使用;挂载相当于给 磁盘分区/设备 开了一个入口,通过入口进入到光盘/磁盘分区 中,这个入口即 挂载点,挂载点本质上就是一些目录

 

2. Linux目录结构简介

# linux核心目录简介:
bin ---->  存放命令、二进制文件的存放目录,binary
boot --->  系统引导程序 + 【系统的内核】
dev ---->  device ,设备、光盘、硬盘; <---> 磁盘挂载才能使用
etc ---->  存入系统的配置文件
home --->  普通用户的家目录
lib ---->  libary,库,库文件
lib64 -->  系统是 64位,库文件
host+found --->  磁盘或文件系统损坏 断电 临时文件位置
media --->
mnt ---> 临时的挂载点  <--> 挂载点,目录,给设备提供了一个入口
opt ---> option;第三方软件安装在这里
proc ---->  虚拟的目录;目录里面的内容是内存中信息(内核、进程、软件)  <---> 为了解决:linux 中一切皆文件
root --->  root用户的家目录  
sbin --->  super binary;超级命令,只有root用户能用的命令
selinux --->  selinux 及他的配置文件存放的位置
srv --->  
sys --->  虚拟的目录,内存信息
tmp --->  temp;临时文件的存放位置
usr --->  存放用户的程序
var --->  variable;经常变换的文件,系统日志

 

3. Linux目录详解

/etc 目录下面的内容:

# /etc 目录下面的内容:
/etc/sysconfig/network-scripts/ifcfg-eth0   # 网卡的配置文件
/etc/resolv.conf     # 文件目录详解
/etc/hosts
/etc/sysconfig/network
/etc/fstab
/etc/rc.local
/etc/inittab
/etc/init.d
/etc/profile
/etc/bashrc

/etc/sysconfig/network-scripts/ifcfg-eth0

#  /etc/sysconfig/network-scripts/ifcfg-eth0
[root@neo ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0                ### 网卡的名字
HWADDR=00:0c:29:26:b5:57   #@@ hardware address 硬件地址;MAC地址
TYPE=Ethernet              ### 互联网
UUID=7aef3188-c7e3-49a9-ace8-c20bae02381a   ### UUID,系统中唯一的标识
ONBOOT=yes                 #@@ booton 在重启的时候是否开启网卡(自动运行)
NM_CONTROLLED=yes          ### 是否能被network软件进行管理
BOOTPROTO=none             #@@  网卡获取ip地址的方式
# 网卡获取ip地址的方式:
# none/static ---> ip地址是固定的
# dhcp        ---> 自动获取ip地址


IPADDR=10.0.0.200          #@@ ip address ip地址
NETMASK=255.255.255.0      ### 子网掩码
GATEWAY=10.0.0.2           #@@  网关(默认的出口)
USERCTL=no                 ### 是否允许普通用户管理网卡(开、关、重启)
PEERDNS=yes                ### PEERDNS=yes  表示 网卡配置文件中的DNS优先于 /etc/resolv.conf; no 的话表示 这两个没有任何关系
IPV6INIT=no
[root@neo ~]# 

# DNS1=223.5.5.5
# DNS2=223.6.6.6

# DNS
# 把使用的域名转换为IP地址 ---> DNS : 域名解析服务/系统

### 阿里云的DNS:
# 223.5.5.5
# 223.6.6.6

### 114 的DNS:
# 114.114.114.144
# 114.114.115.115

# 谷歌的DNS:
# 8.8.8.8

### 常见的DNS有关的错误
[root@neo ~]# yum install tree
Loaded plugins: fastestmirror, security
Setting up Install Process
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=stock error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
Error: Cannot find a valid baseurl for repo: base
[root@neo ~]#

Couldn't resolve host 'mirrorlist.centos.org'  # resolve ---> 解析; host ---> 域名

# Linux无法上网:
1. ping www.baidu.com  # 是否能上网
2. ping 223.5.5.5  # DNS 是否有问题;223.5.5.5 是一个外网IP,此时的ping 不经过 DNS
# 上面两步如果都报错,说明是网络配置有问题;如果第1步报错,第2步不报错,说明是DNS的有问题

# 修改DNS:
# 在网卡配置文件中添加上:
DNS1=223.5.5.5
DNS2=223.6.6.6

[root@neo ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@neo ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0c:29:26:b5:57
TYPE=Ethernet
UUID=7aef3188-c7e3-49a9-ace8-c20bae02381a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.0.0.200
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
USERCTL=no
PEERDNS=yes
IPV6INIT=no
DNS1=223.5.5.5
DNS2=223.6.6.6
[root@neo ~]# 
# 修改完上述配置文件后,需要重启网卡让配置文件生效
# 方式一:重启某一个网卡: ifdown eth0 && ifup eth0  #  && 表示前一个命令成功后就执行后一个命令
[root@neo ~]# ifdown eth0 && ifup eth0
Determining if ip address 10.0.0.200 is already in use for device eth0...
[root@neo ~]# 

# 方式二: 重启所有网卡: /etc/init.d/network restart
[root@neo ~]# 
[root@neo ~]# /etc/init.d/network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Determining if ip address 10.0.0.200 is already in use for device eth0...
                                                           [  OK  ]
[root@neo ~]# 

文件目录详解 ---> /etc/resolv.conf  --->  用于配置DNS

#  文件目录详解 ---> /etc/resolv.conf  --->  用于配置DNS
[root@neo ~]# cat /etc/resolv.conf

nameserver 223.5.5.5
nameserver 223.6.6.6

# 网卡配置文件中的DNS优先于 /etc/resolv.conf;配置DNS基本都在 网卡里面配置

 

修改主机名(hostname)

# 修改主机名(hostname)
# /etc/sysconfig/network 合作可用于修改主机名的文件
# 1. 查看当前的主机名的命令:hostname
[root@neo ~]# hostname
neo

# 2. 临时修改主机名: hostname 新主机名    (重新连接xshell后临时主机名生效;重启服务器后临时主机名失效)
[root@neo ~]# hostname NEO
[root@neo ~]# 
Connection closed.

Type `help' to learn how to use Xshell prompt.
Xshell:\> 

Connecting to 10.0.0.200:22...
Connection established.
Escape character is '^@]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Thu Mar 14 17:04:49 2019 from 10.0.0.1
[root@NEO ~]# 

# 3. 永久修改主机名: vim /etc/sysconfig/network  # 修改 /etc/sysconfig/network 文件中的 HOSTNAME=  (重启服务器后新的主机名生效)
[root@NEO ~]# vim /etc/sysconfig/network
[root@NEO ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=NEO
[root@NEO ~]# hostname
NEO


# vi/vim 快捷键:
# 删除光标所在位置到行尾的所有内容(命令行模式下):D  
# xshell 快捷键:
# 使用上一个命令的最后一个内容: Esc + .

文件目录详解 ---> /etc/hosts  :IP地址与域名的解析关系 (对主机名进行解析的一个文件)

# 文件目录详解 ---> /etc/hosts  :IP地址与域名的解析关系 (对主机名进行解析的一个文件)
# 在 /etc/hosts 文件中加上: IP 域名
[root@NEO ~]# vim /etc/hosts
[root@NEO ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.200 www.jd.com
[root@NEO ~]# ping www.jd.com
PING www.jd.com (10.0.0.200) 56(84) bytes of data.
64 bytes from www.jd.com (10.0.0.200): icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from www.jd.com (10.0.0.200): icmp_seq=2 ttl=64 time=0.044 ms
^C
--- www.jd.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1919ms
rtt min/avg/max/mdev = 0.022/0.033/0.044/0.011 ms
[root@NEO ~]# 

# 上述方法的作用大多是用于测试

# Windows 系统下的 hosts 路径:C:\Windows\System32\drivers\etc

 

文件目录详解 ---> /etc/fstab  ---> 开机的时候自动挂载的文件(开机的进修给每个磁盘分区开一个入口)

# 查看磁盘使用情况的命令: df  或者是 df -h  (通常用 df -h  命令,这个人类可读的信息); -h 这个参数表示 以人类可读的形式显示大小
[root@NEO ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3        9213440 1449756   7289012  17% /
tmpfs             242992       0    242992   0% /dev/shm
/dev/sda1         194241   39969    144032  22% /boot
[root@NEO ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.4G  7.0G  17% /
tmpfs           238M     0  238M   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
[root@NEO ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Oct 16 00:33:56 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=cd2601d7-02d0-4070-811f-492ea7b92e85 /                       ext4    defaults        1 1
UUID=1ba683a1-dd30-4d4a-a3c2-f3d4f5c405aa /boot                   ext4    defaults        1 2
UUID=062fbbe4-edbd-4b69-8e09-6def7e7d780b swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@NEO ~]# 

# 上述 cat 信息中,第1列表示 设备/分区;第2列表示 入口/目录/挂载点

# 查看 UUID 分区的 命令: blkid
[root@NEO ~]#  blkid
/dev/sda3: UUID="cd2601d7-02d0-4070-811f-492ea7b92e85" TYPE="ext4" 
/dev/sda1: UUID="1ba683a1-dd30-4d4a-a3c2-f3d4f5c405aa" TYPE="ext4" 
/dev/sda2: UUID="062fbbe4-edbd-4b69-8e09-6def7e7d780b" TYPE="swap" 
[root@NEO ~]# 

 

文件目录详解 --->  /etc/rc.local ---> 开机的时候自动运行的文件(需要开机自启动的软件/命令/服务放在这个文件中即可)

# 让一个软件/脚本/服务开机自动运行的方法:
1. 通过 /etc/rc.local  # 这种是常用的方式;这个相当于服务器运行软件的清单
2. 通过 chkconfig 管理 开机自启动

 

文件目录详解  ---> /etc/inittab --->  开机时【运行级别】的配置文件

# 1. linux 运行级别(模式/状态):
0   表示 关机状态(不要把运行级别设置为0)
1   表示 单用户模式/状态(用于root用户密码忘记了;这个状态下没有网络)
2    表示 多用户模式,但是没有NFS
3    表示 完全的多用户模式(命令行模式/文本模式;工作中默认的模式)
4    表示 未使用
5    表示 X11/桌面模式/图形化界面模式 
6    重启状态(也不要把运行级别设置为6)

# 2. 查看当前的运行级别:
# 查看当前运行级别的命令: runlevel
[root@NEO ~]# runlevel
N 3
[root@NEO ~]# 

N 3 ---> N 表示上一次的运行级别; 3 表示当前系统的运行级别

# 3. 切换运行级别 --- 临时 (不要切换成0或6)
# 切换运行级别的命令: init 级别
[root@NEO ~]# init 5
[root@NEO ~]# runlevel
3 5

# 4. 永久修改运行级别:修改 /etc/inittab 文件,修改 其中的 id:3:initdefault:  的 id 后的级别 (但是,这个文件不要改)
[root@NEO ~]# tail -1 /etc/inittab
id:3:initdefault:
# 重启服务器后生效

文件目录详解 ---> /etc/init.d  ---> 这个目录下放着一些 系统服务管理的命令(其实是脚本)

文件目录详解 ---> /etc/profile ---> 放着系统环境变量(如:PS1 和 PATH) 和 别名

# 但是 LANG 放在了 /etc/sysconfig/i18n 

文件目录详解 ---> /etc/bashrc ---> 真正存放 别名 的 地方

## 下面两个是 全局生效
/etc/profile  # 系统环境变量 和 别名 (别名常用这个)
/etc/bashrc   # 真正存放 别名 的地方

## 下面两个是 当前用户生效
~/.bashrc          # 别名
~/.bash_profile    # 环境变量 和 别名
# ~ 表示当前用户的家目录: root 用户, ~ 表示 /root ;普通用户 如 oldboy, ~ 表示 /home/oldboy
# linux中以 . 开头的文件 是 隐藏文件

# 上面四个,最常用的是 /etc/profile

/usr/local ---> 编译安装的软件 默认的位置

# /usr/local 即相当于 Windows 系统下的 C:\Program Files 
# Linux下安装软件的方法:
1. yum :yum 安装会自动解决安装依赖的软件;软件包管理工具
    yum install 软件名
    
    # yum 安装时可用 yum -y 软件名  的命令:-y 表示 遇到 y/N 的询问时自动选 y
    
2. rpm :rpm 安装时 缺少的东西需要自己解决

3. 编译:
    3.1 ./configure  # 配置
    3.2 make
    3.3 make install

# 查看软件是否安装成功:
# rpm -qa |grep 软件名   # rpm -qa 会显示出系统中已经安装了的所有的软件
[root@NEO ~]# 
[root@NEO ~]# rpm -qa |grep tree
tree-1.5.3-3.el6.x86_64
[root@NEO ~]# 

 

/var/log/messages  ---> 系统默认日志信息

[root@NEO ~]# tail /var/log/messages
Mar 15 13:38:50 NEO kernel: type=1305 audit(1552628328.909:3): audit_pid=1213 old=0 auid=4294967295 ses=4294967295 res=1
Mar 15 13:38:50 NEO irqbalance: Balancing is ineffective on systems with a single cpu.  Shutting down
Mar 15 13:38:51 NEO acpid: starting up
Mar 15 13:38:51 NEO acpid: 1 rule loaded
Mar 15 13:38:51 NEO acpid: waiting for events: event logging is off
Mar 15 13:38:52 NEO acpid: client connected from 1382[68:68]
Mar 15 13:38:52 NEO acpid: 1 client rule loaded
Mar 15 13:38:52 NEO kdump: No crashkernel parameter specified for running kernel
Mar 15 13:38:56 NEO abrtd: Init complete, entering main loop
Mar 15 15:17:15 NEO yum[1955]: Installed: tree-1.5.3-3.el6.x86_64

/var/log/secure    ---> 系统用户的登陆信息 (谁 什么时候 从哪里登陆的  是否成功)

[root@NEO ~]# tail /var/log/secure
Mar 15 00:02:51 NEO sshd[1423]: Received signal 15; terminating.
Mar 15 00:02:51 NEO sshd[1582]: Exiting on signal 15
Mar 15 00:02:51 NEO sshd[1582]: pam_unix(sshd:session): session closed for user root
Mar 15 13:38:53 NEO sshd[1423]: Server listening on 0.0.0.0 port 22.
Mar 15 13:38:53 NEO sshd[1423]: Server listening on :: port 22.
Mar 15 13:52:42 NEO sshd[1590]: Accepted password for root from 10.0.0.1 port 3899 ssh2
Mar 15 13:52:42 NEO sshd[1590]: pam_unix(sshd:session): session opened for user root by (uid=0)
Mar 15 15:32:04 NEO sshd[1991]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.1  user=root
Mar 15 15:32:06 NEO sshd[1991]: Failed password for root from 10.0.0.1 port 6193 ssh2
Mar 15 15:32:08 NEO sshd[1992]: Received disconnect from 10.0.0.1: 0: 
[root@NEO ~]# grep "Failed password" /var/log/secure  # 查看登陆失败的信息
Mar 15 15:32:06 NEO sshd[1991]: Failed password for root from 10.0.0.1 port 6193 ssh2
[root@NEO ~]# 

 

文件目录详解 --> /proc/meminfo  --> 内存信息 : cat /proc/meminfo

# 显示当前系统的内存信息 的命令: free 
[root@NEO ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          474M       126M       347M       224K       9.4M        40M
-/+ buffers/cache:        77M       397M
Swap:         767M         0B       767M
[root@NEO ~]# 

文件目录详解 --> /proc/cpuinfo --> 查看 cpu 信息

# 查看 cpu 信息 的命令: lscpu ;该命令即相当于 cat /proc/cpuinfo
[root@NEO ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 69
Model name:            Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
Stepping:              1
CPU MHz:               2401.000
BogoMIPS:              4802.00
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0
[root@NEO ~]# 

文件目录详解 --> /proc/loadavg --> 系统的负载

# 负载:系统的繁忙程度
# 查看系统负载的命令: w
[root@NEO ~]# w
 17:59:12 up 7 min,  1 user,  load average: 0.00, 0.01, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         17:52    0.00s  0.02s  0.00s w
[root@NEO ~]# 

# load average: 0.00, 0.01, 0.00 ---> 三个数分别表示: 最近1分钟、最近5分钟、最近15分钟 的 平均负载
# 系统繁忙时,系统的负载接近 cpu 的核心数量

文件目录详解 --> /proc/mounts --> 显示系统的挂载信息

# 系统的挂载信息也可以通过该命令查看: def -h
[root@NEO ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.5G  7.0G  18% /
tmpfs           238M     0  238M   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
[root@NEO ~]# 

# findmnt 命令 即相当于 cat /proc/mounts  (findmnt 作为了解)

 

Linux系统的启动过程:

Linux(3):linux目录结构

 

PATH 环境变量:

1. 环境变量: (查看环境变量可以用命令:env )

1.1 大部分环境变量是大写;
1.2 在系统大部分地方都可以使用,并且含义相同

# 常用的环境变量:LANG 和 PATH

2. PATH 的含义:

# PATH变量存放的是命令的位置/路径
[root@NEO ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@NEO ~]# 

# 不同路径之间通过 冒号 分隔

3. PATH的作用:

# linux下面运行命令的过程:
    1. 输入命令
    2. 在PATH里面  路径进行查找
    3. 找到了就运行
    4. 找不到就提示 command not found 

 

练习1. 过滤出已知当前目录下 oldboy 中的所有一级目录(一级目录:不包含 oldboy 目录下面的子目录及隐藏目录,即只能是第一级目录)

1. 创建环境:

mkdir /oldboy -p
cd /oldboy
mkdir ext/oldboy test xiaodong xiaofan xingfujie -p
touch jeacen oldboy wodi.gz yingsui.gz

#### 如下:
[root@NEO ~]# mkdir /oldboy -p
[root@NEO ~]# cd /oldboy
[root@NEO oldboy]# mkdir ext/oldboy test xiaodong xiaofan xingfujie -p
[root@NEO oldboy]# touch jeacen oldboy wodi.gz yingsui.gz
[root@NEO oldboy]# tree
.
├── ext
│   └── oldboy
├── jeacen
├── oldboy
├── test
├── wodi.gz
├── xiaodong
├── xiaofan
├── xingfujie
└── yingsui.gz

6 directories, 4 files
[root@NEO oldboy]# 

# tree 命令:以树形显示目录结构
    -L 数字 ---> 最多显示几层目录
    -d ---> 只显示目录

# 查询某个软件是否安装:
rpm -qa   # 显示出系统中已经安装了的所有软件
rpm -qa |grep tree  # 查询某个软件是否安装

# rpm 是 rpm包管理命令:
    -qa ---> 查询所有;q 表示查询,a 表示所有
    -ql 软件名  --->  查看某个软件包里面的内容 (软件名要完全正确)
    
# rpm -ql 如下:
[root@NEO oldboy]# rpm -ql tre
package tre is not installed
[root@NEO oldboy]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@NEO oldboy]# 

方法一: tree 命令

[root@NEO oldboy]# tree -d /oldboy/
/oldboy/
├── ext
│   └── oldboy
├── test
├── xiaodong
├── xiaofan
└── xingfujie

6 directories
[root@NEO oldboy]# tree -dL 1 /oldboy/
/oldboy/
├── ext
├── test
├── xiaodong
├── xiaofan
└── xingfujie

5 directories

# tree -d 表示只查看目录; tree -dL 1 表示只查看第1层目录

方法二: find 命令

[root@NEO oldboy]# find -type d       # 找出所有的目录
.
./xiaofan
./xingfujie
./xiaodong
./ext
./ext/oldboy
./test
[root@NEO oldboy]# find -maxdepth 1 -type d       # 找出所有的目录,并且只找第一层:-maxdepth 1 ;-maxdepth 1 建议写在 -type d 前面,要不然会出现 warning (-maxdepth 表示最大的深度)
.
./xiaofan
./xingfujie
./xiaodong
./ext
./test
[root@NEO oldboy]# find -maxdepth 1 -type d -name "."         # 找出第1层、名为 “.” 的所有目录
.
[root@NEO oldboy]# find -maxdepth 1 -type d ! -name "."      # 找出第1层、名字不为 “.” 的所有目录;find 命令中 取反 的符号为 “!”
./xiaofan
./xingfujie
./xiaodong
./ext
./test
[root@NEO oldboy]# 

方法三: ls -l 的方法

[root@NEO oldboy]# ls -l
total 20
drwxr-xr-x 3 root root 4096 Mar 15 19:21 ext
-rw-r--r-- 1 root root    0 Mar 15 19:21 jeacen
-rw-r--r-- 1 root root    0 Mar 15 19:21 oldboy
drwxr-xr-x 2 root root 4096 Mar 15 19:21 test
-rw-r--r-- 1 root root    0 Mar 15 19:21 wodi.gz
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaodong
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaofan
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xingfujie
-rw-r--r-- 1 root root    0 Mar 15 19:21 yingsui.gz
[root@NEO oldboy]# ls -l |grep "^d"     # d 表示 目录, ^ 表示以什么开头
drwxr-xr-x 3 root root 4096 Mar 15 19:21 ext
drwxr-xr-x 2 root root 4096 Mar 15 19:21 test
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaodong
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaofan
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xingfujie
[root@NEO oldboy]# 

方法四: awk

[root@NEO oldboy]# ls -l
total 20
drwxr-xr-x 3 root root 4096 Mar 15 19:21 ext
-rw-r--r-- 1 root root    0 Mar 15 19:21 jeacen
-rw-r--r-- 1 root root    0 Mar 15 19:21 oldboy
drwxr-xr-x 2 root root 4096 Mar 15 19:21 test
-rw-r--r-- 1 root root    0 Mar 15 19:21 wodi.gz
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaodong
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaofan
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xingfujie
-rw-r--r-- 1 root root    0 Mar 15 19:21 yingsui.gz

# 从上面的 ls -l 可以看出,目录的第2列都大于1

[root@NEO oldboy]# ls -l |awk '$2>1'    #  awk 后面要用 单引号;awk命令中,$2 表示第2列
total 20
drwxr-xr-x 3 root root 4096 Mar 15 19:21 ext
drwxr-xr-x 2 root root 4096 Mar 15 19:21 test
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaodong
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaofan
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xingfujie
[root@NEO oldboy]# 

方法五: ls -F

# ls 命令的 -F 参数会给目录的结尾加上一个 /
[root@NEO oldboy]# ls
ext  jeacen  oldboy  test  wodi.gz  xiaodong  xiaofan  xingfujie  yingsui.gz
[root@NEO oldboy]# ls -F
ext/  jeacen  oldboy  test/  wodi.gz  xiaodong/  xiaofan/  xingfujie/  yingsui.gz
[root@NEO oldboy]# ls -lF
total 20
drwxr-xr-x 3 root root 4096 Mar 15 19:21 ext/
-rw-r--r-- 1 root root    0 Mar 15 19:21 jeacen
-rw-r--r-- 1 root root    0 Mar 15 19:21 oldboy
drwxr-xr-x 2 root root 4096 Mar 15 19:21 test/
-rw-r--r-- 1 root root    0 Mar 15 19:21 wodi.gz
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaodong/
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xiaofan/
drwxr-xr-x 2 root root 4096 Mar 15 19:21 xingfujie/
-rw-r--r-- 1 root root    0 Mar 15 19:21 yingsui.gz
[root@NEO oldboy]# ls -F |grep '/'
ext/
test/
xiaodong/
xiaofan/
xingfujie/
[root@NEO oldboy]# 

 

练习2. 假如当前目录是 /oldboy ,现在需要进入到 /tmp 目录下进行操作,执行的命令是: cd /tmp ,操作完毕后,需要快速返回上一次进入的目录,即 /oldboy 目录,该如何做 ?(不能用 cd /oldboy 命令)

# 简单说:快速回到上一次所在的位置/目录 的命令: cd -
[root@NEO oldboy]# pwd
/oldboy
[root@NEO oldboy]# cd /tmp/
[root@NEO tmp]# cd -
/oldboy
[root@NEO oldboy]# 

# - 是一个环境变量; cd - 相当于 cd $OLDPWD

# cd .    ===>  # . 表示 当前目录,一般用于 复制/移动: cp /etc/hosts .  # 复制到当前目录
# cd ..   ===>  # 进入到当前目录的上一级目录
# cd ~    ===>  # ~ 表示当前用户的家目录; root 用户的家目录是 /root ,普通用户(如 oldboy)的家目录是 /home/oldboy
# cd      ===>  # 回到当前用户的家目录
# cd -    ===>  # 回到上一次的位置/路径

 

练习3. 一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件

# 命令: ls -lt   # ls -l 默认是按照字母的顺序;ls -lt 会按时间降序排序, ls -lrt 会按时间升序排序;-t 按照文件的修改时间进行排序,-r 表示 逆序

 

练习5. 调试系统服务时,希望能【实时】查看系统日志 /var/log/messages 的更新

tail -f   # -f 表示 显示文件的实时更新
# tailf 即相当于 tail -f

练习6. 打印配置文件 nginx.conf 内容的行号及内容

# 创建环境:
[root@NEO oldboy]# pwd
/oldboy
[root@NEO oldboy]# echo {1..5}      # echo {1..5}  能显示出 从1到5
1 2 3 4 5
[root@NEO oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@NEO oldboy]# echo stu{01..10}|xargs -n1   # xargs -n1 表示 一列
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@NEO oldboy]# echo stu{01..10}|xargs -n1 >nginx.conf
[root@NEO oldboy]# cat nginx.conf 
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@NEO oldboy]# 

# 方式一: cat -n 命令
# cat -n 命令: 查看内容及行号
[root@NEO oldboy]# cat -n nginx.conf 
     1    stu01
     2    stu02
     3    stu03
     4    stu04
     5    stu05
     6    stu06
     7    stu07
     8    stu08
     9    stu09
    10    stu10
[root@NEO oldboy]# 

# 方式二: vi/vim 
# 通过 vi/vim 进入文件后, :set nu  ---> 显示行号 ; :set nonu  ---> 取消显示行号  (只是显示、取消显示行号,不会修改文件内容)
[root@NEO oldboy]# vim nginx.conf 
"nginx.conf" 10L, 60C                                                                                               1,1           All
  1 stu01
  2 stu02
  3 stu03
  4 stu04
  5 stu05
  6 stu06
  7 stu07
  8 stu08
  9 stu09
 10 stu10
 
~                                                                                                                                     
~                                                                                                                                     
~                                                                                                                                     
~                                                                                                                                     
~                                                                                                                                     
:set nu

# 方式三: grep 
# grep -n 命令: 给找到的内容加上行号
[root@NEO oldboy]# 
[root@NEO oldboy]# grep -n 'stu01' nginx.conf 
1:stu01
[root@NEO oldboy]# grep -n 'stu' nginx.conf 
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
[root@NEO oldboy]# grep -n "." nginx.conf   # grep 命令中的 . 是正则表达式的内容;表示任何一个符号
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
[root@NEO oldboy]# 


# 方式四: awk
# awk '{print NR,$0}'  # awk 后面的 {} 中, print 表示 显示, NR 表示行号,$0 表示这一行的内容放在了 $0 里面,$数字 表示 某一列
[root@NEO oldboy]# awk '{print NR,$0}' nginx.conf 
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
[root@NEO oldboy]# 


# 方法五: sed
# sed '=' 命令: 显示行号和内容;sed 中 = 表示给这一行加上行号
[root@NEO oldboy]# sed '=' nginx.conf 
1
stu01
2
stu02
3
stu03
4
stu04
5
stu05
6
stu06
7
stu07
8
stu08
9
stu09
10
stu10
[root@NEO oldboy]# sed '=' nginx.conf |xargs -n2   # -n2 表示 每行两列
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
[root@NEO oldboy]# 

 

练习4. 已知 apache 服务的访问日志按天记录在服务器本地目录 /app/logs 下,由于磁盘空间紧张,现在要求只能保留最近7天的访问日志。请给出解决办法或配置或处理命令(提示:可以从 apache 服务配置上着手,也可以从生成出来的日志上着手)

# 数据模拟命令:
mkdir -p /app/logs
cd /app/logs
for time in {01..20};do date -s "201705$time";touch access_www_$(date +%F).log ;done
date -s "20170520"

# date 命令: 显示系统的时间;date -s ---> 修改系统的时间

# find -mtime 7  ---> 找到第前7天修改的文件;
# find -mtime +7  ---> 找到7天之前修改的文件;
# find -mtime -7  ---> 找到最近7天修改的文件;


# 方法一: 
# find -type f -name "*.log" -mtime +7|xargs rm -f
find -type f -name "*.log" -mtime +7|xargs ls -l


# 方法二:
ls -l $(find -type f -name "*.log" -mtime +7)

# 方法三:
find -type f -name "*.log" -mtime +7 -exec ls -l {} \;     # find -exec {} \;  命令: find 找到的内容全部都放到 {} 中

 

练习7. 装完系统后,希望让网络文件共享服务 NFS(iptables),仅在3级别上开机自启动,该如何做?

[root@NEO ~]# chkconfig |grep ipt
iptables           0:off    1:off    2:off    3:off    4:off    5:off    6:off
[root@NEO ~]# 

# 上面的数字即表示 在哪个级别上把 iptables 开机是否自启动

# 只在3级别上把 iptables 开机自启动 : chkconfig --level 3 iptables on
[root@NEO ~]# chkconfig --level 3 iptables on
[root@NEO ~]# chkconfig |grep ipt
iptables           0:off    1:off    2:off    3:on    4:off    5:off    6:off
[root@NEO ~]# 

# chkconfig --level ---> 指定运行级别进行操作

 

练习8. /etc/ 目录为linux 系统的默认配置文件及服务启动命令的目录

  1.  用 tar 打包/etc 整个目录(打包及压缩)
  2. 把a点命令的压缩包,解压到 /tmp 指定目录下 (最好只用 tar 命令实现: -C 路径

  3. 用 tar 打包 /etc 整个目录 (打包及压缩,但需要排除 /etc/services 文件)
# tar 命令: 创建、查看、解压 压缩包

# 创建压缩包
tar zcvf /tmp/etc.tar.gz /etc/    # 通过 gzip 创建一个压缩包,压缩包放在 /etc 下;zcvf --> 创建压缩包; /tmp/etc.tar.gz --> 压缩包存放的位置; /etc/ --> 被压缩的目标 (被压缩的目录可以有多个)
# z  ---> 通过 gzip 工具进行压缩;z 表示 压缩,没有 z 表示打包
# c  ---> create,创建压缩包
# v  ---> verbose,显示执行过程
# f  ---> file, f 后面要接上压缩包的名字

# 查看压缩包的内容
tar ztf /tmp/etc.tar.gz 
# z  ---> gzip
# t  ---> list,显示压缩包的内容

# 解压 压缩包:
# 1. 先进入到 /tmp/ 目录
# 2. 解压压缩包
cd /tmp/
tar zxf etc.tar.gz   # 或者 tar zxvf etc.tar.gz   # 默认是解压到当前目录

[root@NEO tmp]# tar zxf etc.tar.gz
tar: etc/prelink.cache: time stamp 2019-03-16 07:34:21 is 24187.13954116 s in the future
[root@NEO tmp]# ll
total 9512
drwxr-xr-x 78 root root    4096 Mar 16 00:01 etc
-rw-r--r--  1 root root 9732526 Mar 16 00:28 etc.tar.gz
[root@NEO tmp]# 

# 将上面的命令简写:
# 创建压缩包:
tar 
    zcvf
    zcf ---> 打包 并 压缩
    cf  ---> 打包(在一起)
    
# 查看压缩包的内容:
tar 
    ztf 
    tf
    
# 解压:
tar 
    zxvf
    xf    
# 解压时也可以通过 -C 参数指定解压路径 

# tar 命令的提示:
[root@NEO tmp]# tar zcf /tmp/etc.tar.gz /etc/
tar: Removing leading `/' from member names

# Removing leading `/' from member names ===> 把压缩包中开头的 '/' 删除 ; /etc/ 变成 etc/
# 所以 tar 命令打包的时候会把压缩包中的文件/目录由 绝对路径 变成 相对路径


# 用 tar 打包 /etc 整个目录 (打包及压缩,但需要排除 /etc/services 文件)
# tar zcf 压缩包名 要压缩的目标 --exclude=文件名
[root@NEO ~]# tar zcf /tmp/etc.tar.gz /etc/
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@NEO ~]# tar zcf /tmp/etc-exclude.tar.gz /etc/ --exclude=/etc/services 
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@NEO ~]# ll /tmp/
total 18892
-rw-r--r-- 1 root root 9605653 Mar 16 02:45 etc-exclude.tar.gz
-rw-r--r-- 1 root root 9732526 Mar 16 02:45 etc.tar.gz
[root@NEO ~]# 

 

练习9. 已知如下命令及结果:

mkdir -p /oldboy 
echo "I am oldboy,myqq is 123456789">/oldboy/oldboy.txt

a. 现在需要从文件中过滤出 "oldboy""123456789" 字符串;
b. 如果需要从文件中过滤出 "oldboy,123456789" 字符串,请给出命令

a. 现在需要从文件中过滤出 "oldboy" 和 "123456789" 字符串;

# 方法一: sed
# 利用 sed  把不要的东西替换为空
[root@NEO oldboy]# cat oldboy.txt 
I am oldboy,myqq is 123456789
[root@NEO oldboy]# sed 's#I am ##g' oldboy.txt 
oldboy,myqq is 123456789
[root@NEO oldboy]# sed 's#I am ##g' oldboy.txt |sed 's#,myqq is##g'
oldboy 123456789
[root@NEO oldboy]# 

# 方法二:sed/tr + awk
# awk 擅长取列,列与列之间的分隔符默认为 空格;第1列用 $1 表示,$2 表示第2列,以此类推
[root@NEO oldboy]# cat oldboy.txt 
I am oldboy,myqq is 123456789
[root@NEO oldboy]# awk '{print $3,$5}' oldboy.txt 
oldboy,myqq 123456789
[root@NEO oldboy]# 

# 思路:先用 sed 把 , 替换为 空格,再用 awk 取出第3列 和 第6列
[root@NEO oldboy]# sed 's#,# #g' oldboy.txt 
I am oldboy myqq is 123456789
[root@NEO oldboy]# sed 's#,# #g' oldboy.txt |awk '{print $3,$6}'
oldboy 123456789
[root@NEO oldboy]# 


# 替换 的另一种方式: tr 
# tr "," " " <oldboy.txt   # 把 , 替换为 空格,利用 < 进行输入重定向
[root@NEO oldboy]# tr "," " " <oldboy.txt 
I am oldboy myqq is 123456789
[root@NEO oldboy]# tr "," " " <oldboy.txt |awk '{print $3,$6}'
oldboy 123456789
[root@NEO oldboy]# 


# 方法三: 利用 awk 指定多个分隔符号
# awk -F 可以指定新的的分隔符

# 指定一个分隔符号:awk -F "分隔符"
[root@NEO oldboy]# cat oldboy.txt 
I am oldboy,myqq is 123456789
[root@NEO oldboy]# awk -F "," '{print $1}' oldboy.txt 
I am oldboy
[root@NEO oldboy]# 

# 指定多个分隔符号: awk -F "[多个分隔符号]"
[root@NEO oldboy]# cat oldboy.txt 
I am oldboy,myqq is 123456789
[root@NEO oldboy]# awk -F "[, ]" '{print $3,$6}' oldboy.txt 
oldboy 123456789
[root@NEO oldboy]# 

# awk -F "[, ]"  # 指定以 , 和 空格 作为分隔符号

b. 如果需要从文件中过滤出 "oldboy,123456789" 字符串,请给出命令

# awk 中的 '{print $3,$6}'  中的 , 相当于 空格,如果想在结果中显示 "," , 可以用下面的方法:(加上 "")
[root@NEO oldboy]# cat oldboy.txt 
I am oldboy,myqq is 123456789
[root@NEO oldboy]# awk -F "[, ]" '{print $3","$6}' oldboy.txt 
oldboy,123456789
[root@NEO oldboy]# 

# awk '{print ""}' 中的 "" 中的内容会原封不动的显示出来

 

练习10. 如何查看 /etc/services 文件中有多少行?

# wc -l 文件 ---> 统计文件中有多少行
[root@NEO oldboy]# wc -l /etc/services 
10774 /etc/services
[root@NEO oldboy]# 

# 查看 sshd 远程连接进程是否在运行:
ps -ef  ---> 显示系统中正在运行的进程
[root@NEO oldboy]# ps -ef |grep "sshd"
root       1422      1  0 00:01 ?        00:00:00 /usr/sbin/sshd    
root       1702   1422  0 02:43 ?        00:00:00 sshd: root@pts/1 
root       1816   1704  0 04:22 pts/1    00:00:00 grep sshd
[root@NEO oldboy]# 

# 上面第一行 表示 sshd 的进程,第一行下面的 表示 创建的连接 

[root@NEO oldboy]# ps -ef |grep "/sshd"   # 加上 / 能过滤出 sshd 的进程 
root       1422      1  0 00:01 ?        00:00:00 /usr/sbin/sshd   
root       1818   1704  0 04:24 pts/1    00:00:00 grep /sshd
[root@NEO oldboy]# 


# 扩展:
[root@NEO oldboy]# ps -ef |grep "/sshd"|wc -l
2
[root@NEO oldboy]# 

# 上面的结果 “2” 表示 进程运行正常
# wc -l 的作用: 统计出现的次数

 

练习11. 过滤出 /etc/services 文件包含 3306 或 1521 两个数字所在行的内容

# grep 中的 “或者” 用 | 来表示,此时不能再用 grep ,而是 egrep (grep 不支持 | 这种正则表达式); egrep 相当于 grep -E,它支持高级的正则
[root@NEO oldboy]# egrep "3306|1521" /etc/services 
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
ncube-lm        1521/tcp                # nCube License Manager
ncube-lm        1521/udp                # nCube License Manager
[root@NEO oldboy]# 

 

练习12. 命令行及 shell 中加单引号和加双引号的区别:

# 单引号: 所见即所得,吃啥吐啥(单引号中的内容会原封不动的显示出来)
# 双引号: 双引号中的内容和单引号的类似,但双引号中的 特殊符号 会被解析、运行
[root@NEO oldboy]# echo '$LANG $(hostname) `pwd`'
$LANG $(hostname) `pwd`
[root@NEO oldboy]# echo "$LANG $(hostname) `pwd`"
en_US.UTF-8 NEO /oldboy
[root@NEO oldboy]# 
[root@NEO oldboy]# echo "hello world $LANG $(hostname) `pwd`"
hello world en_US.UTF-8 NEO /oldboy