@Copyright: https://space.bilibili.com/19658621/, https://wangchujiang.com/linux-command/
Course links: https://www.bilibili.com/video/BV18U4y1W7av, full edition: https://www.yuque.com/frank-93a7b/fuck/raruzp
零:Linux的初步认识
1.系统的认识
系统 —— 操作系统
人机交互
2.Linux操作系统认识,以及开源的提出:Linux的千奇百怪的版本
- 系统:
- Windows —— Microsoft
- Linux —— Linus Torvalds 林纳斯-托瓦兹
- Unix(Linux的baba),纯C写的
- MacOS —— Apple
3.开源的含义
- 开放源代码(开源):我写的源代码公诸于世
- 开源不一定免费
- eg: RedHat —— 个人免费,企业收费(福特汽车,xx银行)
- Google Pixel -> XIAOMI OPPO VIVO HUAWEI
- Linux -> Ubuntu CentOS RedHat Kali
4.Linux的用途,各类发行版本
Linux —— 一种自由和开放源码的类 Unix 系统
Linux 严格来说单指操作系统的内核,没有图形界面。
如今 Linux 常用来指基于 Linux 的完整操作系统。
Linux -> Ubuntu CentOS RedHat Kali
- Ubuntu 面向个人用户
- CentOS 公司服务器使用
- RedHat 金融公司
- …… 公司定制 Unix 系统
大部分人使用的是 Linux 发行版,Linux 可以运行在个人 PC、服务器、嵌入式系统上。
Linux 发行版:
- Debian –> Ubuntu 、Linux Mint (相当于 XIAOMI –> Redmi)
- Fedora –> Red Hat Enterprise Linux、 CentOS
- openSUSE
一:VMware虚拟机的使用
1.VMware虚拟机
学习指路☛
- 1.虚拟、安全性 —— 与本机独立,虚拟化的一个系统
- 2.随意性 —— 可以把软件拖来拖去
- 3.快捷快照 —— 快速恢复到原来状态
3种选择:
- 实体机 硬件不支持 X
- 双系统 别折腾 X
- VM虚拟机
关于软件版本:
- 追求新? No,just 体验 企业 –> 稳定
2.VMware Workstation 16
https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
win10官方镜像网站
https://www.microsoft.com/zh-cn/software-download/windows10/
Ctrl + Alt 释放鼠标,回到真实机
3.关于从15更新到16的说法
建议:卸载15,再安装16,防止某些服务不支持。
自己操作:直接覆盖更新至 VMware 16,未出现问题。
二:发行版本安装演示
1.Ubuntu 20.04的安装
下载官方 .iso 镜像
在VMware Workstation 中新建虚拟机,选用已下载的 .iso 镜像文件,自定义相关配置如下
Ubuntu 64位 8G内存 2*2处理器 将虚拟磁盘存储为单个性能(可提升性能) 移除打印机 命名:Ubuntu2004x64
Ubuntu 安装设置
English Minimal Installtion(无多余软件) 默认格式化磁盘 选择位置:Xi'an 用户名:Lee 密码:123456 跳过Install更新过程。后续可以更新阿里镜像源后再update
2.VMware Tools
更新阿里镜像源:
打开第一个 Software… -> Ubuntu Software -> download from -> other: mirrors.aliyun.com -> 点击 close
更新系统:
打开第二个 Software -> update -> restart
安装 vmware tools:
将 vm.tar.gz 复制到 Desktop 打开 terminal 命令:ls 查找,发现.tar文件 命令:tar zxvf VM + Tab键 解压缩 命令:cd vmare-tools-dirstri 进入解压缩文件夹 命令:ls 查找,发现vmware-install.pl文件 命令:sudo ./vmware-install.pl 执行安装命令 输入密码 一路回车 安装成功,删除.tar文件
3.Ubuntu 20.04设置
Settings
自定义
4.其他发行版本的安装指导
- 某些 Linux 发行版(如 Kali)未在 VMware Workstation 中提供,可以找到其相关版本(Debian)。
- 多尝试,找异同。
5.下载指导
CentOS:https://www.centos.org/download/
Kali Linux: https://www.kali.org/downloads/
Ubuntu: https://ubuntu.com/#download
…… 自己找官网,download 即可
三:步入Linux的世界
1.Linux究竟需要我们学习什么?—— Linux四大组成部分
Linux 入门不是学 “Linux”
体验:比较与其他系统的异同点
Linux -> Shell
Linux 四大组成部分:
Linux Kernel 内核
GNU 工具
GNU(/ɡəˈnuː/)是一个自由的操作系统,其内容软件完全以 GPL 方式发布。这个操作系统是 GNU计划的主要目标,名称来自GNU’s Not Unix!的递归缩写,因为 GNU 的设计类似 Unix,但它不包含具著作权的 Unix 代码。
GNU 的创始人,理查德·马修·斯托曼,将 GNU 视为“达成社会目的技术方法”。
GUI Desktop 环境
Application 应用
2.Linux 是命令还是图形界面?—— GUI & GNU
Linux 真正的名字 —— GNU / Linux
Linux 操作系统包涵了 Linux 内核与其他自由软件项目中的GNU组件和软件,可以被称为 GNU/Linux。
GUI & GNU <– Linux 内核 <– 硬件(鼠标、键盘)
- GUI —— 图形界面
- GNU —— 命令窗口
3.Linux 内核组成部分
- 硬件设备 管理和使用
- 软件程序(系统) -> 操作进程
- 系统内存(可参考阅读《现代操作系统》)
- 文件管理 —— 增、删、改、查……
4.文件系统 —— 开车警告
文件系统:读、写的标准
eg:win10 — NTFS Linux — ext, ext2, ext3, ext4…
5.GNU 核心: coreutils and shell
GNU的来源:Unix上的一些软件,Linux内核本身没有,所以GNU模仿Unix,为Linux写了一些必要的软件。
供 Linux 使用的开发出来的这套工具:coreutils 软件包
- 用来处理文件的工具
- 用来操作文本的工具 eg:vim
- 用来管理进程的工具 eg:System Monitor
-
一般来说,Shell是指操作系统中提供访问内核所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的层面。
6.Shell:CLI 和 GUI
通常将 shell 分为两类:命令行与图形界面,即CLI 和 GUI
- 命令行壳层提供一个命令行界面(CLI,Command -Line Interface)
- 图形壳层提供一个图形用户界面(GUI,Graphical User Interface)
通常 Linux shell 指:CLI shell
- Bash—— 基础、默认 shell
- Zsh,Z shell —— 自2019年起,macOS 的默认Shell已从 Bash 改为 Zsh。
- Ash,A shell
7.GUI Desktop —— XW KDE GNOME Unity :探究 Linux 那些年的桌面
- GNU 计划 —> 开发 Desktop 版本(满足鼠标等外设的多样使用)
- X Windows —— 一种以位图方式显示的软件窗口系统,是下面这些的基础
- KDE —— 可看做一种桌面设计风格(有开始菜单,任务栏,最大最小化…)
- GNOME —— 面向目标:Linux
- Unity —— 用于 Ubuntu 的 GNOME
8.结束语:经验介绍
学了什么?
概念认知,熟悉了解 Linux 及其发展史
学习核心:Linux 内核 和 shell 命令
绘制思维导图,理清各概念关系(自由笔记,学会为重)
四:★Bash shell命令
1.CLI Terminal
F11 —— 全屏 terminal
自己调、看 Preference
Text 字体不要随便调,要使用等宽字体
认识
lee@lee-virtual-machine:~$ userName@deviceName: ~ 用户home目录 $ 等待用户输入
2.ls初使用
搞定Linux命令参数,得心应手使用各类命令 —— 授之以渔 先拿ls开张
ls
ls - list directory contents 展示当前目录下的所有目录
ls -a -l … 可以多选项,但需要空格间隔开;或直接 ls -al。
man ls
进入 User Commands, 并为你展示该命令的详细内容
ls -l -a(可用 ll 直接代替)
展示当前目录下的所有文件(包括隐藏文件) PS:隐藏文件以“.”开头
3.Linux 根目录
Windows 分盘,盘符:D: E: F: …
盘符: 路径 eg:E:\DevTools\IDEA\IntelliJ IDEA 2020.3.2\bin
Linux 一切皆文件
/home/lee/Documents/1.txt
所以 Linux 尽量不显示隐藏文件,防止误操作。
/ —— Linux 的根目录
4.Linux 根目录解析
目录解析:
/ —— 根目录
/bin —— GNU工具、ls等系统自带命令
/cdrom —— 光驱
/etc —— 系统配置文件目录
/home —— 主目录,显示所有用户目录
/lib —— 库目录
/lost+found —— 意外情况(如停电)中有文件存在这
/mnt —— 挂载目录(挂载:外在设备与主机连接)
proc —— 伪文件系统
/run —— 运行目录
/tmp —— 临时目录
/var —— 可变目录(eg:存放log日志文件)
/boot —— 启动目录
/dev —— 设备目录
/media —— 媒体目录
/opt —— 可选目录(第三方软件一般在这)
/root —— root用户(管理员)的主目录
/sbin —— 系统二进制目录,GNU高级管理员使用的命令工具
/srv —— 服务目录(本地服务)
/usr —— 用户二进制目录
FHS —— 文件系统层级标准
pathname.com/fhs(上面目录解析的升级、专业版)
F:\07.Linux\资料\fhs-2.3.pdf(本地文件所在地)
5.Linux 上的路径与Windows 上的路径
绝对路径:文件的完整路径
盘符:\文件夹\…\文件名.文件后缀名(Win) ~/文件夹/…/文件名.文件后缀名(Linux)
eg:G:\Game\Epic\Epic Games\Launcher\Engine\Binaries\Win64\EpicGamesLauncher.exe
/home/lee/Documents/doc/1.txt
相对路径:相对于当前目录的路径
eg:G:\Game (.)\Epic\Epic Games\Launcher\Engine\Binaries\Win64\EpicGamesLauncher.exe
单点符与双点符
单点符. 当前目录 双点符.. 当前目录的父目录
注意区分
lee@lee-virtual-machine:~$ gedit (./)Documents/doc/1.txt # 不加/表示相对路径 lee@lee-virtual-machine:~$ gedit /Documents/doc/1.txt # 加/表示绝对路径 # 等效路径 lee@lee-virtual-machine:~$ gedit Documents/doc/1.txt lee@lee-virtual-machine:~$ gedit ./Documents/doc/1.txt lee@lee-virtual-machine:~$ gedit ~/Documents/doc/1.txt
6.cd命令
cd
— change directory
切换用户当前工作目录
cd [-L|[-P [-e]]] [dir]
主要用途
- 切换工作目录至
dir
。其中dir
的表示法可以是绝对路径或相对路径。 - 若参数
dir
省略,则默认为使用者的shell变量HOME
。 - 如果
dir
指定为~
时表示为使用者的shell变量HOME
,.
表示当前目录,..
表示当前目录的上一级目录。 - 环境变量
CDPATH
是由冒号分割的一到多个目录,你可以将常去的目录的上一级加入到CDPATH
以便方便访问它们;如果dir
以/
开头那么CDPATH
不会被使用。 - 当
shopt
选项cdable_vars
打开时,如果dir
在CDPATH
及当前目录下均不存在,那么会把它当作变量,读取它的值作为要进入的目录。
选项
-L (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。
-P 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
- 当前工作目录将被切换到环境变量OLDPWD所表示的目录,也就是前一个工作目录。
例子
cd # 进入用户主目录;
cd / # 进入根目录
cd ~ # 进入用户主目录;
cd .. # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../.. # 返回上两级目录;
cd !$ # 把上个命令的参数作为cd参数使用。
cd -
# 命令会首先显示要切换到的目标目录,然后再进入。
cd ${OLDPWD}
# 命令会直接切换到上一个工作目录。
7.Ctrl + C
Ctrl + C
—— 强制终止当前命令显示状态:
^C
如何复制、粘贴?
Ctrl + Shift + C Ctrl + Shift + V
Linux 终端内无法撤销”Ctrl+Z”
8.ls进阶用法:文件夹下各种匹配过滤符号
ls 命令补充
# ls + 路径 ls . # 查找当前目录 ls ~ # 查找用户目录 ls / # 查找根目录 ls ./Documents/doc # 查找路径对应的目录
文件夹下各种匹配过滤符号
直接上例子
# 文件扩展通配符 lee@lee-virtual-machine:~$ ls -l fhs-2.3_*.pdf # '*'用于多个字符 lee@lee-virtual-machine:~$ ls -l fhs-2.3_copy?.pdf # '?'用于单个字符 lee@lee-virtual-machine:~$ ls -l *.pdf # 查找指定文件类型的文件 # 元字符通配符 lee@lee-virtual-machine:~$ ls -l f[a-x]ck.txt # '[]'指定该字符范围
自己找的:https://cloud.tencent.com/developer/article/1114732?from=information.detail.linux
ls 命令详解
ls
显示目录内容列表
补充说明
ls命令 就是list的缩写,用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
语法
ls [选项] [文件名...] [-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w cols] [-T cols] [-I pattern] [--full-time] [--format={long,verbose,commas,across,vertical,single-col‐umn}] [--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}] [--color[={none,auto,always}]] [--help] [--version] [--]
选项
-C # 多列输出,纵向排序。 -F # 每个目录名加 "/" 后缀,每个 FIFO 名加 "|" 后缀, 每个可运行名加“ * ”后缀。 -R # 递归列出遇到的子目录。 -a # 列出所有文件,包括以 "." 开头的隐含文件。 -d # 将目录名像其它文件一样列出,而不是列出它们的内容。 -r # 逆序排列。 -t # 按时间信息排序。 -a, --all # 列出目录中所有文件,包括以“.”开头的文件。 -b, --escape # 把文件名中不可输出的字符用反斜杠加字符编号(就像在 C 语言里一样)的形式列出。 -d, --directory # 将目录名像其它文件一样列出,而不是列出它们的内容。 -l, --format=long, --format=verbose # 输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte) # 、及时间信息(如未指明是其它时间即指修改时间)。对于6个月以上的文件或超出未来 # 1小时的文件,时间信息中的时分将被年代取代。 # 每个目录列出前,有一行“总块数”显示目录下全部文件所占的磁盘空间。块默认是1024字节; # 如果设置了 POSIXLY_CORRECT 的环境变量,除非用“-k”选项,则默认块大小是 512 字节。 # 每一个硬链接都计入总块数(因此可能重复计数),这无 疑是个缺点。
实例
$ ls # 仅列出当前目录可见文件 $ ls -l # 列出当前目录可见文件详细信息 $ ls -hl # 列出详细信息并以可读大小显示文件大小 $ ls -al # 列出所有文件(包括隐藏)的详细信息 $ ls --human-readable --size -1 -S --classify # 按文件大小排序 $ du -sh * | sort -h # 按文件大小排序(同上)
显示当前目录下包括影藏文件在内的所有文件列表
[root@localhost ~]# ls -a . anaconda-ks.cfg .bash_logout .bashrc install.log .mysql_history satools .tcshrc .vimrc .. .bash_history .bash_profile .cshrc install.log.syslog .rnd .ssh .viminfo
9.touch命令
组合命令
lee@fuck:~/Documents$ cd ../doc $$ ls -alF
&&: 进行命令的组合
touch 命令
- 更新文件写入时间
- 创建一个空文件
lee@fuck:~/Documents$ touch 2.txt
touch 命令详解
touch
创建新的空文件
补充说明
touch命令 有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
选项
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
10.cp命令
cp 命令
cp 源文件 目标文件
使用源文件覆盖目标文件,没有目标文件则创建并覆盖
因此,先询问用户是否overwrite:添加参数
-i
,即cp -i 源文件 目标文件
,此时需要回答y/n
lee@fuck:~/Documents$ cp 1.txt 2.txt lee@fuck:~/Documents$ cp -i 1.txt 2.txt
复制目录及文件
lee@fuck:~/Documents$ cp ~/Documents/doc/* ~/Downloads # 仅复制指定目录下的所有文件 lee@fuck:~/Documents$ cp -r ~/Documents/doc ~/Downloads # 递归处理指定目录下的所有文件与子目录 lee@fuck:~/Documents$ cp 1.txt ~/Downloads lee@fuck:~/Documents$ cp -i 1.txt ../ # 使用相对路径,复制到上一层目录 lee@fuck:~/Documents$ cp ../pdf/* . # .代表当前目录
练习
注:
cd -
可以切换当刚才的目录
cp 命令详解
cp
将源文件或目录复制到目标文件或目录中
补充说明
cp命令 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法
cp(选项)(参数)
选项
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
参数
- 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用
-R
选项; - 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
11.Linux终端光标移动技巧
Tab
键补全路径名Ctrl
键加左右键,便于跳转单词(下划线命名法的用处)Ctrl + L
清屏,实际是将terminal中已有内容全部上移Ctrl + A
跳到命令头部,Ctrl + E
跳到命令尾部Ctrl + H
将当前光标的前一个字母删除,Ctrl + T
将当前光标的前一个字母向后移(有空格不影响,跳过)没有左右方向键(买了HHKB键盘无刻版),可以用
Ctrl + B
和Ctrl + F
代替(装13)上下键 ——
Ctrl + P
Ctrl + U
Ctrl + U
删除当前光标前的内容,Ctrl + K
删除当前光标的后续命令Ctrl + R
搜索已使用过的命令
12.lnk链接文件
其他学习参考:https://blog.csdn.net/stupid56862/article/details/90785420
引入:windows中的快捷方式(.lnk)
Linux?
符号链接(软链接), symbolic link —— 快捷方式
源文件(夹)必须存在;软链接实际是一种”指向“作用,是一个独立的新文件
硬链接, hard link
源文件(夹)必须存在;以文件副本的形式存在,但不占用实际空间(Linux中)
与windows区分:win中副本就是一个新的文件,而Linux中副本(硬链接)与源文件关联
ln 命令简介
ln
用来为文件创建链接
语法
ln [选项]... [-T] 目标 链接名 (第一种格式)
或:ln [选项]... 目标 (第二种格式)
或:ln [选项]... 目标... 目录 (第三种格式)
或:ln [选项]... -t 目录 目标... (第四种格式)
选项
--backup[=CONTROL] 为每个已存在的目标文件创建备份文件
-b 类似--backup,但不接受任何参数
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive 覆盖既有文件之前先询问用户;
-L, --logical 取消引用作为符号链接的目标
-n, --no-dereference 把符号链接的目的目录视为一般文件;
-P, --physical 直接将硬链接到符号链接
-r, --relative 创建相对于链接位置的符号链接
-s, --symbolic 对源文件建立符号链接,而非硬链接;
-S, --suffix=SUFFIX 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它;
-t, --target-directory=DIRECTORY 指定要在其中创建链接的DIRECTORY
-T, --no-target-directory 将“LINK_NAME”视为常规文件
-v, --verbose 打印每个链接文件的名称
--help 显示此帮助信息并退出
--version 显示版本信息并退出
实战
思考:cp 一个软链接文件,会如何? —— 相当于把快捷方式发送给别人,没用
13.mv命令
mv
—— move(rename) filesmv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
-
mv 文件名 新的文件名
mv 文件 目标目录
-
骚操作:
注:
cd !$
表示进入上一个命令的最后一个路径
14.rm——最佳年度删库跑路
警告:非常危险,直接进局
sudo rm -rf /*
直接删除,无法恢复
rm
—— remove files提醒用户,使用
rm -i 文件(目录)
rm
用于删除给定的文件和目录
语法
rm (选项)(参数)
选项
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录; -f:强制删除文件或目录; -i:删除已有文件或目录之前先询问用户; -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理; --preserve-root:不对根目录进行递归操作; -v:显示指令的详细执行过程。
参数
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上
-r
或者-R
选项。
15.文件(夹)
创建及删除
创建文件:
touch
创建文件夹:
mkdir
(make directory)eg:
创建多级目录:
mkdir -p 目录名
eg:
lee@fuck:~/Project/java$ mkdir -p js/src/util
删除目录:
-
rmdir
只能删除空目录,不好用 -
rm
注意加-i
!
-
文件类型
查看文件类型:
file 1.txt
file
用来探测给定文件的类型
补充说明
file命令 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
选项
-b:列出辨识结果时,不显示文件名称; -c:详细显示指令执行过程,便于排错或分析程序执行的情形; -f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称; -L:直接显示符号连接所指向的文件类别; -m<魔法数字文件>:指定魔法数字文件; -v:显示版本信息; -z:尝试去解读压缩文件的内容。
参数
文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
cat, more, less
这三个命令实际上并不常用,只能查看文件(相当于win中的用记事本查看内容)
cat
—— 查看文件内容(无滚轮则很难翻页,适用短文件)cat
连接多个文件并打印到标准输出。
主要用途
- 显示文件内容,如果没有文件或文件为
-
则读取标准输入。 - 将多个文件的内容进行连接并打印到标准输出。
- 显示文件内容中的不可见字符(控制字符、换行符、制表符等)。
选项
长选项与短选项等价 -A, --show-all 等价于"-vET"组合选项。 -b, --number-nonblank 只对非空行编号,从1开始编号,覆盖"-n"选项。 -e 等价于"-vE"组合选项。 -E, --show-ends 在每行的结尾显示'$'字符。 -n, --number 对所有行编号,从1开始编号。 -s, --squeeze-blank 压缩连续的空行到一行。 -t 等价于"-vT"组合选项。 -T, --show-tabs 使用"^I"表示TAB(制表符)。 -u POSIX兼容性选项,无意义。 -v, --show-nonprinting 使用"^"和"M-"符号显示控制字符,除了LFD(line feed,即换行符'\n')和TAB(制表符)。 --help 显示帮助信息并退出。 --version 显示版本信息并退出。
- 显示文件内容,如果没有文件或文件为
more
—— 显示文件内容,每次一屏(也不常用)more
显示文件内容,每次显示一屏
补充说明
more命令 是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:
- 按
Space
键:显示文本的下一屏内容。 - 按
Enter
键:只显示文本的下一行内容。 - 按斜线符
|
:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。 - 按H键:显示帮助屏,该屏上有相关的帮助信息。
- 按B键:显示上一屏内容。
- 按Q键:退出more命令。
- 按
less
—— (只查看,也不常用23333)
tail 和 head
对于某些人查看log文件可能有用
tail
—— 在屏幕上显示指定文件的末尾若干行默认显示文件末尾10行,
-n
可以指定末尾若干行head
—— 显示文件的开头部分默认显示文件前10行,
-n
可以指定前若干行
章节结束语和经验:基础命令,必须掌握,勤加练习
五:Shell +
主要内容:Linux中的任务管理器
GUI位置:menu -> Utilities -> System Monitor
1.ps和top命令
ps 命令
ps — process status
报告当前系统的进程状态
常用实例:
ps axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率 ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序 ps aux | sort -nk 3 # 按 CPU 资源的使用量对进程进行排序 ps -A # 显示所有进程信息 ps -u root # 显示指定用户信息 ps -efL # 查看线程数 ps -e -o "%C : %p :%z : %a"|sort -k5 -nr # 查看进程并按内存使用大小排列 ps -ef # 显示所有进程信息,连同命令行 ps -ef | grep ssh # ps 与grep 常用组合用法,查找特定进程 ps -C nginx # 通过名字或命令搜索进程 ps aux --sort=-pcpu,+pmem # CPU或者内存进行排序,-降序,+升序 ps -f --forest -C nginx # 用树的风格显示进程的层次关系 ps -o pid,uname,comm -C nginx # 显示一个父进程的子进程 ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm # 重定义标签 ps -e -o pid,comm,etime # 显示进程运行的时间 ps -aux | grep named # 查看named进程详细信息 ps -o command -p 91730 | sed -n 2p # 通过进程id获取服务名称
top 命令
- 显示或管理执行中的程序
2.kill命令
杀死进程:
kill PID
kill 详解
kill
发送信号到进程。
内建命令
概要
kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... kill -l [sigspec]
注:pid:进程ID,jobspec:作业标识符
主要用途
- 发送信号到作业或进程(可以为多个)。
- 列出信号。
选项
-s sig 信号名称。 -n sig 信号名称对应的数字。 -l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。 -L 等价于-l选项。
实例
[user2@pc] kill -l 9 KILL # 列出所有信号名称: [user2@pc] kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX # 下面是常用的信号。 # 只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 HUP 1 终端挂断 INT 2 中断(同 Ctrl + C) QUIT 3 退出(同 Ctrl + \) KILL 9 强制终止 TERM 15 终止 CONT 18 继续(与STOP相反,fg/bg命令) STOP 19 暂停(同 Ctrl + Z) # 以下发送KILL信号的形式等价。当然还有更多的等价形式,在此不一一列举了。 [user2@pc] kill -s SIGKILL PID [user2@pc] kill -s KILL PID [user2@pc] kill -n 9 PID [user2@pc] kill -9 PID
注意
-
bash
的作业控制命令包括bg fg kill wait disown suspend
。 - 该命令是bash内建命令,相关的帮助信息请查看
help
命令。
外部命令
概要
kill [-signal|-s signal|-p] [-q value] [-a] [--] pid|name... kill -l [number] | -L
选项
-s, --signal signal 要发送的信号,可能是信号名称或信号对应的数字。 -l, --list [number] 打印信号名称或转换给定数字到信号名称。信号名称可参考文件(/usr/include/linux/signal.h)。 -L, --table 和'-l'选项类似,但是输出信号名称以及信号对应的数字。 -a, --all 不要限制“命令名到pid”的转换为具有与当前进程相同的UID的进程。 -p, --pid 打印目标进程的PID而不发送信号。
实例
> sleep 20 & # 列出对应的PID。 > kill -p sleep 23021
注意
- 该命令是
GNU coreutils
包中的命令,相关的帮助信息请查看man -s 1 kill
或info coreutils 'kill invocation'
。 - 启动或关闭内建命令请查看
enable
命令,关于同名优先级的问题请查看builtin
命令的例子部分的相关讨论。 - 与
kill
命令类似的有xkill
,pkill
,killall
等,用于不同的目的和场景。
3.挂载
挂载的含义
- 挂载 —— U盘等硬件介质连接到主机上,生成一个虚拟硬盘的过程
- Linux中U盘的挂载目录:
/media/lee/USB/
挂载的意义
- 如果没有自动挂载,需要手动为硬件介质选择挂载点
- 有的目录没有写入权限(如
/mnt
),故需要更改挂载点 - 避免自动播放(u盘自动运行病毒)
选听——安卓设备挂载
通过实验,挂载的实质是:将一个分区挂载到一个目录上
4.mount命令
mount
:用于挂载Linux系统外的文件mount /dev/sdc1 /mnt
umount
:用于卸载已经加载的文件系统umount /mnt umount /media/lee/USB
注:
/mnt
是一个通用挂载点,但这里不允许写入
5.df和du
df
用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。
选项
-a或--all:包含全部的文件系统; --block-size=<区块大小>:以指定的区块大小来显示区块数目; -h或--human-readable:以可读性较高的方式来显示信息; -H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes; -i或--inodes:显示inode的信息; -k或--kilobytes:指定区块大小为1024字节; -l或--local:仅显示本地端的文件系统; -m或--megabytes:指定区块大小为1048576字节; -P或--portability:使用POSIX的输出格式; -t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息; -T或--print-type:显示文件系统的类型; -x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
du
显示每个文件和目录的磁盘使用空间
选项
-a, --all 显示目录中个别文件的大小。 -B, --block-size=大小 使用指定字节数的块 -b, --bytes 显示目录或文件大小时,以byte为单位。 -c, --total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 -D, --dereference-args 显示指定符号链接的源文件大小。 -H, --si 与-h参数相同,但是K,M,G是以1000为换算单位。 -h, --human-readable 以K,M,G为单位,提高信息的可读性。 -k, --kilobytes 以KB(1024bytes)为单位输出。 -l, --count-links 重复计算硬件链接的文件。 -m, --megabytes 以MB为单位输出。 -L<符号链接>, --dereference<符号链接> 显示选项中所指定符号链接的源文件大小。 -P, --no-dereference 不跟随任何符号链接(默认) -0, --null 将每个空行视作0 字节而非换行符 -S, --separate-dirs 显示个别目录的大小时,并不含其子目录的大小。 -s, --summarize 仅显示总计,只列出最后加总的值。 -x, --one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 -X<文件>, --exclude-from=<文件> 在<文件>指定目录或文件。
实例
文件从大到小排序
ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ du -sh * |sort -rh 2.9M command 1.9M assets 148K template 72K package-lock.json 52K dist 28K build 16K README.md 4.0K renovate.json 4.0K package.json 4.0K LICENSE
只显示当前目录下子目录的大小。
ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ du -sh ./*/ 1.9M ./assets/ 28K ./build/ 2.9M ./command/ 52K ./dist/ 148K ./template/
查看指定目录下文件所占的空间:
ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du ./* 144 ./alfred.png 452 ./chrome-extensions.gif 4 ./dash-icon.png 1312 ./Linux.gif 16 ./qr.png
只显示总和的大小:
ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -s . 1932 .
显示总和的大小且易读:
ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ du -sh . 1.9M .
6.sort命令
对文本文件中所有行进行排序。
- 将所有输入文件的内容排序后并输出
- 当没有文件或文件为
-
时,读取标准输入
排序选项:
-b, --ignore-leading-blanks 忽略开头的空白。 -d, --dictionary-order 仅考虑空白、字母、数字。 -f, --ignore-case 将小写字母作为大写字母考虑。 -g, --general-numeric-sort 根据数字排序。 -i, --ignore-nonprinting 排除不可打印字符。 -M, --month-sort 按照非月份、一月、十二月的顺序排序。 -h, --human-numeric-sort 根据存储容量排序(注意使用大写字母,例如:2K 1G)。 -n, --numeric-sort 根据数字排序。 -r, --reverse 将结果倒序排列。 --sort=WORD 根据WORD排序,其中: general-numeric 等价于 -g,human-numeric 等价于 -h,month 等价于 -M,numeric 等价于 -n,random 等价于 -R,version 等价于 -V。 -V, --version-sort 文本中(版本)数字的自然排序。 # 其他 -k, --key=KEYDEF 通过一个key排序;KEYDEF给出位置和类型。 -t, --field-separator=SEP 使用SEP作为列的分隔符。 -T, --temporary-directory=DIR 使用DIR作为临时目录,而不是 $TMPDIR 或 /tmp;多次使用该选项指定多个临时目录。
注:关于
-g
和-n
选项的区别:stackoverflow,‘-g’ ‘--general-numeric-sort’ ‘--sort=general-numeric’ Sort numerically, using the standard C function strtod to convert a prefix of each line to a double-precision floating point number. This allows floating point numbers to be specified in scientific notation, like 1.0e-34 and 10e100. The LC_NUMERIC locale determines the decimal-point character. Do not report overflow, underflow, or conversion errors. Use the following collating sequence: Lines that do not start with numbers (all considered to be equal). NaNs (“Not a Number” values, in IEEE floating point arithmetic) in a consistent but machine-dependent order. Minus infinity. Finite numbers in ascending numeric order (with -0 and +0 equal). Plus infinity. Use this option only if there is no alternative; it is much slower than --numeric-sort (-n) and it can lose information when converting to floating point. ‘-n’ ‘--numeric-sort’ ‘--sort=numeric’ Sort numerically. The number begins each line and consists of optional blanks, an optional ‘-’ sign, and zero or more digits possibly separated by thousands separators, optionally followed by a decimal-point character and zero or more digits. An empty number is treated as ‘0’. The LC_NUMERIC locale specifies the decimal-point character and thousands separator. By default a blank is a space or a tab, but the LC_CTYPE locale can change this. Comparison is exact; there is no rounding error. Neither a leading ‘+’ nor exponential notation is recognized. To compare such strings numerically, use the --general-numeric-sort (-g) option.
用处:
sort -M
命令对time.log文件内容进行排序组合使用df、du和sort,见上节实例
7.grep初识:搜索文件
- grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。
- nb!!!
8.打包、压缩、归档、解压缩
Linux中的压缩工具
- .Z(已过时)
- gzip — .gz
- zip — .zip
- bzip2 — .bz2
tar
:将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。- 区分打包和压缩:打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
- why? —— Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
常用命令
tar -cvf log.tar log2012.log 仅打包,不压缩! tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩 tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 查 询:tar -jtv -f filename.tar.bz2 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
9.实战:server上安装vmwaretools
章节结束语与经验:掌握基本常用命令,根据需求查阅文档
六:父子shell
父子shell的概念
Unix shell
Bash(Bourne Again Shell),Dash(Debian Almquist shell),ash,zsh
父子shell
- 在Ubuntu中打开terminal,实际上就是打开了一个bash,而在窗口内还可以切换为其余shell,这样使用
ps
命令查看可以发现多个shell。 - 使用
ps -f
命令,不难发现各shell之间PID及PPID的对应关系,即父shell的PID是子shell的PPID。 - 使用
ps --forest
命令可以更清楚看到各shell的层级关系。 - 通过各级的
exit
,也能发现父子shell
过程如下:
分号在命令中有什么作用
分隔命令,依次执行
注:echo —— 输出指定的字符串或者变量
加上
()
后,会生成一个子shell运行命令,执行完后自动退出子shell。在上图中,我们使用echo $BASH_SUBSHELL
查看子shell数量,使用ps -f
发现子shell已退出。
sleep和jobs
sleep和jobs
sleep
—— delay for a specified amount of time(默认单位:s)sleep 100
sleep 100&
注:’&’表示后台执行
jobs
—— 显示作业的状态-l
:在作业的信息中额外列出PID
后台执行符&
后台解压文件并复制到指定目录:
(tar -zxvf ... ; tar -zxvf ...; cp ...)&
注:’&’表示后台执行
其他参考:https://stackoverflow.com/questions/13338870/what-does-at-the-end-of-a-linux-command-mean
If a command is terminated by the control operator &, the shell executes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0.
如果命令由控制运算符 & 终止,shell 将在子 shell 的后台执行该命令。 shell 不等待命令完成,返回状态为 0。
coproc协程
使用coproc name { ; }
,用于子shell挂后台
注:
{}
之间使用;
结尾,并且注意空格
外部命令和内建命令
引入:windows中任务管理器 也是一个进程,Linux中
ps -f
命令也是一个进程,why?外部命令的必要性 —— 上帝视角更清楚,单独创建一个进程
总结参考
内建命令,实际上是Shell程序的一部分,其中包含的是一些比较简单的Linux系统命令,这些命令由Shell程序识别并在Shell程序内部完成运行,通常在Linux系统加载运行时Shell就被加载并驻留在系统内存中。内部命令是写Bash源码里面的,其执行速度比外部命令快,因为解析内部命令Shell不需要创建子进程。
详见:https://www.gnu.org/software/bash/manual/html_node/Builtin-Index.html#Builtin-Index。
外部命令,Linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在Shell中,但是其命令执行过程是由Shell程序控制的。Shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在Bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin……等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等。
可以通过
type
命令来识别内建命令还是外部命令。内建命令使用
help
查看帮助文档,外部命令使用man
命令。
外部命令
以ps -f
命令为例,其PPID与bash的PID一致,为了查看整个shell中的进程,衍生出新的进程
如:ps, ls
内建命令
如:cd, exit, echo, history
history与alias
history —— 显示或操作历史列表
使用符号
!
执行指定序号的历史命令:!n
概要
history [-c] [-d offset] [n] history -anrw [filename] history -ps arg [arg...]
选项
-c 清空历史列表。 -d offset 根据offset删除记录。如果是正数则表示offset位置的记录,如果为负数则表示从结尾向前offset位置的记录。 -a 将当前终端的历史记录行添加到历史记录文件。 -n 将尚未从历史文件中读取的历史行追加到当前历史列表中。 -r 读取历史文件,并将其内容附加到历史列表中。 -w 将当前历史记录列表附加到历史记录文件中并且附加它们到历史列表中。 -p 在每个arg上执行历史记录扩展并在标准输出上显示结果,而不将结果存储在历史记录列表中。 -s 将每个arg作为单个条目附加到历史记录列表。
参数
n:可选,只列出最近的n条记录。
filename:可选,表示历史文件;默认调用顺序为
filename
、环境变量HISTFILE
、~/.bash_history
。
alias —— 定义或显示别名
语法
alias [-p] [name[=value] ...]
-p:显示全部已定义的别名。
name(可选):指定要(定义、修改、显示)的别名。
value(可选):别名的值。
实例
# 显示全部已定义的别名 alias alias -p # 显示已定义的别名(假设当前环境存在以下别名) alias ls alias ls grep # 定义或修改别名的值 alias ls='ls --color=auto' alias ls='ls --color=never' grep='grep --color=never'
章节结束语与经验:key — 父子shell及相关命令
七:环境变量
环境变量究竟是什么
引入:windows中
win + R
或在cmd中可以快速运行calc,notepad,mspaint,cmd,why?
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。如临时文件夹位置和系统文件夹位置等。[baike]
举例:windows和DOS操作系统中的
PATH
环境变量作用:当要求系统运行一个程序而没有告诉程序所在完整路径时,系统会在当前目录下和PATH中目录下寻找该程序。
全局变量和局部变量
认识
Windows:系统变量与用户变量
Linux:全局变量与局部变量
命令
使用
printenv
查看所有全局变量,printenv USER
查看全局变量USER注:不同发行版全局变量不一定相同
使用
$
引用全局变量echo $HOME cd $HOME
使用
set
命令查看局部变量
用户和局部变量的设定
- 定义的局部变量只能在当前shell中使用,子shell或退出都不能继续使用
- 定义局部变量必须用小写!!!
- 全局变量大写,下划线命名法
定义全局变量
export
:为shell变量或函数设置导出属性unset
:删除指定的shell变量或函数自己定义全局变量也推荐用小写(一般系统变量大写
注:这里使用echo已经发现dir无效,但还能执行,不懂…
更新:自己尝试退出子shell,发现父shell中dir并未删除(因为是父shell中定义的全局变量)。unset后无法查看,但仍可执行。退出后仍是无法查看可执行…
为啥要用环境变量
配置java等开发环境需要配置PATH
添加环境变量信息
PATH=$PATH:/home/lee/Project
注:如此配置在退出后重新打开会失效
永久配置环境变量
Linux打开shell时读取环境变量的机制
- 启动文件 —— 开机时默认执行环境变量
- bash shell运行逻辑?
- 登录shell
- 非登录就打开shell
- 运行脚本非交互shell
查看文件
cat /etc/profile
一个目录 —— 常见的不同发行版中用来配置永久环境变量的目录
~/.bashrc(Ubuntu) ~/.bash_profile ~/.profile ~/.bash_login
eg:永久别名
实际操作:需学习vim再上手
八:安装软件
PMS和软件安装的介绍
PMS, Package Management System 包管理系统
- 解决软件安装、更新、卸载,解决工具依赖问题(eg:QQ空间 QQ)
- 不同发行版PMS可能不同
软件包管理工具
- dpkg — Debian:
apt-get
,apt-cache
,aptitude
(已淘汰) - rpm — Red Hat
- dpkg — Debian:
软件安装
sudo apt install vim
安装、更新、卸载
apt - h
查看apt帮助文档更新
sudo apt update
升级
sudo apt upgrade
卸载
sudo apt remove
其他发行版本?
server版配置镜像源
备份原软件源文件
/etc/apt/sources.list
,然后删除(因为要直接添加内容)打开
/etc/apt/sources.list
并添加以下内容deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
刷新软件源信息
sudo apt update
更新软件,速度明显变快
sudo apt upgrade
其他发行版本
如:Red Hat — yum(常见), urpm, zypper
安装第三方软件
key — 仔细阅读别人的
README.md
,需要依赖例子:https://github.com/nvbn/thefuck
sudo apt update sudo apt install python3-dev python3-pip python3-setuptools sudo pip3 install thefuck
注:若pip下载慢,参考:https://developer.aliyun.com/article/652884
九:用户和权限
用户和权限的含义和作用
用户与权限 -> 安全
用户ID UID
- 系统账户 UID<500
查看有关文件
1.
cat /etc/passwd
lee:x:1000:1000:Lee,,,:/home/lee:/bin/bash
用户名 密码 UID 组ID 备注 用户目录 默认shell
2.
sudo cat /etc/shadow
密码存储地,仍加密,需root权限
lee:$6$vBYkP36fj7.w2YQB$AVnJhuLMHOPFYspc3FCnoLf0r5S7RXVgQTl.1ZLI8zUovgU2yXF3xH/1Q7s/dLOLQmHev/lROJwvEAydaLbzF1:18709:0:99999:7:::
mark:$6$.n.:17736:0:99999:7::: [--] [----] [---] - [---] ---- | | | | | |||+-----------> 9. Unused | | | | | ||+------------> 8. Expiration date | | | | | |+-------------> 7. Inactivity period | | | | | +--------------> 6. Warning period | | | | +------------------> 5. Maximum password age | | | +----------------------> 4. Minimum password age | | +--------------------------> 3. Last password change(since 1,1,1970) | +---------------------------------> 2. Encrypted Password +----------------------------------------> 1. Username
创建、删除、更改用户
创建
sudo useradd usr1
删除
sudo useradd usr1
更改密码
sudo passwd usr1
自学
chpasswd
批量更改密码#先创建用户密码对应文件,格式为username:password,并且不能有空行,保存成文本文件user.txt,然后执行chpasswd命令 chpasswd < user.txt
chage
修改帐号和密码的有效期限
group组
Linux 组 groups –> 目的:共享资源的权限
查看group文件
tail /etc/group
Ubuntu为每一个用户创建一个单独的组
Groupname Password GID 属于该组的成员列表
创建组
sudo groupadd group_lee
删除组
sudo groupdel group_lee
将用户加入组 ——
usermod
命令
文件、文件夹权限
- 第一个字符 File Type
- d — 目录;- — 文件;l — link file;b — 装置文件里面的可供储存的接口设备(可随机存取装置);c — 装置文件里面的串行端口设备(如鼠标、键盘)
作业:自学chmod命令
chmod
chmod
— change mode
用来变更文件或目录的权限
概要
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
mode:八进制数或符号组合。
file:指定要更改权限的一到多个文件。
选项
-c, --changes:当文件的权限更改时输出操作信息。
-f, --silent, --quiet:抑制多数错误消息的输出。
-v, --verbose:无论文件是否更改了权限,一律输出操作信息。
-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
例子
参考
man chmod
文档的DESCRIPTION
段落得知:
u
符号代表当前用户。g
符号代表和当前用户在同一个组的用户,以下简称组用户。o
符号代表其他用户。a
符号代表所有用户。r
符号代表读权限以及八进制数4
。w
符号代表写权限以及八进制数2
。x
符号代表执行权限以及八进制数1
。X
符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。s
符号代表设置权限suid和sgid,使用权限组合u+s
设定文件的用户的ID位,g+s
设置组用户ID位。t
符号代表只有目录或文件的所有者才可以删除目录下的文件。+
符号代表添加目标用户相应的权限。-
符号代表删除目标用户相应的权限。=
符号代表添加目标用户相应的权限,删除未提到的权限。
# 添加组用户的写权限。
chmod g+w ./test.log
# 删除其他用户的所有权限。
chmod o= ./test.log
# 使得所有用户都没有写权限。
chmod a-w ./test.log
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r ./test.log
# 等价的八进制数表示:
chmod 754 ./test.log
# 将目录以及目录下的文件都设置为所有用户拥有读写权限。
# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
chmod -R a=rw ./testdir/
# 根据其他文件的权限设置文件权限。
chmod --reference=./1.log ./test.log
两图熟记
章节结束语:边用边学,多看多练,自学,学无止境
十:编辑器之神——Vim
My Other学习:TLCL (billie66.github.io) for vi,Learning the vi Editor/Vim - Wikibooks, open books for an open world for vim
附:vi/vim键盘图
官网原图
翻译版本
编辑器简单介绍:vim编辑器之神,emac神之编辑器
命令版编辑器:vi,nano,emacs,vim
vim — 编辑器之神,emacs — 神之编辑器
Vim (text editor) from Wikipedia
Vim (/vɪm/; a contraction of Vi IMproved) is a free and open-source, screen-based text editor program for Unix. It is a improved clone of Bill Joy’s vi. Vim’s author, Bram Moolenaar, derived Vim from a port of the Stevie editor for Amiga and released a version to the public in 1991. Vim is designed for use both from a command-line interface and as a standalone application in a graphical user interface. Vim is released under the Vim license that includes some charityware clauses, encouraging users who enjoy the software to consider donating to children in Uganda.
PS: Vi — Visual Editor
vim官网:https://www.vim.org/
vim的简单使用
安装vim
sudo apt update sudo apt upgrade # 推荐先执行前两步,进行更新 sudo apt install vim
安装时无法fetch阿里镜像源,检查网络,断开代理,重启,更新并安装
vim工作模式
国外一般认为是两种模式
普通模式(命令操作模式):操作文件
插入模式:编辑内容
-
I
键进入INSERT模式,ESC
退回普通模式
国内一般认为是三种模式
- 一般模式 —— 移动
- 编辑模式 —— INSERT
- 命令模式 —— :
vim退出
-
:q
— 不保存退出 -
:wq
— 保存并退出 -
:q!
— 强制退出,不保存
-
实例
vim操作
移动光标
my tip:记住HJKL,两端是左右,中间是上下
按键 | 命令 | 功能 |
---|---|---|
K |
k | 上 |
J |
j | 下 |
H |
h | 左 |
L |
l | 右 |
翻页
按键 | 命令 | 功能 |
---|---|---|
Ctrl + F |
Ctrl + F |
上一页 |
Ctrl + B |
Ctrl + B |
下一页 |
Ctrl + E |
Ctrl + E |
上滚 |
Ctrl + Y |
Ctrl + Y |
下滚 |
Shift + G ,即G |
G | 末尾 |
G + G ,即gg |
gg | 首行 |
不同方式编辑文本、跳跃单词操作技巧
按键 | 命令 | 功能 |
---|---|---|
I |
i | 光标位置前插入 |
A |
a | 光标位置后插入 |
O |
o | 直接enter到下一行输入 |
X |
x | 删除光标所在字符 |
D + D ,即dd |
dd | 删除当前行 |
U |
u | 撤销 |
D + W ,即dw |
dw | 删除光标后的单词 |
B |
b | 向前跳跃单词首 |
E |
e | 向后跳跃单词尾 |
W ,即w |
w | 向后跳跃单词 |
Shift + W ,即W |
W | 向后大跳 |
Shift + B ,即B |
B | 向前大跳 |
跳跃行首行尾及替换
按键 | 命令 | 功能 |
---|---|---|
Shift + 6 ,即^ |
^ | 跳跃到本行开头 |
Shift + 4 ,即$ |
$ | 跳跃到本行末尾 |
R ,即r |
r | 替换当前光标字符 |
Shift + R ,即R |
R | 向后一直替换,直到ESC退出 |
大括号跳跃函数段落技巧
按键 | 功能 |
---|---|
Shift + [或] ,即{} |
向前/后跳跃大括号 |
vim复制剪切粘贴
按键 | 命令 | 功能 |
---|---|---|
D + D ,即dd |
dd | 删除当前行,相当于剪切 |
P |
p | 粘贴 |
Y + W ,即yw |
yw | 复制一个单词 |
Y + Shift 4 ,即y$ |
y$ | 复制文本,从当前到行末 |
注:y$缺点,行末概念不清
Visual可视化模式
- 作用:选择文本
- 普通模式下按
V
键,进入Visual模式 -> HJKL选择文本
按键 | 命令 | 功能 |
---|---|---|
V ,即v |
v | 选择文本 |
Shift + V ,即V |
V | 按行选择文本 |
Ctrl + V |
Ctrl + v | 矩阵选择 |
V + Shift G ,即vG |
vG | 选择当前行到文末 |
gg + V + Shift G ,即gg v G |
gg v G | 全选 |
O |
o | 切换已选择文本首尾(visual模式下) |
0 |
0 | 补全角落(visual模式下) |
V + A + W ,即vaw |
vaw | 快速选中一个单词 |
V + A + B ,即vab |
vab | ~~包括括号() |
V + A + Shift B ,即vaB |
vaB | ~~包括大括号{} |
V + A + < ,即va< |
va< | ~~包括尖括号<> |
注:visual模式下,仍可用b,w,e等跳跃文本技巧
视图模式其他用法
命令 | 功能 |
---|---|
v< | 往左缩进 |
v> | 往右缩进 |
v~ | 大小写转换 |
vu | 转换为大写 |
vU | 转换为大写 |
查找和替换
- 查找 — /
-
/int
— 查找int -
n
— 下一个
-
- 替换 — :
-
:s /int/double/g
— 当前行的int都替换为double -
:%s /int/double/g
— 所有的int都替换为double -
:set number
— 临时显示行号 -
:5,10s /int/double/g
— 5-10行的int替换为double -
:%s /int/double/gc
— 有提示的替换
-
vim的基础配置
创建配置文件 ——
touch .vimrc
配置 ——
vim .vimrc
写入以下代码(无需注释)
set syntax=on # 高亮 set tabstop=4 # 设置缩进 set softtabstop=4 set number # 显示行号 set enc=utf-8 set showmatch # 括号匹配
显示行号后,快速进入该行行首 — 命令:
number + gg
vim .
—— 通过vim查看当前目录所有文件
十一:server
Linux Server
安装Ubuntu Server,设置(更换镜像源http://mirrors.aliyun.com/ubuntu,其余基本直接Done),更新
SSH远程登录
安装net-tools
和ssh
,ifconfig
查看ip,通过putty连接到server
解决putty连接Ubuntu超时 Network error:Connection timed out
最后解决:ping发现不互通,然后通过
网络设置->更改适配器选项->Vmware Network Adapter->诊断并修复
解决
WSL
WSL, Windows Subsystem for Linux
控制面板->启用或关闭Windows功能->使用于Linux的Windows子系统,Msc Store安装Ubuntu18.04,使用Windows Terminal连接
使用Windows Terminal通过SSH连接虚拟机的Ubuntu(类putty)
配置Windows Terminal的json文件:
{ "guid": "{9db309df-38f6-4ad2-8970-03718f686545}", "hidden": false, "name": "Ubuntu-20.04x64", "commandline": "ssh lee@192.168.136.135" }
注:guid通过guid生成工具产生:www.guidgen.com
参考:https://blog.csdn.net/qq_46207024/article/details/116572048
Linux最后的结束语:
只有你不停地向前,才知道自己要做什么
共享与开源,世界更美好