• Linux没有后缀名,使用权限来区分文件类型

  • LInux所有的存储设备都必须挂载之后用户才能使用,包括硬盘,U盘和光盘

    • 没有硬件都有名称,成为设备文件名
    • 挂载点可以当成是win的盘符来理解
    • 把设备文件名和挂载点连接起来的过程就称为挂载
  • 单用户模式 : 类似于win的安全模式,启用最少的服务,主要用于修复

常用命令

文件处理命令

ls

1
2
3
4
$ ls -la
# total 32
# -rw------- 1 root root 823 Mar 13 2017 anaconda-ks.cfg
# drwxr-xr-x 3 root root 4096 Aug 23 14:46 blog
  • drwxr-xr-x : 拆分成d,rwx,r-x,r-x

    • d表示目录,-表示文件,l表示软链接
    • 三个分为所有者 ,所属组,其他人的权限
    • rwx 表示 ,,执行的权限(read,write,execute)

    为什么所有者会可能没有执行权限?

    对文件来讲执行权限是最高权限,遵循权限最小化,对于日志文件就没有必要有执行权限

  • 1 代表文件的引用计数

  • root root : 分别代表所有者,所属组

    用户和文件的关系

    • 所有者(U) : 一般来说谁创建文件,那个用户就是文件的所有者,当然所有者是可以改变的,但是所有者只能有一个
    • 所属组(G) : 代表一个用户集合,所有者赋予权限让这些人能使用这个文件
    • 其他人(O) : 不属于上面的两个的都是其他人
  • 823 : 文件大小,单位字节

1
2
3
4
5
ls -lh
# total 92K
# dr-xr-x---. 7 root root 4.0K Aug 23 15:43 .
# drwxr-xr-x 22 root root 4.0K Jun 17 07:02 ..
# -rw------- 1 root root 823 Mar 13 2017 anaconda-ks.cfg

h代表human ,以人类(人性化)方式显示

  • Mar 13 2017 : 文件修改时间

    linux没有文件创建时间,有:

    • 文件的最后一次访问时间
    • 文件的状态修改时间
    • 文件的数据修改时间
  • anaconda-ks.cfg : 文件名

  1. 使用ls -i的i参数来查看文件的id , i就是id
  2. 使用ls -d的d参数来查看目录本身 , d就是directory

cp

  • cp的本质就是创建文件,因此就会修改文件属性,如果想保留文件属性,可以使用-p
  • cp默认复制文件,如果想复制目录,要使用-r
    (联想rm命令的-r表示目录)

touch

文件名,目录名如果要使用空格,必须使用引号引起来:

1
touch "program files"

more

查看文件

  • 空格 或者 f : 翻页
  • 回车 : 一行一行的显示
  • q : 退出

less

查看文件

类似于more,但是比more更高级 ,

  • 支持往前翻页 : pgUp
  • 支持搜索 : / + 关键词,n向下查找

ln

1
2
3
4
5
# 创建文件issue 的软连接 /tmp/issue.soft
ln -s /etc/issue /tmp/issue.soft

# 创建文件issue 的硬链接 /tmp/issue.hard
ln /etc/issue /tmp/issue.hard

软硬连接的结果:

1
2
3
4
5
6
7
8
# 硬链接(注意计数引用的数量为2)
-rw-r--r-- 2 root root 0 Aug 24 02:57 hard

# 软连接
lrwxrwxrwx 1 root root 7 Aug 24 03:43 soft -> 123.txt

# 源文件(注意计数引用的数量为2)
-rw-r--r-- 2 root root 0 Aug 24 02:57 123.txt
  • 软连接就像win里的快捷方式

  • 所有人对于软连接都有全部的权限

    原因很简单,这就是一个快捷方式而已,并不能决定源文件的操作权限

  • 硬链接 , 除了文件的位置不一样,其他的属性,数据全部和源文件一致

    • 硬链接可以同步更新
    • 硬链接的cp -p的关系有点类似于python里的对复制对象copy和deepcopy的操作
      1. 硬链接和源文件指向同一份文件id
      2. cp -p指向的文件id不一样
    • linux的文件管理也是计数引用,所有对于一个文件A有软连接B和硬链接C,如果A删除,B肯定不能用,但是C是可以用的,因为还有C这一个计数引用
  • 硬链接不可以跨分区

  • 硬链接不可以用户目录

  • 硬链接其实用的很少

权限管理命令

chmod

  • change the permissions mode of a file
  • 只有两个人可以更改权限 : root, 文件所有者
  • ugoa : 所有者,用户组,其他人,所有人
  • +-= : 增加权限,减少权限,设置权限(不管你之前是什么权限,现在把你设置为这个权限)
1
2
3
4
5
6
7
8
9
10
11
12
ls -l
# -rw-r--r-- 1 root root 0 Aug 24 02:57 123.txt

# 增加权限(给所有者添加执行的权限)
chmod u+x 123.txt
# -rwxr--r-- 1 root root 0 Aug 24 02:57 123.txt

chmod g+w,o-r 123.txt
# -rwxrw---- 1 root root 0 Aug 24 02:57 123.txt

chmod g=rwx 123.txt
# -rwxrwx--- 1 root root 0 Aug 24 02:57 123.txt

权限的数字表示:

  • r : 4
  • w : 2
  • x : 1

所以:rwxrw-r-- 就是7 6 4

chmod使用权限数字:

1
2
chmod 640 123.txt
# -rw-r----- 1 root root 0 Aug 24 02:57 123.txt

-R递归修改目录权限(目录下所有文件的权限都会被修改)

1
chmod -R 666 dir1/

文件目录权限总结:

代表字符 权限 对文件的含义 对目录的含义
r 读权限 可以查看文件内容(cat/more/less/tail) 可以列出目录中的内容(ls)
w 写权限 可以修改文件内容(vim) 可以在目录中创建,删除文件(touch/rmdir/rm)
x 执行权限 可以执行文件 可以进入目录(cd)

例如:

  • 一个目录dir1下有一个文件file1,dir1的权限是rwxrwxrwx,file1的权限是-rw-r--r--

  • 其他人的权限其实是可以删除file1这个文件的

  1. 也就是说,能否删除文件并不是该文件的写权限决定的(文件写权限决定的是vim),而是由该文件的目录的写权限决定的
  2. 同理,对于一个目录来说,rx权限是同时出现的.原因很简单,你不可以可以进去却不能列出内容,或者能列出内容但是进不去目录

chown

  • change file ownership : 修改文件的所有者

  • 只有管理员root才能使用

  • ```bash
    chown[用户] [文件或目录]

    1
    2
    3
    4
    5
    6

    - 示例:

    ```bash
    useradd heyingliang
    chown heyingliang file1

chgrp

  • change file group ownership : 修改文件的所有组

  • ```bash
    chgrp [用户组] [文件或目录]

    1
    2
    3
    4
    5
    6
    7

    - 示例:

    ```bash
    groupadd brother
    # 修改文件file1的所属组为brother
    chgrp brother file1

umask

  • the user file-creation mask : 显示,设置文件的默认权限

  • 每个用户都会有一个默认组,就是文件在创建的时候默认分配的用户组

  • ```bash
    umask [-S]

    -S 以rwx形式显示新建文件默认权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    - 示例:

    ```bash
    umask -S
    # u=rwx,g=rx,o=rx

    mkdir dir2
    # drwxr-xr-x 2 root root 4096 Aug 24 06:48 dir2

    touch file2
    # -rw-r--r-- 1 root root 0 Aug 24 06:49 file2

    发现

    • 目录的权限是rwxr-xr-x
    • 文件的权限是rw-r–r–

    原因 : 默认新建的文件都不能拥有可执行权限

  • umask的显示形式是 : 和rwxrwxrwx进行逻辑与运算

    1
    2
    umask
    # 0022
    1. 第一个0代表特殊权限,暂时不管.
    2. 022就是代表了所有者,所属组,其他人的权限
    3. 022 即为 --- -w- -w-
    4. --- -w- -w-rwx rwx rwx进行相与,得出rwx r-x r-x
    5. 所以最终权限就是rwx r-x r-x
  • 更改默认权限:

    1
    2
    3
    4
    5
    6
    7
    umask 077

    touch file3
    mkdir dir3
    ls -l
    # -rw------ 1 root root 0 Aug 24 06:49 file3
    # drwx------ 2 root root 0 Aug 24 06:52 dir3

文件搜索命令

find

  • ```bash
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51

    - 示例:

    - `-name` : 根据文件名
    - `-iname` : 不区分大小写
    - `-size` : 根据大小
    - `-user` : 根据所有者查找
    - `-amin` : 根据文件访问时间(access)
    - `-cmin` : 根据文件属性修改时间(change)
    - `-mmin` : 根据文件内容修改时间(modify)
    - `-a` : 两个条件同时满足
    - `-o` 两个条件满意其一
    - `-type` : 根据文件类型查找
    - `-inum` : 根据i节点查找
    - `-exec` : 查找后执行命令

    ```bash
    # 根据文件名搜索 : 在tmp文件夹根据名字查找dir1
    find /tmp -name dir1
    # /tmp/dir1

    # find是全字匹配,必须精准匹配文件名
    find /tmp -name dir
    # 无返回

    # 否则必须使用通配符
    find /tmp -name dir*

    # 不区分大小写
    find /tmp -iname dir2

    # 根据大小查找 : 查找大于100MB的文件 (+n大于,-n小于,n等于)
    find /tmp -size +204800

    # 根据所有者查找
    find /tmp -user root

    # 查找100分钟内被修改过属性的文件(+就是查找修改时间超过100分钟)
    find /tmp -cmin -100

    # 查找文件大小小于1000并且所有人为root的文件
    find /tmp -size -1000 -a -user root

    # 查找文件类型为file的文件(d就是目录,l就是软连接)
    find /tmp -type f

    # 查找目录 , 然后将查找结果执行ls -l
    find /tmp -type d -exec ls -l {} \;

    # 查找id为31531的文件 , 然后将其删除
    find /tmp -inum 31531 -exec rm {} \ ;

    注意按文件大小查找的时候:

    • linux使用数据库来表示,一个数据块0.5K(512字节)

    • 所以100MB = 102400KB = 204800

    • 所以最终结果为:

      1
      find /tmp -size 204800

locate

  • 文件资料库中查找文件

  • 功能有点像MySQL里的创建一个文件资料库,然后在文件资料库里查找

  • ```bash

    在文件资料库中查找

    locate file1

    更新文件资料库

    updatedb

    不区分大小写

    locate -i file1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11



    ### which

    - 功能 : 搜索**命令**所在目录以及别名信息

    - ```bash
    which ls
    # alias ls='ls --color=auto'
    # /bin/ls

whereis

  • 功能 : 搜索命令所在目录以及帮助文档路径

  • ```bash
    whereis ls

    ls: /bin/ls /usr/share/man/man1/ls.1.gz

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11



    ### grep

    - 功能 : 在文件中搜索字符串匹配的行并输出

    > 简单来说 , 文件有好多行 , 现在只想找到包含特定字符串的行

    - ```bash
    grep -iv [指定字串] [文件]
  • 参数 :

    • -i : 不区分大小写
    • -v : 排除指定字符串
  • 示例:

    1
    2
    3
    4
    5
    # 在requirements.txt中查找包含aio的行
    grep aio requirements.txt

    # 排除开头为# 的行(也就是注释行)
    grep -v ^# main.py

帮助命令

man

  • manual

  • ```bash

    查看ls命令的帮助信息

    man ls

    查看配置文件services的帮助信息

    man services

    1
    2
    3
    4
    5

    - manual既可以查看命令,也可以查看服务 , 如果字符同时是命令和配置文件,那么就会首先查看命令的帮助文档

    ```bash
    manual passwd

    我们使用数字来区分字符和配置文件.

    命令为1

    配置文件为5

    1
    2
    3
    4
    5
    # 查看命令的passwd文档
    manual 1 passwd

    # 查看配置文件passwd
    manual 5 passwd

whatis

查看命令的简短信息:

1
2
whatis  ifconfig
# ifconfig (8) - configure a network interface

apropos

查看配置文件的简短信息:

1
apropos inittab

help

显示命令常用的选项

1
ls --help
1
2
# 查看帮助信息
help umask

用户管理命令

useradd

添加用户

1
useradd heyingliang

passwd

更改用户密码

1
passwd heyingliang

who

查看登录用户信息

  • root : 登录用户名
  • pts : 登录的终端
  • 0 : 远程登录的终端号
  • 2019-08-24 08:00 : 登录的时间
  • 211.97.3.242 : 登录的主机IP地址
1
2
3
4
5
who
# root pts/0 2019-08-24 08:00 (211.97.3.242)
# blog_user pts/1 2019-08-24 08:44 (211.97.3.242)
# root pts/2 2019-08-24 06:36 (211.97.3.242)
# root pts/3 2019-08-24 06:37 (211.97.3.242)

w

关于用户更多的信息:

1
2
3
4
5
6
7
 w
# 08:51:59 up 68 days, 1:49, 4 users, load average: 0.00, 0.00, 0.00
# USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
# root pts/0 211.97.3.242 08:00 1.00s 0.01s 0.00s w
# blog_use pts/1 211.97.3.242 08:44 6:47 0.01s 0.01s -bash
# root pts/2 211.97.3.242 06:36 55:18 0.07s 0.07s -bash
# root pts/3 211.97.3.242 06:37 59:18 0.01s 0.01s -bash

压缩和解压命令

gzip

1
2
3
4
5
6
7
# 压缩
gzip file1

# 解压
gunzip file1
# 或者
gzip file1 -d
  • gzip只能压缩文件
  • gzip压缩不保留源文件

tar

打包目录

  • c : create,表示打包
  • v : 显示详细信息
  • f : 指定文件名
  • z : 打包的同时进行压缩
  • -x : 解包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 将dir1目录打包成dir.tar
tar -cvf dir.tar dir1
# (因为有-v,显示打包了哪些文件)
# dir1/
# dir1/file1

# 将dir.tar文件压缩
# 这样就形成了最常见的源代码安装包dir.tar.gz
gzip dir.tar

# 将dir1打包并压缩成dir.tar.gz
# 使用这种方式就能快速创建一个压缩包(并且保留源文件)
tar -zcf dir.tar.gz dir1

# 解压并拆包
tar -zxf dir.tar.gz

zip

压缩文件或目录

  • 保留源文件
  • 支持压缩目录
1
2
3
4
5
6
7
8
# 将文件file1压缩成file.zip
zip file.zip file1

# 将目录dir1压缩成dir.zip
zip -r dir.zip dir1

# 解压
unzip file.zip

bzip2

  • 是gzip的升级版
  • 还是只支持压缩文件
  • -k : 添加该选项后保留源文件
1
2
3
4
5
6
7
8
9
10
# 压缩
bzip2 file2

# 压缩后保留源文件
bzip2 -k file2

# 解压
bunzip2 file2.bz2
# 保留源文件
bunzip2 -k file2.bz2

bzip2配合tar : 将z 改为 j

1
2
3
4
5
6
7
8
9
10
# tar配合gzip压缩
tar -czf dir.tar.gz dir1

# tar配合bzip2压缩
tar -cjf dir.tar.bz2 dir1

# 解压
tar -czf dir.tar.gz
# 解压
tar -cjf dir.tar.bz2

网络命令

write

功能 : 给用户发信息,以Ctrl + D 保存结束

1
write heyingliang

wall

  • write all : 发送广播信息
  • 自己也会收到这个广播信息
1
wall 123789

ping

功能 : 测试网络连通性

1
2
3
4
ping 192.168.1.156

# 只测试3次
ping -c 3 190.116.1.136

ifconfig

  • interface configure

  • 查看和设置网卡信息

  • ```bash

    查看信息

    ifconfig

    设置信息

    ifconfig eth0 192.168.8.250

    1
    2
    3
    4
    5
    6
    7

    > eth0 : 代表本地的真实网卡
    >
    > loop : 本地回环

    - 返回信息:

    eth0 Link encap:Ethernet HWaddr F2:3C:91:02:9F:CC

          inet addr:139.162.112.233  Bcast:139.162.112.255  Mask:255.255.255.0
          inet6 addr: 2400:8902::f03c:91ff:fe02:9fcc/64 Scope:Global
          inet6 addr: fe80::f03c:91ff:fe02:9fcc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40528496 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25789726 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:28930421737 (26.9 GiB)  TX bytes:29062325006 (27.0 GiB)
    

    lo Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:3287 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3287 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1029216 (1005.0 KiB)  TX bytes:1029216 (1005.0 KiB)
    
    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

    > - Ethernet : 以太网
    > - HWaddr F2:3C:91:02:9F:CC : 网卡硬件地址
    > - inet addr:139.162.112.233 : 当前IP
    > - Bcast:139.162.112.255 : 网络广播地址
    > - Mask:255.255.255.0 : 子网掩码
    > - inet6 addr: 2400:8902::f03c:91ff:fe02:9fcc/64 Scope:Global : IPV6地址信息
    > - UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 : 网络附加信息
    > - RX packets:40528496 errors:0 dropped:0 overruns:0 frame:0 : 接收到的数据包的数量和丢包等等信息
    > - TX packets:25789726 errors:0 dropped:0 overruns:0 carrier:0 : 发送的数据包额度数量和丢包等等信息
    > - RX bytes:28930421737 (26.9 GiB) : 接受的数据包的总大小
    > - TX bytes:29062325006 (27.0 GiB) : 发送的数据包的总大小



    ### mail

    - 查看发送电子邮件

    - 就像是真实的邮件一样,write只能在对方在线的时候发生,mail不管对方在不在线都可以

    - mail 一般是用于系统发送给root对象的,这样就可以知道系统出现的问题

    - ctrl +D 保存发送

    - ```bash
    # 发送邮件
    mail [用户名]

    # 查看邮箱情况
    mail

    # 查看邮箱情况之后 , 输入右键编码即可查看邮件内容
    1

    # 然后h就可以返回邮箱情况
    h

    # 删除编号为1的邮件
    d 1

last

  • 列出过去登入系统的用户信息

  • 示例:

    1
    2
    3
    4
    5
    last
    # blog_use pts/1 211.97.3.242 Sat Aug 24 09:51 still logged in
    # blog_use pts/1 211.97.3.242 Sat Aug 24 08:44 - 09:51 (01:06)
    # root pts/0 211.97.3.242 Sat Aug 24 08:00 still logged in
    # root pts/3 211.97.3.242 Sat Aug 24 06:37 - 10:08 (03:31)

lastlog

和last差不多:

1
2
3
4
5
6
7
8
lastlog
# Username Port From Latest
# root pts/0 211.97.3.242 Sat Aug 24 08:00:23 +0000 2019
# bin **Never logged in**
# daemon **Never logged in**

# 只查看uid为205的用户的登录信息
lastlog -u 502

traceroute

  • 显示数据包到主机间的路径

  • ```bash
    traceroute www.baidu.com

    1
    2
    3
    4
    5
    6
    7
    8
    9



    ### netstat

    - 查看网络相关的信息

    - ```bash
    netstat [选项]
  • 参数:

    1. -t : TCP协议
    2. -u : UDP协议
    3. -I : 监听
    4. -r : 路由
    5. -n : 显示IP地址和端口号
  • 示例:

    1
    2
    3
    4
    5
    6
    7
    8
    # 查看本机监听的端口
    netstat -tlun

    # 查看本机所有的网络连接
    netstat -an

    # 查看本机路由表
    netstat -rn

setup

配置网络(red hat专用)

mount

  • 挂载命令

  • ```bash
    mount [-t 文件系统] 设备文件名 挂载点

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    - 示例:

    ```bash
    mount -t iso9660 /dev/sr0/mut/cdrom

    # 简写 : mount + 设备文件名 + 挂载点
    mount /dev/sr0 /mnt/cdrm/

    # 卸载:
    umont /dev/sr0

    挂载就是:

    1. 找到硬件
    2. 给这个硬件分配一个设备文件名A
    3. 寻找一个目录B
    4. 将A和B连接起来

关机重启命令

shutdown

参数:

  • c : 取消前一个关机命令
  • h : 关机
  • r : 重启
1
shutdown -h now

halt/poweroff/init 0

关机

reboot/init 6

重启

系统运行级别:

  • 0 关机
  • 1 单用户
  • 2 不完全多用户,不含NFS服务
  • 3 完全多用户
  • 4 未分配
  • 5 图形界面(默认)
  • 6 重启
1
2
3
# 查看当前的运行级别
runlevel
# 5 3 (上一个级别 , 当前的级别)

logout

退出登录