Linux操作系统基础知识和常用指令学习笔记

Posted 棉花糖灬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux操作系统基础知识和常用指令学习笔记相关的知识,希望对你有一定的参考价值。

本文是Linux操作系统相关的知识,参考的资料主要有《鸟哥的Linux私房菜-基础版(第四版)》的第四到第十二章,以及尚硅谷的Linux教程。笔记不可能面面俱到,但是常用的命令和知识应该都包括了,此外指令的选项有很多,笔记中也是只列出了常用的几个,较完整的介绍还请大家自行搜索。如果有什么错误还请大家指出。

一、Linux基础知识

1. Linux文件目录

(1) 文件目录

  • /bin:binary的缩写,存储可执行文件
  • /boot:存储开机会用到的文件
  • /dev:存储装置和接口设备
  • /ect:存储配置文件
  • /lib:存储函式库文
  • /media:存储可移除的装置,如软盘、光盘、DVD等
  • /mnt:存储暂时挂载的其他文件系统
  • /opt:存储第三方安装软件
  • /run:存储开机后产生的各项信息
  • /sbin:s是Super User的意思,存储开机、修复、还原系统所需要的程序
  • /tmp:存储一般用户或正在执行的程序所产生的文件
  • /usr:存储各种软件
  • /var:存储变动性的数据,包括日志文件等
  • /home:默认的用户家目录
  • /root:root用户的家目录

(2) 目录符号

  • .:本层目录
  • ..:上层目录
  • -:前一个目录
  • ~:当前用户的家目录
  • ~用户名:该用户的家目录
  • /root:root 用户的家目录
  • /home/用户名:普通用户的家目录
  • /:根目录,即所有目录最顶层的目录

2. 快捷键

(1) 切换控制台

  • Ctrl+Alt+[F1~F6]:在桌面按下可进入编号为1~6的文本模式(又称终端接口、terminal、console),再按下相同的按键返回图形化窗口

(2) Tab键

  • Tab:具有命令补全和文件补全的功能
    • 在一个没打完的命令名后按两次Tab就可以显示所有以该字符串为前缀的命令名
    • 在一个没打完的文件名后按两次Tab就可以显示所有以该字符串为前缀的文件名
    • ---后面按两次Tab就可以显示改命令所有的可选项

(3) Ctrl相关快捷键

  • Ctrl+其他键

    • Ctrl+c:终止当前进程的运行
    • Ctrl+z:挂起当前进程
    • Ctrl+d:键盘输入结束,即EOF,并且该组合键还可以当作exit命令来使用
    • Ctrl+a:让光标移动到整个指令串的最前面
    • Ctrl+e:让光标移动到整个指令串的最后面
    • Ctrl+?:清除本行指令

3. 命令格式

  • command [-options] 参数1 参数2 ...:一般的指令格式

    • command:指令名

    • []:表示可选

    • -:表示是缩写,如-h

    • --:表示全称,如--help

    • 参数:命令的参数

      在某些特殊情况下选项和参数前面也有可能带有正号+

在指令中无论空几格都视为一格。在Linux中大小写字母是不一样的

4. 通配符

  • *:0到无穷多个任意字符
  • ?:一个任意字符
  • [abcd]:取[]中的任意一个字符
  • -:在编码顺序内的所有字符,如[0-9]表示0-9共10个数字
  • ^:反向选择,如[^abc]表示除了abc之外的其他一个字符

二、vi和vim编辑器

1. vi和vim基本介绍

  • Linux会内建vi编辑器,而vim是进阶版的vi,可以用不同颜色显示文字内容,并且具有程序编写的功能,可以根据程序的类型来进行显示。

  • 在vim编辑器下按Ctrl+S会锁定屏幕,此时可以用Ctrl+Q解除锁定

  • 如果输入alias显示 vi=‘vim’,则说明在执行vi指令时,默认使用的是vim

2. vi和vim的三种模式

vi 文件名当文件名存在时直接打开,不存在时新建。一般输入i进入编辑模式,输入ESC键退出编辑模式,输入:进入指令行命令模式,:wq!w是写入保存,q是退出,!是强制执行

(1) 一般指令模式

用vi打开文件后默认进入一般指令模式

i) 常用命令

  • Ctrl+fPageDown:下一页
  • Ctrl+bPageUp:上一页
  • 0home:移动到这一行的最前面字符
  • $end:移动到这一行的最后一个字符
  • Shift+g:移动到文件的最后一行
  • gg:移动到文件的第一行
  • /字符串:从光标处开始往下寻找字符串
  • ?字符串:从光标处开始往上寻找字符串
  • n:向下重复前一个搜寻操作
  • dd:删除光标所在的一整行
  • yy:复制游标所在的那一行
  • p:在光标的下一行粘贴

ii) 不常用命令

  • 30↓:往下移动30行

  • n+Enter:光标往下移动n行

  • n+Space:光标右移n个字符,n表示数字

  • :n1,n2s/word1/word2/g:在第n1行和n2行之间搜寻word1并将其替换为word2

  • :1,$s/word1/word2/g:从第一行到最后一行寻找word1,并将其地换为word2

  • u:复原上一个动作

  • .:重做上一个动作

(2) 编辑模式

按下i,I,o,O,a,A,r,R中的任意一个字母后进入编辑模式,一般按i即可,按下ESC键退出

(3) 指令行命令模式

输入:/后进入指令行命令模式,按ESC键返回到一般指令模式。在输入命令时,如果想输入多行,可以先输入\\,然后立刻输入回车键,就可以在下一行继续写了。

  • :set nu:显示行号
  • :set nonu:取消行号

3. 多文件编辑

可以用vim 文件名1 [文件名2...]来同时对多个文件进行编辑,在指令行模式下

  • :n:是编辑下一个文件
  • :N:是编辑上一个文件
  • ``:files`:是列出目前这个vim所开启的所有文件
  • :sq [文件名]:可以同时浏览多个文件,当加文件名时则在一个新窗口打开该文件,当不加文件名时,在同一个窗口内打开
  • Ctrl+w+↑:切换到上面的窗口
  • Ctrl+w+↓:切换到下面的窗口
  • Ctrl+w+q:退出当前窗口

三、开机、重启和用户登录注销

1. 关机、重启命令

主要有shutdownhaltreboot这三条指令,常用第一个。以及保存内存数据到磁盘的syn命令

  • shutdown [-krhc] [时间] [警告信息]:关机

    • -k:只发出警告信息不关机
    • -r:重新启动
    • -h:立即关机
    • -c:取消正在进行的shutdown指令
    • 时间:系统关机的时间,单位是分钟,默认为1分钟

    例:

    • shutdown -h now:立即关机
    • shutdown -h 20:25:下一个20点25分关机
  • halt:关机

  • reboot:重启系统

  • syn:让内存中尚未更新保存的数据写入到磁盘中,关机或重启时应先执行该命令

2. 用户登录和注销

  • logout:可注销用户,该指令在图形运行级别无效,在运行级别 3下有效,关于运行级别,请看本文5.1节

四、用户和用户组管理

1. 基本介绍

(1) 用户和用户组

  • Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
  • Linux 的用户需要至少要属于一个组
  • 用户组类似于角色,系统可以对有共性的多个用户进行统一的管理

(2) 用户权限

ls命令查看文件属性后,显示:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

  • 第0位表示文件类型
    • d:目录
    • -:文件,文件名的第一个字符为.时表示为一个隐藏文件
    • l:链接档
  • 第1-3位表示所有者权限,r表示可读,w表示可写,x表示可执行
  • 第4-6位表示所在组权限
  • 第7-9位表示其他用户权限

2. 用户操作

(1) 添加用户

  • useradd [-degsu] 用户名:新建用户帐号(超级用户可用)
    • -d 目录名 用户名:指定用户登入时的主目录
    • -e 日期 用户名:帐号终止日期
    • -g 群组 用户名:指定账户所属的用户组
    • -s shell 用户名:指定账户登录后所使用的shell
    • -u uid 用户名:指定用户ID

(2) 用户密码操作

  • passwd [-dlus] 用户名:设置或修改用户口令及其属性

    • -d:删除用户的口令
    • l:暂时锁定指定的用户帐号
    • -u:结束指定用户帐号的锁定
    • -s:显示指定用户帐号的状态

    例:

    • passwd zuzhiang:给zuzhiang用户设置密码
  • sudo passwd root:然后输入两遍密码,即可更新root用户的密码

(3) 修改用户

  • usermod [-degsul] 用户名:修改用户属性(超级用户可用)
    • -d 目录名 用户名:指定用户登入时的主目录
    • -e 日期 用户名:帐号终止日期
    • -g 群组 用户名:指定账户所属的用户组
    • -s shell 用户名:指定账户登录后所使用的shell
    • -u uid 用户名:指定用户ID
    • -l 新用户名 旧用户名:修改用户名

(4) 删除用户

  • userdel [-rf] 用户名:删除指定的用户帐号(超级用户可用)

    • 无参数:删除用户,但保留家目录

    • -r:不仅删除帐号,还删除所属文件

    • -f:删除用户登入目录及目录中的所有文件

(5) 查看用户信息

  • id 用户名:查看用户的UID、GID和用户所属组的信息,默认为当前用户
  • whoami:查看当前用户名
  • w:查看当前登录系统用户和详细信息
  • who:查看当前有哪些用户在线

(6) 切换用户

  • su 用户名:切换用户身份,权限高的用户可切换为权限低的用户,而不输入口令,反之需要。使用exit可以返回原来的用户

3. 用户组操作

(1) 增加组

  • groupadd [-go] 用户组名:新建组群(超级用户可用)
    • -g:指定用户组ID
    • -o:允许组ID不唯一

(2) 修改组

  • groupmod [-gno] 用户组名:修改指定用户组的属性(超级用户可用)
    • -g:指定新的用户组ID
    • -n:指定新的用户组名字
    • -o:允许组ID不唯一

(3) 删除组

  • groupdel 用户组名:删除指定的用户组(超级用户可用)

4. 权限操作

(1) 修改文件访问权限

  • chmod 对象 操作符 权限:修改文件的访问权限

    对象:

    • u:文件所有者
    • g:同组用户
    • o:其他用户

    操作符:

    • +:增加
    • -:删除
    • =:赋予

    权限:

    • r:读
    • w:写
    • x:执行
    • s:设置用户ID

    例:

    • chmod g-w file:取消同组用户对file文件的写入权限
    • chmod 755 pict:将pict目录的访问权限设置为775

(2) 修改文件所有者

  • chown [-cR] 用户或用户组 文件名:将指定文件的拥有者改为指定的用户或用户组
    • -c:显示更改的部分的信息
    • -R:处理指定目录以及其子目录下的所有文件

(3) 修改文件所属用户组

  • chgrp [-cR] 组名 文件名:改变文件的所属用户组

    • -c:显示更改的部分的信息
    • -R:处理指定目录以及其子目录下的所有文件

5. 用户/口令/组的配置文件

(1) 用户配置文件

位于/etc/passwd

记录用户的各种信息,每行的格式为用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell

(2) 口令配置文件

位于/etc/shadow

保存密码和登录信息,文件内容是加密的。每行的格式为``登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志`

(3) 组配置文件

位于/etc/group

记录Linux包含的组信息,每行的格式为`组名:口令:组标识号:组内用户列表

五、运行级别

1. 运行级别介绍

  • 0:关机
  • 1:单用户(用于找回密码)
  • 2:多用户状态无网络服务
  • 3:多用户状态有网络服务
  • 4:系统未使用,保留给用户
  • 5:图形界面
  • 6:系统重启

常用的运行级别是3和5,要修改默认的运行级别可以修改/etc/inittab文件

2. 切换运行级别

init [012356]切换到指定运行级别,注意没有4

3. 单用户状态找回密码

可以通过init 1切换到单用户状态,此时不需要密码即可登录,可以用于找回密码

具体操作

开机 -> 在引导时输入回车 -> 看到新界面,输入e -> 看到新界面,选择第二行(编辑kernel),输入e -> 输入空格 1 -> 输入回车键 -> 输入b -> 进入单用户模式 -> 使用passwd命令来修改root密码

只有在能接触到电脑主机时才能执行这个操作,所以是安全的

六、帮助指令

1. conmand命令

  • command --help:查看指令的帮助信息,即怎样使用

2. man命令

  • man 命令或配置文件:查看命令的帮助信息

    快捷键:

    • Space:往下翻页
    • q:退出
    • /:后加字符串,可以向下搜索该字符串
    • ?:向上搜索字符串
    • n:搜索下一个

3. help命令

  • help 命令:查看命令的帮助信息

七、历史命令

1. 查看历史指令

  • history [n]:查看历史命令

    • n:数字,列出最近的n条命令
  • history [-c]:将所有历史命令全部清除

  • history [-raw] histfiles:查看历史命令

    • -a:将历史命令额外保存在histfiles文件中
    • -r:将histfiles文件中的内容读入到history记忆中
    • -w:将目前的history记忆内容写入到histfiles

2. 运行历史指令

  • !number执行history记忆中的第number个命令
  • !command向前搜索以command为开头的指令并执行
  • !!执行上一个命令

八、目录/文件操作命令

1. 更改目录

  • cd:变换目录(change directory),cd后不加任何目录表示回到家目录

2. 显示目录/文件

(1) pwd命令

  • pwd [-P]:显示当前目录(print working directory)
    • -p:显示确实的路径,而不是用链接路径

(2) ls命令

  • ls [-ahl] 文件名或目录名:显示文件或目录信息
    • -a:显示所有文件(包括以.开头的隐藏文件)
    • -h:将文件的容量以人类易读的方式显示
    • -l:长数据串行出,包含文件的属性与权限等数据

3. 创建目录

  • mkdir [-mp] 目录名:创建一个新的目录

    • -m:配置文件的权限
    • -p:直接将所需的目录(包括上层目录)递归的建立起来

    • mkdir -m 777

4. 复制目录/文件

  • cp [-adfirsu] 源文件名 目标文件名:复制文件或目录
    • -a:相当于`-dr --preserve=all``
    • ``-d`:若源文件为链接文件的属性,则复制链接文件属性而非文件本身
    • -f:强制的意思
    • -i:若目标文件已经存在,则在覆盖时会先进行询问
    • -r:递归持续复制,用于目录的复制行为
    • -s:复制为符号链接文件,即快捷方式文件
    • -u:当源文件比目标文件新或目标文件不存在时才进行更新或复制
    • --preserve=all:连同文件的各种属性也复制过去

5. 移动目录/文件

  • mv [-fiu] 源文件名或目录名 目标文件名或目录名:移动文件或目录,或更名

    • -f:强制覆盖目标文件
    • -i:覆盖前先询问
    • -u:若源文件比目标文件新时才更新

    例:

    • mv 旧文件名 新文件名:实际是更名的效果
    • mv 文件名1 文件名2 目录名:当有多个文件或目录名是,最后一个一定是目录,其作用是将所有文件都移动到目录中
    • rm *:删除当前目录下的所有文件
    • rm *.txt:删除当前目录下的所有文本文档

6. 删除目录/文件

(1) rmdir命令

  • rmdir [-p] 目录名:删除空目录

    • -p:连同上层的空目录一起删除,若目录中有内容则无法删除

    例:

    • rmdir -p a/b/c

(2) rm命令

  • rm [-fir] 文件名或目录名:移除文件或目录

    • -f:强制执行,可以忽略不存在的文件,不出现警告信息
    • -i:互动模式,删除前会先询问
    • -r:递归删除

    例:

    • rm -i bashrc*:删除以bashrc开头的文件或目录,其中*表示0到无穷任意多个字符
    • rm ./-aaa:删除名为-aaa的文件,不能直接运行rm -aaa,因为-会被当作选项

7. ln命令

  • ln [-sf] 源文件 目标文件:制作链接档
    • -s:软链接(符号链接),类似于Windows系统下的快捷方式,默认是硬连接
    • -f:强制执行,若目标文件存在则将其删除后再建立

九、文件属性操作命令

1. 修改文件时间

  • touch [-am] 文件名:修改文件或目录的时间属性

    • -a:仅修改access time
    • -m:仅修改modification time

    例:

    • touch hello.txt:创建名为hello.txt的新文件

2. 查看/设置文件权限

  • umask [-S]:查看或指定当前用户在建立文件或目录时的权限默认值。

    • 不加参数:显示四个数字,分别表示root用户、当前用户、用户组和其他用户的权限,其中读权限r为4分,写权限w为2分,执行权限x为1分
    • -S:以人能读懂的方式显示当前用户、用户组和其他用户的权限,如drwxr-xr-x中的第一个d表示为目录,若为-表示为普通文件,当没有相应的权限时用-占位

    例:

    • umask 022:指定当前用户、用户组和其他用户的权限

3. 配置文件隐藏属性

  • chattr [+-=][ai] 文件名或目录名:配置文件隐藏属性

    • +:增加一个特殊参数
    • -:删除一个特殊参数
    • =:设定一定,且仅有后面的参数
    • -a:设定文件只能增加数据,不能删除和修改
    • -i:设定文件不能删除、改名或增加数据等。-ai只有root用户才能设定。

4. 显示文件隐藏属性

  • lsattr [-adR] 文件名或目录名:显示文件隐藏属性

    • -a:将隐藏文件的属性也显示出来
    • -d:如果是目录则只列出目录本身的属性而非目录内文件的属性
    • -R:连同子目录的数据也一并列出来

十、文本编辑命令

1. 输出内容到控制台

  • echo 输出内容:输出内容到控制台

    例:

    • echo $PATH:将环境变量的路径信息输出到控制台

2. 以只读方式显示文件内容

(1) cat命令

  • cat [-nv] 文件名:由第一行开始显示文件内容,以只读的方式打开,cat是concatenate(连续)的缩写

    • -n:打印出行号,空白行也有行号
    • -v:列出一些看不出来的特殊字符

    例:

    • cat > 文件名:创建文件并在下一行写入文本内容,输入Ctrl+C表示输入结束
    • cat >> 文件名:在文件中追加内容

(2) tac命令

  • tac 文件名:从最后一行开始显示(是cat倒着写)

3. 显示时输出行号

  • nl [-bnw] 文件名:显示的时候输出行号,catnl都不可以用PageDownPageUp进行翻页
    • -b a:无论是否为空行,都显示行号
    • -n ln:在屏幕的最左方显示行号

4. 显示开头/结尾内容

(1) head命令

  • head [-n number] 文件名:从头开始显示指定行数的文件内容

(2) tail命令

  • tail [-f] [-n number] 文件名:从末尾开始显示指定行数的文件内容

    • -f:持续侦测文件内容,当文件正在写入时使用

    例:

    • tail -n +100 /etc/man_db.conf:显示第100行往后的内容

5. 按页显示文件内容

(1) more命令

  • more 文件名:以全屏幕的方式按页显示文本文件的内容

    快捷键:

    • Space:往下翻页
    • b:往上翻页
    • Enter:往下翻一行
    • /字符串:在当前显示内容中往下搜索字符串
    • :f:显示文件名和当前显示的行数
    • q:退出

(2) less命令

  • less 文件名:分屏查看文件内容,比more指令更强大,随时加载要显示的内容,而非一次全加载,对显示大型文件具有较高的效率

    快捷键:

    • Space:往下翻页

    • b:往上翻页

    • Enter:往下翻一行

    • /字符串:在当前显示内容中往下搜索字符串

    • :f:显示文件名和当前显示的行数

    • q:退出

    • PageDown:往下翻页

    • PageUp]:往上翻页

    • ?字符串:向上搜索字符串

    • n:重复前一个搜索

    • g:跑到文件的第一行

    • Shift+g:跑到文件的最后一行

6. 以指定字码显示文件内容

  • od [-t TYPE] 文件名: 读取文件的内容,并将其内容以默认字码呈现出来
    • -t a:用默认字符来输出
    • -t c:用ASCII字符来输出
    • -t d:用十进制来输出
    • -t f:用浮点数来输出
    • -t o:用八进制来输出
    • -t x:用十六进制来输出

7. 输出重定向

输出重定向即将本来要输出到屏幕的内容输出到其他位置

  • 命令 > 文件名:覆盖写入

  • 命令 >> 文件名:追加

    例:

    • ls -l > a.txt:将列表内容写入到a.txt中,会自动创建a.txt文件
    • echo 内容 >> 文件名:向文件里追加内容,若文件不存在则新建
    • 1>1>>是标准输出的重定向,即将指令正常运行时的信息重定向输出
    • 2>2>>是标准错误输出的重定向,即将指令运行错误时的信息重定向输出
    • &>可以将正确和错误信息输出到同一个文件中,并且顺序不会乱

8. 输入重定向

输入重定向即将本来要从键盘输入的内容改为由其他方式(如文件)输入

  • 命令 < 文件名: 指定文件作为命令的输入设备
  • 命令 << 文件名:由文件输入之后必须通过键盘输入EOF之后才结束

9. 文本内容按行排序

  • sort [-fbnru] 文件名: 将文本文件内容加以排序,以行为单位
    • -f:忽略大小写
    • -b:忽略最前面的空格
    • -n:以纯数字(而不是字符)的方式排序
    • -r:反向排序
    • -u:对于相同的数据只显示一行

10. 去除重复的行

  • uniq [-ic] 文件名:对文本文件中的行去重,通常与sort命令配合
    • -i:忽略大小写
    • -c:在第一列显示重复次数

11. 统计文件信息

  • wc [-lwm] 文件名:统计文件信息
    • -l:仅列出行数
    • -w:仅列出多少字
    • -m:多少字符

十一、时间日期命令

1. 查看时间日期

  • date:显示日期和时间
  • date +%Y:显示当前年
  • date +%m:显示当前月
  • date +%d:显示当前日
  • date "+%Y-%m-%d %H:%m:%s":显示年当前月日时分秒,其中-Space:都是连接符

2. 设置时间日期

  • date -s 字符串时间:设置时间

    例:

    • date -s "2018-10-10 11:22:33"

3. 查看日历

  • cal [month] [year]:显示日历

十二、搜索查找命令

1. 寻找可执行文件/命令的路径

  • which [-a] command:寻找可执行文件/命令的路径
    • -a:将所有PATH目录中可以找到的指令均列出,默认是只列出第一个

2. 在指定目录查找文件

  • whereis 文件或目录名:在一些特定的目录中寻找文件

3. 快速定位文件路径

  • locate [-i] 关键词:快速定位文件路径,利用数据库来寻找文件,数据库一般是一天更新一次,可以用updatedb命令来更新数据库
    • -i忽略大小写

4. 在硬盘查找文件

  • find [PATH] [option] [action]:在硬盘上寻找文件

    • path:搜索的路径名,可以带有通配符

    • option

      • -name filename:指定文件名
      • -size [+-]SIZE:搜索比SIZE大还是小的文件,c表示byte,k表示KB,m表示MB
      • -type TYPE:指定文件类型,f是一般文件,d是目录,l是连接档。
      • -user username:查找属于某个用户的文件
    • action:有执行和打印等

    例:

    • find / -size 20M:查找整个Linux系统下大于20M的文件
    • find / -size +1M -exec ls -l {} \\;:从-exec\\;为find命令额外执行的动作,{}表示由find找到的内容,\\;是结束的标志。即先找到size小于1M的文件,然后用ls命令列出来

5. 查找符合条件的字符串

  • grep [-acinv] [--color=auto] '搜索字符串' 文件名:分析一行讯息,若有所需信息则取出来,通常利用管道|和其他命令配合使用

    • -a:将二进制文件以文本文件的方式搜索
    • -c:计算找到‘搜索字符串’的次数
    • -i:忽略大小写
    • -n:顺便输出行号
    • -v:反向选择,即显示没有出现’搜索字符串’的那一行

    例:

    • cat hello.txt | grep -n yes:在hello.txt中区分大小写的查找yes所出现的所有行号

十三、压缩和解压命令

  • 压缩文件的拓展名大多是*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz,*.zip等,其中.tar的文件只是打包过,没有经过压缩

  • Linux 中的文件实际上没有扩展名,不过仍常根据文件的拓展名来区分文件的类型,如.sh是shell的脚本文件,.tar, .tar.gz, .zip, .tgz等为压缩文件

1. 压缩解压.gz文件

(1) gzip命令

  • gzip [-dtv#] 文件名:压缩/解压缩命令
    • 无参数:压缩成扩展名为.gz的文件
    • -d:解压,解压后会删除源文件,可对扩展名为.Z, .zip, .gz 的文件进行解压
    • -t:检验压缩文件的一致性,检验文件是否出错
    • -v:显示压缩比等信息(压缩时用)
    • #:为数字的意思,代表压缩等级,-1最快但压缩比大,-9最慢但压缩比小

(2) gunzip命令

  • gunzip [-kqtv] 文件名:解压被gzip压缩过的文件
    • -k:保留原始压缩文件
    • -q:不显示警告信息
    • -t:测试压缩文件是否正确无误
    • -v:显示指令执行过程

2. 压缩解压.bz文件

  • bzip2 [-dkv#] 文件名:压缩时生成的文件后缀名为.bz2,该命令的压缩率比gzip高,但速度慢些
    • -k:保留源文件而不删除
    • -dv#:和gzip相同

3. 压缩解压.xz文件

  • xz [-dlk#] 文件名:压缩时生成的文件后缀名为.xz,压缩率更高
    • -l:列出压缩文件的相关信息,如压缩前后的大小和压缩率等
    • -dk#bzip2相同

以上3个指令只能对单一文件进行压缩,如果是多个文件则需要先进行打包,再进行压缩

4. 读取压缩后的文本文件

  • zcat/zmore/zless:用来读取纯文本文档被压缩后的压缩文件

5. 压缩解压.zip文件

(1) zip命令

  • zip [-r] [压缩文件名] 文件或目录名:压缩文件,后缀名为.zip
    • -r:递归压缩,即压缩目录

(2) unzip命令

  • unzip [-d 目录名] 解压文件名:将压缩文件解压到指定路径

6. 打包并压缩/解压命令

tar命令中参数可以分为3组,一是共有的-vf,二是-z, -j, -J,用于指定压缩/解压所使用的方式,不能同时出现在同一指令中,三是-c, -t, -x,用于指定指令的作用(压缩、查看、解压),不能同时出现在同一指令中。

  • tar [-z|-j|-J] [-c] [-v] [-f 文件名] 要打包或压缩的文件名列表:打包或压缩

  • tar [-z|-j|-J] [-t] [-v] [-f 文件名]:查看打包文件包括哪些文件

  • tar [-z|-j|-J] [-x] [-v] [-f 文件名] [-C 目录名]:解打包或解压缩,C为大写

    • -z:用gzip进行压缩/解压缩,推荐使用
    • -j:用bzip2进行压缩/解压缩
    • -J:用xz进行压缩/解压缩

    • -c:打包或压缩
    • -t:查看打包文件包括哪些文件,不常用
    • -x:解压缩

    • -v:在压缩/解压缩过程中将正在处理的文件名显示出来
    • -f 文件名:指定要处理的文件

    • -C 目录:指定要解压到的目录

    例:

    • tar -jxv -f filename.tar.bz2 -C 目录名:用bzip2将该压缩文件解压到指定目录中
    • tar -zcv -f /root/system.tar.gz --exclude=file1 --exclude=file2:不打包目录中的某几个文件
    • tar -zxvf filename.tar.gz:将.tar.gz格式的文件解压到当前目录

    如果不加[-z|-j|-J]则是进行打包,此时文件名要指定为*.tar,若添加[-z|-j|-J]进行压缩时文件名要指定为\\*.tar.gz|\\*.tar.bz2|\\*.tar.xz,通过tar命令打包的文件被称为tarfile,通过tar命令压缩的文件被称为tarball

十四、CROND任务调度

1. 任务调度

指系统在某个时间执行的特定的命令或程序,如每周进行一次病毒扫描等。如果是简单任务,可以直接在crontab中加入任务即可,反之需要写脚本(shell编程)

2. crontab命令

  • crontab [-elr]
    • -e:编辑crontab定时任务
    • -l:查询crontab任务
    • -r:删除当前的crontab任务

3. 实例

  • 执行crontab -e命令
  • 在新界面输入*/1****ls -l /etc >> /tmp/to.txt,并保存退出
  • 在每分钟开始的时候都会自动调用ls -l /etc >> /tmp/to.txt命令

4. 时间格式

时间格式为:f1 f2 f3 f4 f5 program

  • f1表示分钟,范围0-59
  • f2表示小时,范围0-23
  • f3表示一个月中的第几天,范围1-31
  • f4表示月份,范围1-12
  • f5表示一个星期中的第几天,范围0-7(0和7都表示周日)
  • program表示要执行的程序

5. 特殊符号

  • *:表示任何时间,如f1*时表示每分钟都执行一次
  • ,:表示不连续的时间,如0 8,12,16 ***表示每天的8点0分,12点0分,16点0分都执行一次
  • -:表示连续的时间范围,如0 5 ** 1-6表示周一到周六的5点0分执行
  • */n:表示每隔多久执行一次,如*/10 ****表示每隔10分钟执行一次

十五、Linux磁盘分区、挂载

1. 原理介绍

  • Linux 无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分

  • Linux 采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得

2. 硬盘说明

  • 当前多采用SCSI硬盘,驱动器标识符为sdx~,其中sd为分区所在设备的类型,即SCSI硬盘。x为盘号,a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘。~代表分区,前四个分区用数字 1 到 4 表示,是主分区或扩展分区,从 5 开始是逻辑分区。

    例:

    • sda3 表示为第一个 SCSI 硬盘上的第三个主分区或扩展分区
  • lsblk -f:查看系统分区和挂载情况

  • lsblk:查看系统分区情况,包括分区大小,看不到已使用的情况

3. 挂载硬盘

将新硬盘挂载到/home/newdisk目录下

  • 添加硬盘

  • 分区:使用fdisk /dev/sdb/dev/sdb分区出sdb1

    • 输入m:显示命令列表
    • 输入n:新增分区,此时会显示提示信息
    • 输入p:表示选择主分区,然后输入1,表示主分区的第一块,此后两次回车表示默认
    • 输入d:删除分区(分区时不执行)
    • 输入w:写入并退出
  • 格式化:mkfs -t ext4 /dev/sdb1

  • 挂载:先创建/home/newdisk目录,mount /dev/sdb1 /home/newdisk,此为临时挂载,重启后失效

  • 解挂:使用umount /dev/sdb1umount /home/newdisk解挂,不能/home/newdisk目录下执行命令

  • 永久挂载:使用vim /etc/fstab命令编辑/etc/fstab文件,增加一行/dev/sdb1 /home/newdisk etx4 defaults 0 0,保存退出,执行mount -a命令

4. 磁盘情况查询

(1) 查看系统整体磁盘使用情况

  • df [-alh]:查看系统整体磁盘使用情况

    • -a:列出所有的文件系统
    • -l
    • -h:自动以KB、MB、GB等合适的格式显示默认以KB为单位显示

    例:

    • df -lh:查看各个分区使用情况

(2) 查看指定目录的磁盘使用情况

  • du [-acsh] --max-depth=1 [文件或目录名]:查看指定目录的磁盘使用情况

    • -ah:如df命令
    • -c:列出一级子目录明细的同时,增加汇总值
    • -s:指定目录占用大小汇总
    • --max-depth=1:子目录深度

    例:

    • du -sh *:查看当前目录下每个文件、文件夹的大小
    • sudo du -sh /home/*:查看每个用户占用的磁盘大小

(3) 文件/文件夹个数统计&树状显示目录结构

  • ls -l /home | grep "^-" wc -l:统计/home下文件的个数
  • ls -l /home | grep "^d" wc -l:统计/home下文件夹的个数
  • ls -lr /home | grep "^-" wc -l:统计/home及其子目录下文件的个数
  • tree:以树状显示目录结构,需要先apt-get tree

十六、网络配置

1. 自动获取IP

  • vi /etc/network/interfaces:编辑网络端口配置文件

  • 用以下两行替换跟etc0相关的行,etc0ifconfig命令显示的网卡名称

    auto eth0
    iface eth0 inet dhcp
    
  • sudo /etc/init.d/networking restart:重启网络让设置生效

2. 使用固定IP

  • vi /etc/network/interfaces:编辑网络端口配置文件

  • 用以下两行替换跟etc0相关的行,etc0ifconfig命令显示的网卡名称

    auto eth0
    iface eth0 inet static
    address 192.168.1.102  # 根据需求设置自己的IP
    netmask 255.255.255.0  # 子网掩码
    gateway 192.168.1.1    # 网关
    dns-nameserver  8.8.8.8
    
  • sudo /etc/init.d/networking restart:重启网络让设置生效

3. 网络相关命令

(1) 显示或设置网络设备

  • ifconfig: 显示或设置网络设备

(2) 检查网络是否连通

  • ping IP地址/网址:检查网络是否连通

(3) 查看系统网络情况

  • netstat [-anp]:查看系统网络情况
    • -an:按一定顺序排列输出
    • -p:显示哪个进程在调用

十七、进程管理

1. 基本介绍

  • Linux中每个指定的程序(代码)都称为一个进程,每个进程有一个ID号

  • 每个进程都有一个父进程,父进程可以创建多个子进程

  • 每个进程都有两种存在方式:前台和后台

  • 一般的系统服务都是以后台进程的方式存在,且会常驻系统中,直到关机才结束

2. 进程相关命令

(1) 查看进程状态

  • ps [-aux]:(process state)查看进程状态,结果并不动态连续

    • -a:显示所有用户的所有进程

    • -u:按用户名启动时间的顺序来显示进程

    • -x:显示后台进程运行的参数

    例:

    • ps -aux | more:以分页的形式查看所有进程
    • ps -aux | grep tomcat:只查看tomcat进程的情况
    • ps -ef:以全格式显示当前所有的进程,通过PPID字段查看进程的父进程

(2) 以树状形式显示进程状态

  • pstree [-pu]:以树状形式来查看进程信息
    • -p:显示进程PID
    • -u:显示进程所属用户

(3) 动态查看进程状态

  • top [-dinpS]:动态监控进程的情况,即会更新进程的情况

    • -d 秒数:设置两次刷新时间的间隔
    • -i:不显示空闲进程或僵尸进程
    • -n 次数:设置更新次数,显示完后退出。
    • -p PID:通过进程PID指定仅监控某个进程的状态
    • -S:累计模式,输出每个进程的总CPU时间

    交互操作:

    • -P:以CPU使用频率排序,默认选项
    • -N:以PID排序
    • -M:以内存的使用率排序
    • q:退出top界面
    • u 回车 用户名:监视特定用户
    • k 回车 PID:终止指定的进程

    例:

    • top:一般直接用top命令即可

(4) 按PID杀死进程

  • kill [选项] 进程号:杀死进程
    • -9:强制杀死进程

(5) 按进程名杀死进程

  • killall 进程名称:杀死多个同名进程,支持通配符

(6) 前台运行

  • fg 任务号:恢复到前台运行

(7) 后台运行

  • bg 任务号:恢复到后台运行

(8) 查看被挂起的进程

  • jobs:查看被挂起的进程

3. 服务管理

(1) 系统该服务操作

  • systemctl 服务名 [start|stop|restart|reload|status]:系统服务操作

(2) 查看端口情况

telnet 服务器IP 端口号:查看服务器某个端口是否在监听,并且可以访问

(3) 查看所有服务

  • setup:在图形界面查看

  • ls -l /etc/init.d:在/etc/init.d文件中查看

(4) 设置服务在各运行级别的自启动情况

  • chkconfig --list | grep 进程名:给所有服务的各个运行级别设置自启动/关闭

  • chkconfig 服务名 --list:查看指定服务的各个运行级别设置自启动/关闭

  • chkconfig --level 5 服务名 on/off:将指定服务在5这个运行级别设置为自启动/关闭,不设置level时,在所有运行级别都生效

chkconfig重新设置服务自启动或关闭后需要重启机器才能生效

十八、shell编程

1. shell简介

  • Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序

  • #!/bin/bash开头

  • 脚本需要有可执行权限

  • 注释有两种

    • 单行注释:#
    • 多行注释::<<!!
  • Linux下默认的shell是bash

  • 如果一行的内容太多,可以用\\Enter来延伸至下一行

  • exit 0表示退出脚本程序

例:输出hello world

#!/bin/bash
echo "hello world"

2. shell中的特殊字符

  • #:注释符号
  • \\:转义字符
  • |:管线,分割两个管线命令的界定
  • ;:连续性命令的节点
  • $:取用变量的前导符
  • &:工作控制,将指令变为后台运行,如cp -r /usr/* test &/usr目录下的所有文件和目录复制到test目录下,该过程在后台完成
  • !:逻辑非
  • ():中间为子shell的起始和终止
  • {}:中间为命令区块的组合。

3. 指令之间的关系

  • cmd;cmd:不考虑指令相关性的连续指令下达

  • cmd1 && cmd2:若cmd1正确执行完毕,则继续执行cmd2,反之不执行cmd2

  • cmd1 || cmd2:若cmd1正确执行完毕,则不执行cmd2,反之执行cmd2

  • 管线命令|和连续下达命令;是不同的,它可以让第一个命令的正确输出信息作为第二个命令的输入,有多个命令时以此类推。不是所有的指令都可以当作后面的指令,它必须要有接收标准输入的能力

  • 在管线中当某些指令需要用到文件名来进行处理时,该标准输入和标准输出可以利用-来代替

4. 脚本的执行方式

(1) 方式一

  • chmod 755 文件名:赋予.sh文件执行权限
  • 执行脚本
    • 通过文件的绝对路径执行,直接输入文件的绝对路径即可
    • 通过文件的相对路径执行,直接输入文件的相对路径即可

(2) 方式二

  • sh 文件名:此时不需要有执行权限,不推荐
  • bash 文件名:也可以

5. shell的变量

(1) 命名要求

  • 变量名可以由字母、数组和下划线组成,但不能以数字开头

  • 等号两侧不能有空格

  • 变量名称一般全大写

(2) 定义变量

shell中的变量分为系统变量和用户自定义变量

系统变量$HOME$PWD$SHELL$USER

定义变量变量名=变量值,注意中间无空格,否则会报错

例:输出系统变量

#!/bin/bash

echo "path=$PATH"
echo "user=$USER"

在命令行中输入set,显示当前shell中的所有变量

(3) 撤销变量和静态变量

  • 撤销变量unset 变量名

  • 声明静态变量readonly 变量名,静态变量不能unset

例:变量/静态变量的声明和撤销

#!/bin/bash

A=100
echo "A=$A"
unset A
echo "A=$A"

readonly B=99  # 定义静态变量
echo "B=$B"
unset  # 会报错,但不影响后面代码的执行
echo "B=$B"

(4) 将命令的返回值赋给变量

  • 变量名=`命令`:反引号,运行里面的命令,并把结果返回给变量

  • 变量名=$(命令):将命令结果返回给变量

例:

#!/bin/bash

RESULT=`ls -l /home`
echo $RESULT

MY_DATE=$(date)
echo "date=$MY_DATE"

(5) 设置环境变量