Linux学习笔记

 本篇笔记是 慕课网 《Linux达人养成计划I》 课程的笔记。

我们平时所说的Linux分为内核版本和发行发版

1.Linux内核版本

  官网: https://www.kernel.org/

2.Linux发行版本

  不同厂商的发行版本,用的内核版本差不多

另外,需要注意的是,实际使用中并不是版本越新越好,往往是越稳定、越安全越好

多说一句,Linux是开源的,我们可以拿到源代码进行分析学习。

开源软件的好处很多,诸如使用的自由、研究的自由、散步及改良的自由。但是需要注意开源软件不一定是免费的。

Linux应用领域

  1.基于Linux的企业服务器

    在www.netcraft.com可以查看站点服务器的系统

  2.嵌入式领域

Linux与Windows的不同

  Linux严格区分大小写

  Linux中所有内容以文件形式保存,包括硬件

  Linux不靠扩展名区分文件类型

  Linux下的程序不能直接在Linux中安装和运行

一、 Linux的命令

命令基本格式:

  [root@aston ~]#

  root 表示当前用户

  aston表示当前机器的主机名(默认localhost)

  ~表示当前所在位置(~是家目录,用户登录后的初始位置)

  #表示当前用户是超级用户;$表示当前用户是普通用户

命令格式:

  命令 [选项] [参数]

    注意:个别命令使用不遵守此格式;当有多个选项时可以写在一起;简化选项与完整选项之分,如 -a等于 -all

1. 查询目录命令 ls

  ls [选项] [文件或目录]

    选项: -a 显示所有文件,包括隐藏的

        -l 显示详细信息

        -d 查看目录属性

       -h 个性化显示(文件大小)

       -i 显示inode

  目录详细信息

  -rw-------. 2 root root 1207 1月 14 18:18 install.log

  -rw-------.  默认10位,第一位是文件类型(- 文件 d 目录 | 软链接 等等);第2、3、4位是u所有者权限;第5、6、7位是g所属组权限;第8、9、10位是其他人权限;最后一个点(.)是CAL权限。

  权限: r 读  w 写  x 执行

  2  表示引用计数(仅所在位置,不一定就是2)

  第一个root 表示文件所有者

  第二个root 表示所属组

  1207  表示文件大小(默认单位ieshi字节)

  1月 14 18:18 表示最后一次修改时间

  install.log 表示文件名

  Linux隐藏文件的目的是告诉用户这是系统文件,不要随便修改

2. 文件处理命令

  2.1 目录处理命令

    在Linux中一切皆是文件,目录也是文件

    创建目录命令: mkdir [-p] [目录名]

      -p : 递归创建,及路径中可以有空目录

    切换目录: cd

      cd ~ :进入家目录

      cd :进入家目录

      cd - : 进入上次目录

      cd .. :进入上一级目录

      cd . :进入当前目录;在Linux中 . (点)代表当前目录

    显示当前目录路径 : pwd

    删除目录 : rmdir [目录名]

      该命令只能删除空目录

    删除文件或目录 : rm -rf [文件或者目录名]

      -r :删除目录

      -f :强制删除

    复制 :cp [选项] [原文件或目录] [目标目录]

      -r :复制目录

      -p :连带文件属性复制

      -d :若源文件是链接文件,则复制链接属性

      -a :相当与 -pdr

    剪切或者改名 : mv [原文件或目录] [目标文件]

    相关概念:

      相对路径 :参照当前算在目录进行查找;

      绝对路径 :从根目录开始指定一级一级递归查找。

    ctrl + L :清屏快捷键

    Linux常用目录:

      / :根目录

      /bin 和 /sbin :用来保存系统命令

      /boot :用户启动目录

      /dev :特殊文件保存目录

      /etc : 配置文件

      /home :普通用户家目录

      /root :root用户家目录

      /lib :函数库保存目录

      /media 和 /mnt 和 /misc:空目录,挂载外接设备

      /proc 和 /sys:保存内存的挂在点,不能直接操作

      /tmp:临时目录

      /usr:系统软件资源目录

      /var:系统可变文档目录

      注意:对于一般的用户(这里指的是开发能力不够的,对Linux底层不了解的使用者)尽量不要操作家目录和tmp目录之外的其他目录

  2.2链接命令

    ln [-s] [原文件] [目录文件]

      -s :创建软链接

    硬链接特征(不建议创建硬链接):

      a.拥有相同的i节点和存储block块,可以看做是同一个文件

      b.可以通过i节点识别

      c.不能跨分区

      d.不能针对目录使用

    软链接特征:

      a.类似Windows创建快捷方式

      b.软链接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点号,并没有实际数据

      c.修改其中一个文件,另一个也就修改了

      d.删除源文件,软链接不能再使用

3.文件搜素命令

  3.1 文件搜索命令 :  locate 文件名

    速度快

    updatedb:强制更新数据库

    /etc/updatedb.conf配置文件:

      

  3.2 命令搜索命令(系统命令)

    whereis [参数] [选项]  : 搜索命令所在路径及帮助文档所在位置

      -b:只查找可执行文件

      -m:只查找帮助文档

    which 文件名

      搜索命令所在路径及别名

  PATH环境变量: 定义的是系统搜索命令的路径

4. 文件搜索命令 find

  这个命令非常强大

  find [搜索范围] [参数] [搜索条件]

    注意1:避免大范围搜索,会非常耗费系统的资源

    注意2:find是在系统当中符合条件的文件名。如果需要匹配,使用通配符是完全匹配。

    Linux通配符:

      *:匹配任意内容

      ?:匹配任意一个字符

      []:匹配任意一个中括号内的字符

    参照:

      -name:文件

      -iname:文件名不区分大小写

      -user:按照所有者来搜索

      -nouser:没有所有者的文件

      -mtime:修改文件内容

        -10:表示十分钟之内;10:表示十分钟;+10:表示十分钟以前

      -ctime:改变文件的属性

      -atime:按照文件访问时间

      -size:按照查找文件大小

      -inum:按照查找i节点

      例如:find -size +20K -a -size -50K

        超找大小在20K和50K之间的文件

      -a:and与

      -o:or 或

      补充: -exec 命令 {}; 对搜索结果进行处理

        例如:find . -size +20K -a -size -50K -exec ls -ln {};

5. 字符串搜索命令 grep

  grep [选项] 字符串  文件名

    -v:取反,不包含字符串的

    -i: 忽略大小写

  grep和find的区别:

    find是完全匹配

    grep是包含匹配,匹配使用正则表达式

6.帮助命令 man

  man 命令 

    获取指定命令的帮助文档(官方文档够权威)

    进入帮助文档之后可以使用 “/关键词”模糊查找

    n : 下一个

    shift+n : 上一个

    man的有8个级别,分别为1——8

  其他帮助命令

    help

      shell内部命令,获取shell内部命令的帮助

      例如: ls --help

    注: whereis 命令 :确认是否为内部命令

    info 命令

      比man更加详细

      查找方式:

        -回车: 进入子帮助页面(带有*号标记)

        -u: 进入上层页面

        -n: 进入下一个帮助小节

        -p:进入上一个帮助小节

        -q: 退出

7. 压缩与解压缩命令

  Linux常用的压缩格式有 .tar.gz  .tar.bz2  .zip  .gz  .bz2 五种

  6.1 zip格式压缩

    zip 压缩文件名   源文件

      压缩文件

    zip  -r  压缩文件名  源目录

      压缩目录

    unzip  压缩文件

      解压缩 .zip 压缩包

  6.2 .gz格式压缩

    gzip  源文件

      压缩为 .gz 格式的压缩文件,源文件会被删除

    gzip  -C  源文件 > 压缩文件

      压缩为 .gz 格式的压缩文件,源文件保留

    gzip  -r  目录

      压缩目录下的所有子文件,但是不能压缩目录

    gzip  -d  压缩文件

      解压缩文件

    gunzip  压缩文件

      解压缩文件

  6.3 .bz2 格式压缩

    bzip2  源文件

      不保留源文件

    bzip2  -k  源文件

      保留源文件

    bzip2  -d  压缩文件

    bunzip2  压缩文件

      以上两个命令均为解压缩,-k 保留压缩文件

    注意:bzip2 不支持压缩目录

  6.4 打包命令 tar

    tar  -cvf  打包文件名   源文件

      选项:

        -c: 打包

        -v: 显示过程

        -f: 指定打包后的文件名

    tar  -xvf  打包文件名

      解打

      选项:

        -x: 解打包

    tar  -zcvf  压缩包名(.tar.gz)  源文件

      选项:

        -z: 压缩为 .tar.gz 格式

    tar  -zxvf  压缩包名(.tar.gz)

      选项:

        -x: 解压缩 .tar.gz 格式

    tar  -jcvf  压缩包名(.tar.bz2)  源文件

    tar  -jxvf  压缩包名(.tar.bz2)

    tar  -jxvf  压缩文件名  -C  路径

      指定解压缩位置

    可以压缩多个文件

    tar  -ztvf  压缩文件名

      只查看压缩文件内容,不解压

7. 关机和重启命令

  shutdown命令

    shutdown  [选项]  [时间]

      选项:

        -c: 取消前一个关机命令

        -h: 关机

        -r: 重启

      now 表示当前时间

  & : 后台符号,命令在后台运行

  halt、poweroff、init 0

    三个关机命令,这三个命令不安全

  reboot、init  6

    重启命令,reboot相对安全

  系统运行级别:

    0 - 关机

    1 - 单用户

    2 - 不完全多用户,不含NFS服务

    3 - 完全多用户

    4 - 未分配

    5 - 图形界面

    6 - 重启

  runlevel : 查看系统级别

    会有两个值,第一个是进入当前级别前的级别;第二个是当前级别

  /etc/inittab

    系统开机默认进入系统级别

  logout : 退出登录命令

8. 挂载命令

  mount

    查询系统已经挂载的设备

  mount  -a

    依据配置文件 /etc/fstab 的内容,自动挂载

  8.1 挂载命令格式

    mount  [-t  文件系统]  [-o  特殊选项]   设备文件名   挂载点

    选项:

      -t  文件系统: 加入文件系统类型来指定挂载的类型,可以是 ext3、ext4、iso9660(光盘)等文件系统

      -o  特殊选项: 可以指定挂载的额外选项

    特殊选项

      atime/noatime: 更新访问时间/不更新访问时间;访问分区文件时,是否更新文件的访问时间。默认为更新

      async/sync: 异步/同步。默认为异步

      auto/noauto: 自动/手动;mount  -a 命令执行时,是否会自动安装 /etc/fstab 文件内容挂载。默认为自动

      rw/ro: 读写/只读;文件系统挂载时,是否具有读写权限。默认为rw

      suid/nosuid: 具有/不具有SUID权限;设定文件系统是否具有SUID和SGID的权限。默认为具有

      user/nouser: 允许/不允许普通用户挂载;设定文件系统是否允许普通用户挂载。默认为不允许,只有root可以挂载分区

      exec/noexec: 执行/不执行,设定是否允许在文件系统中执行可执行文件。默认为允许执行

      remount: 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限

      defaults: 定义默认值,相当于rw、SUID、dev、exec、auto、nouser、async这七个选项

      usrquota: 写入代表文件系统支持用户磁盘配额,默认不支持

      grpquota: 写入代表文件系统支持组磁盘配额,默认支持

  chomd  775  文件名称: 赋给文件可执行权限

  8.2 挂载光盘步骤

    首先放入光盘,然后

    8.2.1 建立挂载点

      mkdir   /mnt/cdrom/

    8.2.2 挂载光盘

      mount  -t  iso9660  /dev/sro   /mnt/cdrom

      或者 mount   /dev/sro  /mnt/cdrom

    8.2.3 卸载命令

      umount  设备文件名或者挂载点

      例如卸载光盘: umount  /dev/sro  或者   umount  /mnt/cdrom

    注意:卸载命令是必须执行的

  8.3 挂载U盘

    8.3.1 查看U盘设备文件名

      fdisk  -l

    8.3.2 挂载U盘

      mount  -t  vfat  /dev/sdb1   /mnt/usb

    注意:Linux默认是不支持NTFS文件系统的

9. 用户登录查看

  9.1 w  [用户名]

    命令输出格式解释:

      USER: 登录的用户名

      TTY: 登录终端

      FROM: 从哪个IP地址登录

      LOGIN@: 登录时间

      IDLE: 用户闲置时间

      JCPU:

      PCPU: 当前进程所占用的时间

      WHAT: 当前正在运行的命令

  9.2 who  [用户名]

    命令输出格式解释:

      - 用户名

      - 登录终端

      - 登录时间(登录来源IP地址)

  9.3 last

    查询当前登录和过去登录的用户信息

    默认是读取 /var/log/wtmp 文件数据

    命令输出格式解释:

      用户名 |  登录终端 | 登录IP | 登录时间 | 退出时间(在线时间)

  9.4 lastlog

    查看所有用户的最后一次登录时间

    默认是读取 /var/log/lastlog 文件内容

    命令输出格式解释:

      用户名 | 登录终端 | 登录IP | 最后一次登录时间

第二章  Shell基础

一、 Shell概述

  shell命令行解释器

    内核(硬件)——> shell、应用程序  ——>  用户

  shell 还是一个功能强大的编程语言,易编译、易调试,灵活适用。

  shell分类:

    Bourne  Shell : sh、ksh、Bash(Linux使用的shell)、psh、zsh

    C  Shell: csh、tcsh

  查看Linux所支持的shell方法:

    vi  /etc/shells

二、脚本执行方式

  1. echo  输出命令

    echo  [选项]   [输出内容]

    选项:

      -e: 支持反斜杠控制的字符转换

      控制字符:

        a : 输出警告声

        : 退格键,也就是向左删除键

         : 换行符

         : 回车键

         : 制表符,也就是tab键

        v: 垂直制表符

        hh: 八进制

        xhh:十六进制

  支持颜色输出: e

    echo  -e  "e[1;31m 江山如此多娇 e[0m"

    30m: 黑色  31m: 红色  32m: 绿色  33m: 黄色

    34m: 蓝色  35m: 洋红  36m: 青色  37m: 白色

  2. 第一个脚本

    编写一个脚本文件hello.sh,内容如下:

      #!/bin/bash

      # 第一个脚本

      echo  -e  "e[1;34m 江山如此多娇! e[0m"

    执行方式:

      2.1 chmod  755  hello.sh

          ./hello.sh

      2.2 bash hello.sh

三、Bash的基本功能

  1. 命令别名与快捷键

    alias

      查看系统生效的别名

    alias   命令='别名'

      定义别名

      例如: alias  ls='ls  --color=never'

    别名永久生效:

      vi   ~/.bashrc

        写入环境变量配置文件

      source   ~/.bashrc

        配置文件直接生效

    删除别名:

      unalias   别名

    命令生效顺序

      a. 第一顺位执行用绝对或相对路径执行的命令

      b. 第二顺位执行别名

      c. 第三顺位是Bash的内部命令

      d. 第四顺位是按照$PATH环境变量定义的目录查找顺序的第一个命令

    常用快捷键:

      ctrl + c: 强制终止

      ctrl + l: 清屏

      ctrl + a: 光标移动到命令行首

      ctrl + e: 光标移动到命令行尾

      ctrl + u: 从光标所在位置删除到行首

      ctrl + z: 把命令放入后台

      ctrl + r: 在历史命令中搜索

  2. 历史命令

    history   [选项]   [历史命令保存文件]

    选项:

      -c: 清空历史命令

      -w: 把缓存中的历史命令写入历史命令保存文件  ~/.bash_history

    历史命令默认保存1000行,可以在环境变量配置文件 /etc/profile 中进行修改 HISTSIZE=1000 (修改该值)

    使用 "!n" 重复执行第n条命令

    使用 "!!" 重复执行上一条命令

    使用 "!字符串" 重复执行最后一条以该字符串开头的命令

  3. 输出重定向

    输入: 数据输入电脑

    输出: 电脑数据输出

    3.1 标准输入输出

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

    3.2 输出重定向

类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或者设备中
标准输出重定向 命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或者设备中
标准错误输出重定向 错误命令 2>文件 以覆盖的方式,把错误命令的输出输出到指定的文件或者设备中
标准错误输出重定向 错误命令 2>>文件 以追加的方式,把错误命令的输出输出到指定的文件或者设备中
正确输出和错误输出同时保存 命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令 &> 文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令 &>> 文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令 >> 文件1  2>> 文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中

  4. 输入重定向

    wc   [选项]   [文件名]

      选项:

        -c: 统计字节数

        -w: 统计单词数

        -l: 统计行数

    命令 < 文件

      把文件作为命令的输入

    命令 << 标识符

      标识符把标识符之间内容作为命令的输入

  5. 管道符

    多命令顺序执行:

多命令执行符 格式 作用
; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1&&命令2 逻辑与;当命令1正确执行,则命令2才会执行;当命令1执行不正确,则命令2不会执行
|| 命令1||命令2 逻辑或;当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行

    应用:

      ls  &&  echo  yes  ||  echo  no

        判断命令是否正确执行

    5.1 管道符

      命令1 | 命令2

        命令1的正确输出作为命令2的操作对象

      应用:

        ls   -l  /etc  | more

        netstat  -an | grep  ESTABLISHED | wc  -c

  6. 通配符

通配符 作用
? 匹配一个任意字符
* 匹配0个或者任意多个字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符
[-] 匹配中括号中任意一个字符,- 代表一个范围
[^] 逻辑非,表示匹配不是中括号内的一个字符。e.g.: [^0-9]代表匹配一个不是数字的字符

    Bash中的特殊符号

'' 单引号,被单引号包含所有特殊符号都不起作用
"" 双引号,在双引号中特殊符号都没有特殊含义,但是 $ ` 三个是例外,表示“调用变量的值”、“引用命令”、“转义符”的特殊含义
`` 反引号,系统命令,在Bash中会先执行它。和 $() 作用是一样的,不过推荐使用 $() ,因为反引号非常容易看错
$() 和反引号作用一样,用来引用系统命令
# 在shell脚本中,#开头的行是注释
$ 用于调用变量的值
转义符,跟在之后的特殊符号将失去特殊含义,变为普通字符
原文地址:https://www.cnblogs.com/aston/p/7923039.html