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) 设置环境变量

  • export 变量名=变量值:将shell变量输出为环境变量

  • source 配置文件:让修改后的配置文件立即生效

  • echo $变量名:在控制台查询环境变量的值

  • 环境变量配置文件有两种,一是系统公共的/etc/profile,不建议修改,二是每个用户自己的~/.bashrc文件

例:在环境变量配置文件中定义TOMCAT_HOME变量

TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME
  • source ~/.bashrc:让环境变量立即生效

  • echo $TOMCAT_HOME:在终端查看TOMCAT_HOME的值

  • 在另一个shell文件中使用TOMCAT_HOME变量

#!/bin/bash

echo "tomcat_home=$TOMCAT_HOME"

(6) 位置参数变量

当执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

  • $n:n为数字,$0代表命令本身,$1-$9代表第1-9个参数,10及以上的参数需要用大括号包裹,如${10}
  • $*:代表命令行中的所有参数,看作一个整体
  • $@:代表命令行中的所有参数,把每个参数看作不同的个体
  • $#:代表命令行中所有参数的个数

例:

#!/bin/bash

echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"

在中段运行filiename.sh 30 50

(7) 预定义变量

  • $$:当前进程的PID
  • $!:后台运行的最后一个进程的PID
  • $?:最后一次执行的命令的返回状态,如果值为0,表示正确运行,反之不正确
#!/bin/bash

echo "当前的进程号:$$"
# 后台的方式运行myShell.sh
./myShell.sh &
echo "最后的进程的进程号:$!"
echo "执行的值:$?"

6. 运算符

(1) 基本语法

  • $((运算式)
  • $[运算式]:推荐使用
  • expr m + n:expr运算符之间要有空格,乘法用\*表示

例:计算 (2+3) * 4的值

#!/bin/bash

RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"

RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"

TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"

(2) 条件判断

  • [ condition ]:判断语句,非空时返回true,注意condition前后要有空格
  • test:test命令也可以用作条件判断,如判断文件权限、文件类型、字符串和数字比较等,不推荐使用

(3) 常用判断条件

字符串比较

  • =:比较字符串是否相等

两个整数的比较

  • -lt:小于
  • -le:小于等于
  • -eq:等于
  • -gt:大于
  • -ge:大于等于
  • -ne:不等于

文件权限判断

  • -r:有读的权限
  • -w:有写的权限
  • -x:有执行的权限

文件类型判断

  • -f:文件存在并且是一个常规文件
  • -e:文件存在
  • -d:文件存在并且是一个目录

例:

#!/bin/bash

if [ "ok"="ok" ]
then
	echo "equal"
fi

if [ 23 -gt 22 ]
then
	echo "大于"
fi

if [ -e /root/aaa.txt ]
then
	echo "存在"
fi

7. 流程控制

(1) if判断

# 形式1,不推荐
if [条件判断式];then #在条件判断时,$$表示and,||表示or
	程序
elif [条件判断式];then
	程序
else
	程序
fi #结束if之意

# 形式2
if [条件判断式]
then
	程序
elif [条件判断式]
then
	程序
else
	程序
fi

例:如果输入的参数>=60,则输出“几个了”,反之输出“不及格”

#!/bin/bash

if [ $1 -ge 60 ]
then
	echo "及格了"
else
	echo "不及格"
fi

(2) case语句

case $变量名 in
值1)
	程序
	;;
值2)
	程序
	;;
*)
	变量内容为其他时执行的程序段
	exit 1
	;;
esac

例:当命令行参数为1时输出周一,为2时输出周二,反之输出other

#!/bin/bash
case $1 in
"1")
	echo "周一"
	;;
"2")
	echo "周二"
	;;
*)
	echo "other"
	;;
esac

(3) for循环

for 变量 in 值1 值2 值3...
do
	程序
done

例:打印命令行输入的参数

#!/bin/bash

for i in "$*"
do
	echo "the num is $i"
done

echo "============================"

for i in "$@"
do
	echo "the num is $i"
done
for ((初始值;循环控制条件;变量变化))
do
	程序
done

例:从1加到100的值输出

#!/bin/bash

SUM=0-
for((i=1;i<=100;i++))
do
	SUM=$[$SUM+$i]
done
echo "sum=$SUM"

(4) while循环

while [条件判断式]
do
	程序
done

例:从命令行输入一个数n,统计从1+2+…+n的值是多少

#!/bin/bash

SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "sum=$SUM"

8. 读取控制台输入

  • read [-pt] 变量名:读取控制台输入值到变量名
    • -p:指定读取值时的提示符
    • -t:指定读取值时等待的时间(秒)

例:读取控制台输入的num值,在10秒内输入

#!/bin/bash

read -t 10 -p "请输入一个数字num:" NUM
echo "你输入的值是:$NUM"

9. 函数

(1) 系统函数

  • basename 路径名 [后缀名]:获取文件名,当有后缀名时会去除后缀名

    例:

    • basename /etc/sysconfig/network:取最后的文件名,即network
  • dirname 路径名:返回文件的路径名(不包括文件名的部分)

    例:

    • dirname /etc/sysconfig/network:取目录名,即/etc/sysconfig

(2) 自定义函数

function 函数名(){
	程序
}

例:计算输入的两个参数的和

#!/bin/bash

function getSum(){
	SUM=$[$n1+$n2]
	echo "和是:$SUM"
}

read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2

# 调用getSum,传参时不需要用形参去接收
getSum $n1 $n2

10. shell编程综合案例

(1) 需求分析:

  • 每天凌晨 2:10 备份 数据库 atguiguDB 到/data/backup/db
  • 备份开始和备份结束能够给出相应的提示信息
  • 备份后的文件要求以备份时间为文件名,并打包成.tar.gz 的形式,比如:2018-03-12_230201.tar.gz
  • 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除

(2) 思路

首先写一个备份数据库的shell脚本,然后用crond定期执行

(3) 代码实现

#!/bin/bash

# 备份的路径
BACHUP=/data/backup/db
# 当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)

echo "=============开始备份============"
echo "备份的路径是:$BACHUP/$DATETIME.tar.gz"

# 主机
HOST=localhost
# 用户名
DB_USER=root
# 密码
DB_PWD=root
# 数据库
DATABASE=atguiguDB
# 如果备份的路径文件夹不存在则创建,反之直接使用
[ ! -d "$BACHUP/$DATETIME" ] && mkdir -p "$BACHUP/$DATETIME"
# 执行MySQL自带的备份数据库的命令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | grep > $BACKUP/$DATETIME/$DATETIME.sql.gz
# 打包备份文件
cd $BACKUP
tar -zcvf $BATETIME.tar.gz $DATETIME
# 删除临时目录
rm -rf $BACKUP/$DATETIME

# 删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "=============备份成功============"

十九、其他常用指令

1. 退出命令行

  • exit:在命令行里输入可以实现当前用户的注销(退出当前命令行,非关机)

2. 查看默认快捷键

  • man readline:查看bash中的默认快捷键

3. 简易计算器

  • bc:简单好用的计算器

    • + - * / ^ %:支持加、减、乘、除、指数、取余等,默认输出只支持整数;
    • 输入quit退出。

4. 设置指令别名

  • alias lm='ls -al':命令别名设定功能,将ls -al这个指令设定一个别名lm
    • 不加参数:查看所有有别名的命令
    • unalias lm:取消命令的别名。

5. C/C++代码编译运行

  • gcc 文件名:对源代码进行预处理、编译、汇编和链接,默认输出为:可执行文件"a.out",编译后的文件"sourcename.o",汇编文件是"sourcename.s",预处理后的C源代码送往标准输出

  • gcc 文件名 -o 输出文件名 :指定输出文件的文件名

  • 对于多个文件联合执行的,除.h文件不需要编译外,其他文件都需要编译:

    • gcc -c example.c
    • gcc -c add.c
    • gcc -c modify.c
    • gcc -c delete.c

    编译后生成目标文件example.o, add.o, modify.o, delete.o

    • gcc example.o add.o modify.o delete.o -o example

    链接以上四个文件,生成可执行文件example

  • gcc 文件名 -l 路径名:如果头文件不在gcc的搜索路径中,可以用该选项指定额外搜索路径,如gcc helloworld.c -l /usr/include -o helloworld 将该目录加入到头文件的搜索路径中

6. 从指定URL下载

  • wget [-bc] url:从指定URL下载

    • -b:在后台下载
    • -c:断点续传

    进入后台下载的任务,可以先找到其下载日志文件,然后用tail -f wget-logcat wget-log查看下载情

7. 查看显卡使用情况

  • nvidia-smi:查看显卡使用情况
  • watch -n 1 nvidia-smi:动态查看显卡使用情况,每一秒刷新一次

8. 查看ubuntu/CUDA版本信息

  • lsb_release -a:查看ubuntu版本信息
  • nvcc --version:查看CUDA版本
  • cat /usr/local/cuda/version.txt:查看CUDA版本

9. 离线跑代码

  • sudo apt-get install screen:安装screen
  • screen -S screen名:创建一个screen,注意S是大写
  • 在创建的screen界面正常运行程序即可,关闭命令行窗口后会自动在后台运行
  • screen -ls:查看所有的screen
  • screen -r 编号.screen名:连接到screen,当只有一个screen时,可以使用screen -r连接
  • screen -Dr 编号.screen名:当意外退出时,用该命令重新连接到screen
  • kill -9 screen编号:彻底关闭screen,或在screen界面按Ctrl+C
  • 在screen界面中,按Ctrl+A然后按Esc键可以用键盘上的方向键和PageUp/PageDown键进行翻页,按Ctrl+C退出。

10. 查看CPU/显卡/内存/硬盘信息

  • cat /proc/cpuinfo:查看CPU型号
  • lspci | grep VGA:查看GPU型号
  • free -m:查看内存
  • du -h --max-length=0 your_dir:查看目录大小

11. 安装包管理工具

apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,我们可以使用 apt

命令可用于软件包的安装、删除、清理等,类似于 Windows中的软件管理工具

  • sudo apt-get update:更新源
  • sudo apt-get install package:安装包
  • sudo apt-get remove package:删除包
  • sudo apt-get upgrade:更新已经安装的包

二十、其他不常用指令

  • info:和man指令的作用差不多,它把文件数据拆成一个个独立页面(节点),并用超链接来跳转到不同的页面,每个节点前有*符号
    • U:跳到上一个节点处
    • N:跳到下一个节点处
    • ↑|↓:移动到某个节点
    • Enter:进入节点
    • Tab:在节点之间快速移动
    • q:退出info page
  • linux中的变量的设定name="my name is $NAME",如果变量内容有空格符,需要用单引号或双引号将其括起来,在双引号中$符后面的被当做是变量名,单引号中的特殊字符被当作纯文本。
  • 若为变量扩增内容时,可使用:PATH="$PATH":/home/binPATH=${PATH}:/home/binPATH=$PATH:/home/bin
  • env:查看所有的环境变量
  • declare [-aixr] 变量名:宣告变量的类型
    • -a:将后面的变量定义为数组类型
    • -i:将后面的变量定义为整数类型
    • -x:将后面的变量变成环境变量
    • -r:将后面的变量设定为只读类型

一个变量有多个不同的内容时,内容之间由:隔开。

  • ${variable#/*local/bin:}:可以删除结尾是local/bin的变量内容,并且从左往右开始删除第一个

    • #:从最前面开始删除且只删除第一个
    • ##:把匹配到的全删除
    • %%%:与###类似,只不过是从后面开始删除
  • ${variable/old/new}:用新的值取代旧的值,若为//old/new则所有符合的内容都要取代

  • new_var=${old_var-content}:如果旧变量存在则将其值赋给新变量,否则新变量的值为为content

  • new_var=${old_var:content}:和前者类似,只是当旧变量为空时,新变量的值也取content

  • stty [-a]:设定终端机的输入按键代表的含义,stty 是 setting tty 的缩写

    • -a:将目前所有的syyt参数列出来。列出的内容中intr=^C中intr表示终止当前运行的程序,^表示Ctrl键,类似的kill表示删除当前指令行的所有内容,?表示退格键。
    • stty erase ^h设置向后删除字符的快捷键为Ctrl+h
  • cut -d '分隔字符' -f fields:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出

    • -d:后面跟分隔字符,与-f一同使用
    • -f:依据-d后面的分隔字符将一段讯息分为数段,用-f取出第几段
    • -c:以字符为单位取出固定字符区间,后面跟数字范围,如12-12-20。如echo ${PATH} | cut -d ':' -f 3,5将PATH信息以字符:分隔后,取出第3,5段
  • tee [-a] 文件名:读取标准输入的数据,并将其内容输出到文件和屏幕

    • -a以追加的方式写入到文件中
  • col [-x]:过滤控制字符

    • -x:将Tab键转换为对等的空格键
  • join [-ti12] 文件名1 文件名2:对比两个文件,将具有相同数据的行合并

    • -t:分隔符,默认是空格
    • -i:忽略大小写
    • -12:分别表示第1、2个文件要用哪个字段来分析,即用第1个文件的第几列和第2个文件的第几列相匹配

    如第一个文件中有"name:root",第二文件中有"name:zuzhiang",则以“:”为分隔符,合并后的结果是"name:root:zuzhiang"

  • paste [-d] 文件名1 文件名2:将两个文件对应的两行放到同一行,中间以Tab键隔开

    • -d:分割字符,默认是Tab
    • -:如果file部分写成 -,表示来自标准输入的意思
  • expand [-t] 文件名:将Tab键转成空格键

    • -t:后面接数字,表示一个Tab键由几个空格代替
  • split [-bl] 文件名 前缀:将大文件分区成为小文件

    • -b:后面接想要分区后的文件大小,可加单位b,k,m等
    • -l:以行数来进行分区
    • 前缀:前导符的意思,可作为分区文件的前导文字
  • xargs [-0epn] 命令:读入标准输入的数据,并以分隔符为界,将其分隔成为不同的参数,xargs后面没有接任何指令时,默认以echo来进行输出

    • -0:可将,\Space等字符还原成一般字符
    • -n:接参数的个数

    例:

    • xargs ls -al:然后输入两个文件夹的名称,则会用ls -al命令列出两个文件夹包含的文件信息

二十一、正则表达式(未整理,暂时没用过)

正则表达式和通配符是完全不一样的东西

[:alnum:]表示英文大小写字符和数字,[:alpha:]表示任何英文大小写字符,[:blank:]表示空格键和Tab键,[:cntrl:]表示控制键,包括CR/LF/Tab/Del等,[:digit:]表示数字,[:graph:]除了空格键和Tab键之外的所有按键,[:lower:]表示小写字符,[:print:]表示任意可以被打印出来的字符,[:punct:]表示标点符号#$也是,[:upper:]表示大写字符,[:space:]表示任何会产生空白的字符,如空格键、Tab键、CR键等,[:xdigit:]表示十六进制的数字,包括0-9,a-f,A-F。

grep [-A] [-B] [--color=auto] '搜索字符串' filename-A后面可加数组,为after的意思,除了列出该行外,后续的n行也列出来,-B后面可加数字,为befor的意思,除了列出该行外,前面的n行也列出来。

[]表示搜索字符的集合,只表示一个字符,[^]表示反向选择,^表示定位在行首,$表示定位在行尾,.任意一个字符,*任意0到无穷多个字符,{number[,number]}表示重复字符数,如o\{2\}表示两个o,o\{2,5\}表示2到5个o,o\{2,\}表示2到 无穷个o。

^word待搜索字符串在行首,word$待搜索字符串在行尾,.任意一个字符,*任意0到无穷多个字符,[list]字符集合,从中任取一个,[n1-n2]字符范围,[^list]不是该字符结合的任意一个字符,\{n,m\}

sed [-nefr] [动作]分析标准输入,-n使用安静模式,标准输入只有在经过sed处理的那一行才会被显示在屏幕上,-e直接在指令行模式上进行sed的动作编辑,-f直接将sed的动作卸载一个文件内,-f filename可以执行filename中的sed动作,-rsed的动作支持的是延伸型正则表达式语法,-i直接修改读取的文件内容,而不是由屏幕输出。

[n1[,n2]]functionn1,n2表示进行动作的行数,function可以是a新增,c取代,d删除,i插入,p打印,s取代,通常搭配正则表达式。如sed 's/old_str/new_str/g'取代

+一个或多个字符,?0个或1个字符,|用or的方式找出数个字符串,()找出群组字符串,其中的字符串是有顺序的一个整体,()+多个重复的群组。

diff [-bBi] from-file to-file对比两个文件的差异,-b忽略一行当中仅有多个空白的差异,-B忽略空白行的差异,-i忽略大小写的不同。

cmp [-l] file1 file2以字节为单位对比两个文件,-l将所有的不同点的字节都列出来,预设是只会输出第一个不同的点。

patch -pN < path_file更新文件,-p表示取消几层目录的意思,patch -R -pN < patch_file还原文件,-R表示还原。

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值