基于Frank's Linux 课程的笔记

0.0 系统的认识

  • 什么是系统?
  • 鼠标能点、键盘能输入东西、阅读看电影,还可以拓展安装一些软件, 简单来说就是人机交互所依赖的东西,开机依赖系统

0.1 Linux操作系统认识,以及开源的提出:Linux的千奇百怪的版本

  • 目前世界上流行的电脑系统:
  • Windows- Bill Gates (比尔·盖茨)
  • GNU/Linux-Linus Benedict Torvalds(林納斯·托瓦茲)-开源
  • Unix(Linux的爸爸)- 湯普遜和里奇合-给政府机关、公司等机构付费使用
  • Linux发行版本:Ubuntu Centos Red Hat Kali ……

0.2 开源的含义

  • 公开、分享、共同进步
  • 开源不一定免费

0.3 Linux的用途,各类发行版本

  • Linux主要运用在服务器上
  • Linux严格来说是单指操作系统的内核,因操作系统中包含了许多用户图形接口和其他实用工具
    只要遵循GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布
    Linux衍生:
  • Debian—Ubuntu,Deepin,Raspberry Pi OS,Knopix
    Fedora—RedHat,Centos,Moblin
    OpenSUSE—GeckoLinux,openSUSE EcoLab Spin

1.1 Vmware虚拟机

安装系统的方式

  • 实体机

  • 双系统

  • 虚拟机

1.2 VMware 16

  • 软件版本,大多数人追求新版本,企业里更多需要的是稳定,我们应该根据企业标准去学习,企业要什么我们学什么

1.3 关于从15更新到16的说法

  • Vmware15不支持Ubuntu20.04

    更新版本并不会影响虚拟机的还原

2.1 先尝试Ubuntu

详见:Linux(Ubuntu)零基础体验教学

PS:查看软件安装过执行内容,有助于学习

2.2 VMware Tools

  • 配置Ubuntu镜像源
  • VMware Tools安装
1
2
3
4
tar zxvf VMwareTools-10.3.22-15902021.tar.gz \
cd vmware-tools-distrib/
ls
sudu ./vmware-install.pl

2.3 Ubuntu 20.04设置

详见2.1视频链接

2.4 Linux其他发行版本的安装指导

  • 商业发行版
  • 社区发行版

2.5 下载指导

  • 从官网下载

3.1 Linux究竟需要我们学习什么?——Linux四大组成部分

Linux入门不是学“Linux”,先体验各发行版Linux,比较和其他系统的不同和相同点,Linux究竟学习的是Shell

Linux操作系统四个部分

  • Linux Kernel 内核
  • GNU(“GNU’s Not Unix!”)工具
  • GUI Desktop环境
  • Application 应用
  • PS:IT术语,它并不是遵循通常的英语音标,而是专业术语

3.2 Linux是命令还是图形界面?——GUI 是什么? 那GNU是什么东西?GNU/Linux 和Linux有什么区别?

Linux内核基于

  • GUI-界面

  • GNU-命令、系统工具

3.3 Linux内核组成部分

Linux Kernel

  • 1.硬件设备的管理
  • 2.软件程序(系统)、操作软件
  • 3.系统内存
  • 4.文件管理

3.4 文件系统

文件系统就是读、写标准

  • Linux中分区概念ext ext2 ext3 ext4
  • Windows 磁盘文件管理概念FAT32 NTFS exFAT

3.5 GNU核心: coreutils and shell

GNU组织
Unix上具有的一些软件,Linux内核本身没有,所以GNU他们模仿Unix,为Linux写了一些必要的软件

GNU核心Coreutils
指原本在Unix上的一些命令和工具,被移植到了Linux上,供Linux使用的一套工具、coreutilities软件包,包括:

  • 用来处理文件的工具
  • 用来操作文本的工具
  • 用来管理进程的工具
  • GNU核心Shell
  • 提供给用户使用的软件,用户拿它使用电脑,实现交互

  • 命令行壳层提供一个命令行界面(CLI)

  • 图像壳层提供一个图形用户界面(GUI)

3.6 Shell:CLI和GUI,命令和界面

Shell类型:bash,zsh,korn,tcsh,oh-my-zsh

3.7 GUI Desktop

Xwindows,KDE,GNOME,Unity
结束语:经验介绍
重点在于Shell
画思维图总结Linux操作系统关系

4.1 CLI准备

  • CLI相关设置,选择Preferences
  • Theme Variant 主题变换
    Open new terminals in 打开一个新终端的方式,Tab代表在同一窗口下创建新终端,Window代表开一个新窗口打开新终端
    New tab position 新终端位置,默认为上一次位置
  • 快捷方式设置,Ctrl+Alt+T 打开新终端

4.2 CLI Terminal

1
yeats@yeats-virtual-machine:~$
  • 用户名@机器名:当前所在目录 $表示等待用户输入
  • ~表示用户home目录
  • /home是存放所有用户文件的根目录

Settings中About可以查看机器名与相关信息

4.3 搞定Linux命令参数,得心应手使用各类命令——授之于渔 先拿ls开张

  • ls命令 用来显示目标列表,在Linux中是使用率较高的命令
  • ls -l 的缩写就是 ll ,列出当前目录可见文件详细信息,输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte)
  • man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息

推荐:Linux命令搜索

Linux命令搜索

4.4 Linux根目录,它们和Windows有什么区别

  • Windows 盘符,文件目录 \反斜线
  • Linux一切皆文件,文件目录 / 斜线

4.5 Linux根目录解析,fhs权威论文,搞定所有的发行版本文件夹分布

  • / linux根目录
  • /bin 二进制目录 GUN工具 命令
  • /cdrom 光盘
  • /etc 系统配置文件
  • /home 用户主目录
  • /lib 库目录 存放库文件
  • /lost+found 当系统发生错误时,将一些遗失的片段放置在这个目录下
  • /mnt 挂载(外在的设备和电脑进行连接)目录
  • /proc 伪文件系统
  • /run 运行目录
  • /snap 包管理,软件包安装管理方式
  • /tmp 临时目录
  • /var 可变目录
  • /boot 启动目录
  • /dev 设备目录
  • /media 媒体目录
  • /opt 可选目录
  • /root root用户的主目录 管理员
  • /sbin 系统二进制目录,GNU高级管理员使用的命令或工具
  • /srv 服务目录
  • /usr 用户二进制目录,GNU工具
  • 详见:FHS文件系统层级标准

FHS文件系统层级标准

4.6 cd命令

  • cd 进入用户主目录
  • cd.. 切换到上一层
  • cd – 返回到上一次的工作目录。

4.7 Ctrl + C? 拉到吧,在Linux上可不是复制

  • Ctrl+c( kill foreground process ) 发送SIGINT信号给前台进程组中的所有进程,强制终止程序的执行
  • Ctrl+l 清屏

4.8 绝对路径

  • 全路径 D:\Study\Frank_FuckPPT\Linux

4.9 相对路径

  • 不全路径 \Frank_FuckPPT\Linux

4.10 Linux上的路径与Windows上的路径

  • gedit /Doucument/doc/1.txt 操作根目录 绝对路径
  • gedit ~/Document/doc/1.txt 当前目录 相对路径
  • gedit ./Document/doc/1.txt 当前目录 相对路径
  • gedit Document/doc/1.txt 当前目录 相对路径

4.11 如何练习?经验课

  • 单点符号.当前文件
  • 双点符号..当前目录的父目录

4.12 ls进阶用法:文件夹下各种匹配过滤符号

  • *号替代多个符号
  • 号替代一个符号
  • -a,,--all 列出目录中所有文件,包括以“.”开头的文件
  • -l, --format=long,--format=verbose除每个文件名外,增加显示文件类型、权限、硬链接数等信息
  • -F,--classify, --file-type在每个文件名后附上一个字符以说明该文件的类型

4.13 touch命令

touch命令 两个功能

  • 一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式)
  • 二是用来创建新的空文件

4.14 cp命令

  • cp命令 将源文件或目录复制到目标文件或目录中
  • 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项
  • 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录
  • cp 你想复制的文件? 你想复制到哪?
  • -i覆盖既有文件之前先询问用户
  • -R/r递归处理,将指定目录下的所有文件与子目录一并处理

4.15 cp递归练习技巧

pwd 显示当前工作目录

1
cp -R ./*.java ~/Documents/temp/

4.16 Linux终端光标移动技巧

  • Tab自动补全
  • Ctrl + E 跳到行尾
  • Ctrl + B 光标向左移动
  • Ctrl + H 删除光标前一个字符 相当于退格
  • Ctrl + T 把光标前一个字符往后移动
  • Ctrl + R 搜索之前用过的命令
  • Ctrl + W 删除光标前一个单词
  • Ctrl + U 删掉光标前面的内容
  • Ctrl + K 删掉光标后面的内容

4.17 lnk链接文件的介绍

  • .lnk快捷方式

  • Linux链接文件

  • 1.符号链接(软链接)

    指快捷方式 原来的文件/文件夹必须存在

  • 2.硬链接

    指副本 原来的文件/文件夹必须存在

4.18 符号链接和硬链接

  • ln命令 用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用”-s”选项
  • ln 原文件名 链接的文件名
  • ls -l 查看
  • 软链接:有指向,是一个单独的文件,不同介质
  • 硬链接:无指向,同一介质
  • 软链接复制的是链接文件

4.19 注意事项

  • 符号链接Symbolic links
  • 软链接 Soft links

4.20 mv命令

  • mv命令 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中
  • 做重命名,mv 重命名谁 命名成什么

4.20 移动和骚操作

  • 做移动,mv 移动的文件 移动到的目录
  • 输入完之后,cd !$
  • !$是列出并执行你的命令历史里面最近的一条记录

4.21 rm——最佳年度删库跑路

  • sudo rm -rf /* 该命令极度危险
  • rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变
  • rm -i 有提示
  • rm -i -rf 无提示
  • 注意: linux没有回收站

4.22 创建文件夹以及删除文件夹

  • mkdir 用来创建目录
  • rmdir 用来删除空目录

4.23 文件类型

  • file用来探测给定文件的类型
  • Windows 文本是txt
  • linux 文本是text

4.24 cat ,more ,less

  • cat 连接多个文件并打印到标准输出,适用于短文本
  • -n, --number 对所有行编号,从1开始编号
  • more 显示文件内容,每次显示一,以全屏方式显示
  • b上一页 space 下一页 q退出
  • less分屏上下翻页浏览文件内容
  • less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。
  • less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键
  • 浏览文件中输入 / 用于搜索

4.25 tail 和 head命令

  • tail 在屏幕上显示指定文件的末尾若干行

    1
    tail -n 2 demo.c
  • head显示文件的开头部分

    1
    head -n 2 demo.c

5.1 任务管理器

  • 进程、性能、用户、服务
  • 服务:监测用户行为,为用户服务

5.2 ps和top命令

  • top 可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具
  • ps (process status) linux最复杂的命令之一,是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的
  • ps axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率
  • ps -aux | grep named # 查看named进程详细信息

5.3 kill命令

配合ps -aux | grep named # 查看named进程详细信息
kill pid 杀死进程

5.4 挂载的含义

详见:linux挂载的作用(https://blog.csdn.net/qq_35583154/article/details/86569903)

插入新硬盘,分了新磁盘区sdb1,但它现在还不属于/, 把新硬盘的区sdb1挂载到工作目录的/Share/文件夹下,之后访问这个/Share/文件夹就相当于访问这个硬盘的sdb1分区了,对/Share/的任何操作,都相当于对sdb1里文件的操作

5.5 mount

  • mount 用于挂载Linux系统外的文件
  • /mnt 为自动挂载点
  • sudo fdisk -l 查看硬盘及分区信息
  • sudo mount /dev/sdc1 /mnt
  • sudo umount /mnt
  • 自动挂载的目录不能卸载

5.5 挂载的意义——尝试使用U盘?自动播放黑客恶意?

  • 企业里不自动挂载,防止恶意播放脚本auto病毒

5.6 安卓设备连接挂载

  • 安卓链接协议(SMB)挂载路径 /run/suer/1000/gvfs

5.7 df和du

  • df 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息
  • h--human-readable:以可读性较高的方式来显示信息
  • du 也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的

5.8 sort命令

  • sort 对文本文件中所有行进行排序
  • 默认对每一行第一个字符排序,并展示出来,并不会改变原来的文件
  • -n--numeric-sort 根据数字排序
  • -M--month-sort 按照非月份、一月、十二月的顺序排序
  • -r--reverse 将结果倒序排列

5.9 grep基础认识、搜索文件

  • grep (global search regular expression(RE) and print out the

    line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

  • grep 543 ~/Templates/1.txt

5.10 打包、压缩、归档、解压缩 它们究竟区别在哪?

  • tar 打包、压缩
  • tar -cvf 1.tar 1.txt 仅打包,不压缩
  • tar -zcvf 1.tar.gz 1.txt 打包后,以 gzip 压缩
  • tar -zxvf /opt/soft/test/1.tar.gz 将tar包解压缩

6.1 父子shell的概念

  • bash
  • ps-f
  • ps –forest

6.2 分号在命令里有什么作用

  • 命令之间带分号 ; 依次执行
  • 创建一个子shell去执行

6.3 sleep和jobs

  • sleep 将目前动作延迟一段时间 ,后面可接 s 为秒,m 为 分钟,h 为小时,d 为日数

    挂在后台,如果要干掉,则用kill命令

  • jobs 显示作业的状态,-l 在作业信息中额外的列出PID

6.4 后台

  • 后台执行 tar -zxvf ……;&

6.5 coproc协程

  • Liunx协程处理命令。协程可以同时做两件事。在后台生成一个子shell,并在子shell中执行命令
  • coproc sleep 10
  • coproc frank_av{ sleep 10; sleep 300;}
  • 一定要分号结尾,大括号内空格

6.6 外部命令和内建命令

  • Shell执行的命令可以分为内建命令(built-in)和外部命令(external) 前者是构建在shell内部
  • 后者是一个独立的文件(可以是二进制文件,也可以是一个脚本) 内建命令由当前shell本身来执行,例如echo, cd等等
  • 外部命令的执行shell进程会fork一个子进程,父进程随后挂起,然后在子进程中exec加载外部文件,子进程返回后,父进程才继续执行

6.7 alias别名

  • alias 定义或显示别名。
  • type 显示指定命令的类型。
  • alias li=’ls -li’
  • 但是关闭当前shell就不能用了

7.1 什么是环境变量?彻底搞清楚究竟什么是环境变量!!!!!

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等
  • 文件夹写入的环境变量,意味则可以在任何位置访问该文件夹,相当于告诉系统这个目录在哪里

7.2 全局环境变量和局部环境变量

  • windows:系统变量与用户变量
  • linux: 全局环境变量和局部环境变量
  • 全局环境变量printenv
  • printenv USER
  • echo $USER
  • cd $HOME

7.3 用户和局部变量的定义

  • 局部变量只能在当前shell执行,子shell或者退出后就不能用了
  • 注意 定义局部变量不要大写
  • 全局变量用大写,下划线命名法

7.4 定义全局变量

  • export 为shell变量或函数设置导出属性。
  • 可以子shell里执行,但关闭后仍失效

7.5 默认的环境变量

  • set

7.6 为啥要用环境变量

  • 配置开发环境需要使用
  • 临时环境变量
  • PATH=$PATH:/home/yeats/Templates/

7.7 永久配置环境变量?

  • 启动文件:开机的时候默认执行的环境变量
  • bash shell
  • 1登录shell
  • 2非登录就打开shell

  • 3运行脚本非交互shell

  • cat /etc/profile

  • ~/.bashrc
  • ~/.bash_profile
  • ~/.profile
  • ~/.bash_login
  • cat bashrc
  • 加入全局环境变量(需学习vim)

8.1 PMS系统和软件安装的介绍

  • PMS Package Management System
  • 解决工具依赖问题
  • apt install
  • apt-get install
  • apt-cache
  • aptitude(已淘汰)

8.2 安装、更新、卸载

  • apt -h
  • 更新 sudo apt update
  • 升级 sudo apt upgrade
  • 卸载 sudo apt remove oneko

8.3 其他发行版本?

8.4 安装第三方软件案例:例如github开源软件的指导

9.1 用户权限的含义和作用

  • 用户与权限
  • 不可能让所有人有所有的权限-不安全
  • 避免被入侵
  • 用户ID UID
  • 系统用户UID<500
  • cat /etc/passwd
  • sudo cat /etc/shadow

9.2 创建、删除、更改用户

  • 创建sudo useradd user1
  • 删除sudo userdel user1
  • 更改密码sudo passwd user1
  • chage 修改帐号和密码的有效期限

9.3 group

  • linux组groups

    目的 :共享资源的权限

  • tail /etc/group

  • ubuntu不允许把所有用户纳入一个组,而是每个用户都有一个单独的组
  • sudo groupadd groupfrank
  • sudo groupdel groupfrank

9.4 文件、文件夹权限

rwx 文件所有者(Owner)组创始人的权限
r-x 用户组(Group)组下属成员权限
r-x 其它用户(Other Users)其它组成员权限

详见:Linux chmod命令(Linux chmod 命令 | 菜鸟教程 (runoob.com)

9.5 chmod命令

  • usermod命令 用于修改用户的基本信息。
  • usermod 命令不允许你改变正在线上的使用者帐号名称。
  • usermod 命令用来改变user id,必须确认这名user没在电脑上执行任何程序

附上:vi/vim键盘图

vi/vim键盘图

10.1 编辑器简单介绍:vim编辑器之神; emac神之编辑器

  • emacs-神之编辑器
  • vim-编辑器之神
  • Vim是从 vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器
  • vi 编辑器通常被简称为 vi,而 vi 又是 visual editor 的简称 。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的
  • Vim 是 vi 的加强版,比 vi 更容易使用。vi 的命令几乎全部都可以在 vim 上

10.2 vim的简单使用方式

  • 安装vim
  • sudo apt install vim

vim工作模式,国外一般认为两种模式

  • 普通模式(命令操作模式):操作文件

  • 插入模式:编辑

  • 编辑模式到普通模式:ESC

国内一般认为三种模式

  • 一般命令模式:简称一般模式,也是最先进入的工作模式,输入vi +文件名可直接进入一般命令模式,在此模式下可进行文本内容的查看、复制、删除、替换等功 能。当不能输入相关文本内容

  • 编辑模式:在一般模式下,输入 i 或 o 或 a 进入编辑模式,在此模式下可输入文本内 容。当输入 i 时,工作界面如图所示,只有此时状态才可以输入文件内容。输 入完成后,可单击 ESC 键退出编辑状态,进入一般模式

  • 命令行模式:在一般模式下,输入:或/或?进入命令行模式,在此模式下可输入相关命令当输入:wq 此时命令表示保存退出命令,单击回车键,自动保存文件,并退 出 vi 编辑器或者单击 ESC 键,重新返回一般模式

三种工作模式关系如图所示

VIM三种工作模式关系

vim 编辑器的退出,一般分三种情况

  • :q 表示不保存退出
  • :wq 保存退出
  • :q!强制退出,此时也不保存文件

10.3 移动光标

  • 上:k
  • 下:j
  • 左:h
  • 右:l
  • 下一行:b
  • 上一行:w
  • 查找上一处字符:N
  • 查找下一处字符:n

10.4 翻页

  • 上翻页(BACKWARD):ctrl+B
  • 下翻页(FORWARD):ctrl+F
  • 上滚:ctrl+E
  • 下滚:ctrl+Y
  • 移动到最后一行:G 或者shift+g
  • 移动到第一行:gg

10.5 不同方式编辑文本、跳跃单词操作技巧

  • i光标位置的前面插入
  • a 光标位置后面的插入
  • o 直接enter到下一行
  • x 删除光标所在字符
  • dd 删除整个一行
  • u 撤销
  • dw 移除当前所在光标往后到单词
  • b 跳跃单词首字母
  • e 跳跃单词最后
  • w 跳跃单词 先跳跃到单词首字母,然后跳跃到单词最后
  • shift+w ;shift+b大跳

10.6 跳跃行首行尾技巧

  • shift+6 或者0 跳跃到本行到开头
  • shift+4 跳跃到本行末尾

10.7 大括号跳跃函数段落技巧

  • {}跳跃大括号

10.8 vim复制剪切粘贴

  • p粘贴
  • yw复制一个单词
  • y$ 从当前开始往后复制到行末尾

10.9 Visual可视化模式

  • v 选择文本
  • V 选择行
  • v G 全选
  • ctrl+v矩阵选择
  • o切换文本首尾
  • vaw快速选择单词
  • vab包括括号
  • vaB包括大括号
  • va< 包括尖括号

10.10 视图模式其它技巧

  • v shift+<往左缩进
  • v shift+>往右缩进
  • shift+~或者shift+u shift+U大小写转换

10.11 查找和替换

  • 查找 /
  • 按n查找下一个
  • :s /const/let/g 一行const替换成let
  • :%s /const/let/g 所有const替换成let
  • set number 临时显示行号
  • :9,15s /const/let/g 9-15行const替换成let
  • :%s /const/let/gc 有提示的替换

10.12 vim的基础配置

  • touch .vimrc
  • vim .vimrc

将以下代码写入.vimrc中

1
2
3
4
5
6
set syntax=on
set tabstop=4
set softtabstop=4
set number
set enc=utf-8
set showmatch
  • source .vimrc