1. 一些小知识

  • 版本号16.04、18.04 … 中的04表示4月发布的。4月发布的是稳定版LTS,10月发布的是测试版beta。
  • 文件或目录颜色一般情况
    • 白色——普通文件
    • 绿色——可执行文件
    • 红色——压缩文件
    • 蓝色——目录
    • 青色——链接文件
    • 黄色——设备文件
    • 灰色——其他文件
  • 命令选项前的横杠 (-)
    • 大多数命令选项前有横杠(-) (System V风格)
      • ls -a
      • rm -r dir
      • 有些命令选项前有没有横杠都行(BSD风格)
        • tar -xvf filename
        • tar xvf filename
        • ps -aux
        • ps aux
        • 一般格式
            • 接字母(- h)
          • — 接单词(— help)

2. shell常用快捷键

  • shell — unix — Bourne shell
  • bash — linux — Bourne again shell

    补齐

    Tab —— 补齐

    光标移动

  • 光标向右移动——ctrl + f(Forward)

  • 光标向左移动——ctrl + b(backward)
  • 光标移动到头部——ctrl+a (ahead)
  • 光标移动到尾部——ctrl+e(end)

    字符删除

  • 删除光标后的字符——ctrl+d

  • 删除光标前的字符——ctrl+h/删除键
  • 删除光标前所有字符——ctrl+u
  • 删除光标后所有字符——ctrl+k

3. Linux目录结构

  • /bin
    • binary 二进制文件,可执行程序,shell命令
  • /dev
    • device,一切皆文件,硬盘、显卡、显示器
  • /lib
    • 程序运行时需要加载的一些动态库
    • /lib/x86_64-linux-gnu:libc
  • /mnt
    • 手动挂载目录
  • /media
    • 外设的自动挂载目录
  • /root
    • root用户的home目录
  • /usr
    • unix system resource
    • 头文件—stdio.h stdlib.h :usr/include
    • 游戏
    • 用户安装的应用程序:/usr/local
  • /etc
    • 存放配置文件
    • /etc/passwd
    • /etc/group
  • /opt
    • 安装第三方应用程序
  • /home
    • linux操作系统所有非root用户的家目录
  • /tmp
    • 存放临时文件,重启电脑时会清空

4. 文件和目录相关命令

tree

  • tree 查看当前目录结构
  • tree dir 查看指定目录结构

ls

  1. 第一个字符(-):文件的类型(7种):

    • 普通文件:- (.txt、压缩包、可执行程序)
    • 目录:d
    • 符号链接:l
    • 管道:p
    • 套接字:s
    • 字符设备:c(键盘、鼠标)
    • 块设备:b(U盘、硬盘)
  2. 三种类型的用户(rwxr-xr-x):

    • 文件所有者:user —— rwx
    • 文件所属组用户:group —— r-x
    • 其他人:other —— r-x
  3. 1:硬链接计数

  4. 第一个lzx:

    • 文件所有者
  5. 第二个lzx:

    • 文件所属组
  6. 3454:文件大小

    • 如果是目录,一定是4K(4096)
  7. 10月 30 00:29:时间

  8. docker-compose.yml 文件名 ``` image.png

cd

  • 切换最近切换的两个目录,适用于很长的目录。

image.png

mkdir

  • 一次创建多级目录: mkdir aa/bb/cc -p

touch

  • 如果文件不存在,创建文件
  • 如果文件存在,更新时间

rmdir

  • 只能删除空目录

rm

  • rm -r dir 递归删除目录(即删除目录dir下所有文件和目录)
  • rm file 删除文件
  • rm -i file/dir 删除的时候给提示

cp

  • cp file1 file2(不存在) :创建file2,然后拷贝file1内容到file2
  • cp file1 file2(存在) :file1覆盖file2
  • cp file1 dir1(存在) :file 拷贝到dir1目录下
  • cp -r dir1(存在) dir2(存在) :将dir1拷贝到dir2下,包括dir1目录
  • cp -r dir1(存在) dir2(不存在) :创建dir2,然后将dir1的内容拷贝到dir2下,不包括dir1目录

mv

  • 改名
    • mv file1(存在) file2(不存在)
    • mv dir1(存在) dir2(不存在)
  • 移动
    • mv file1(存在) dir1(存在)
    • mv dir1(存在) dir2(存在)
  • mv file1(存在) file2(存在) file1覆盖file2,然后删除file1

cat

小文件

vim

more

大文件

  • more filename
  • 一行一行向下:回车键
  • 翻页:空格键
  • 退出:q

less

  • less filename
  • 向下一行:回车,ctrl+n
  • 向上一行:ctrl+p
  • 向下翻页:空格/pagedown
  • 向上翻页:pageup
  • 退出:q

head

默认显示头部前10行
head -行数 文件名

tail

默认显示尾部10行
tail -行数 文件名

5. 软硬链接 ln

  • 软链接 — 快捷方式
    • ln -s 文件名 快捷方式的名字
      • 文件名:使用绝对路径
      • 生成的软链接大小就是文件名(路径)的长度(字节为单位)
      • 目录也可以创建软链接
  • 硬链接
    • ln 文件名 硬链接的名字

image.png

  • inode是给操作系统看的。
  • 文件名是给用户看的。
  • 访问file1文件,其实就是访问其对应的inode,通过inode找到磁盘里对应的数据块。

6. 用户权限、用户和用户组

chmod — 修改文件或目录权限 (change mode)

  • 文字设定法
    • chmod who[+|-|=]mode 文件名
      • who
        • u——user,文件所有者
        • g——group,文件所属组
        • o——other,其他人
        • a——all,所有的(默认
      • +|-|=
        • +——添加权限
        • -——削减权限
        • =——覆盖权限
      • mode
        • r —— 读
        • w —— 写
        • x —— 执行
          • —— 没有任何权限
    • 示例:rwxrwxrwx — file
      • 文件所有者和其他人 减去读写权限: chmod uo-rw file
      • 所有者添加读权限,同组用户减去执行权限: chmod u+r,g-x file
  • 数字设定法
    • chmod [+|-|=]mode 文件名
      • mode:八进制的数(eg. 0756)
        • r:4
        • w:2
        • x:1
        • -:0
        • 0756
          • 0:八进制
          • 7:rwx - 文件所有者
          • 5:r-x - 文件所属组
          • 6:rw- - 其他人
    • 示例1: --xrwx--x 1 itheima itheima 0 10 月 18 15:51 file
      • 所有者和同组用户的权限设置为 -wx: chmod 331 file
      • 其他人只有执行权限: chmod 331 file
    • 文件权限:777给所有者和所属组减去r: chmod -440 file

如果所有人初始权限为777,给所有人减去x权限,那么命令应该是 chmod a-x file 。 如果输入 chmod -x file ,那么只会把文件所有人和文件所属组的x权限减去,其他人的x权限不会减去。 image.png

chown — 修改文件所有者/所属组 (change owner)

  • chown 新的所有者 文件名
  • chown 新的所有者:新的组 文件名

chgrp — 修改文件所属组(change group)

  • chgrp 新的组 文件名

7. 文件查找和检索

find — 根据文件属性查找

  • 文件名
    • find 查找目录 -name "查找的文件名"
  • 文件类型
    • find 查找目录 -type 文件类型
      • 普通文件:f
      • 目录:d
      • 符号链接:l
      • 管道:p
      • 套接字:s
      • 字符设备:c
      • 块设备:b
  • 文件大小
    • find 查找目录 -size -10M
    • +:大于 +10k
    • -: 小于 -10k
    • 等于10k:10k
    • 单位:
      • k - 小写
      • M - 大写
    • 大于10k,小于100k: find . -size +10k -size -100k
  • 按日期
    • 创建日期: -ctime -n/+n
      • -n : n天以内
      • +n:n天以前
      • find . -ctime -1 :搜索一天以内创建的文件和目录
    • 修改日期: -mtime -n/+n
    • 访问日期: -atime -n/+n
  • 深度
    • maxdepth n(层数):搜索n层以下的目录
    • mindepth n(层数):搜索n层以上的目录
    • image.png
  • 高级查找

    例:查找指定目录,并列出该目录中文件详细信息

    • exec:find ./ -type d -exec shell命令(ls -l){} \;
    • ok:find ./ -type d -ok shell命令(ls -l) {} \;
      • ok比exec更安全

image.png

  • 管道+xargs: find ./ -type d | xargs shell命令(ls -l)

image.png

grep — 根据文件内容查找

  • grep -r(有目录) "查找的内容" 搜索路径
  • 搜索home目录中带有helloword字符串的文件

    • grep -r "helloworld" ~ -n(显示行号)

      小结

  • find 搜索的路径 参数 搜索的内容

  • grep 搜索的内容 参数 搜索的路径

8. 压缩包管理

常见压缩格式

  • .gz — gzip/gunzip
  • .bz2 — bzip2/bunzip2

这两类压缩包我们一般不直接用,因为:它们只能压缩文件,不能压缩目录,而且不能把多个文件压缩到一个压缩包里,只能分开压缩,而且不保留原文件

tar - 打包

  • 参数
    • c - 创建压缩文件
    • x - 释放压缩文件
    • v - 打印提示信息(可不写)
    • f - 指定压缩包的名字
    • z - 使用gzip的方式压缩文件 - xxx.tar.gz
    • j - 使用bzip2的方式压缩文件 — xxx.tar.bz2
  • 命令: tar 参数 压缩包的名字 原材料

    • 压缩: tar czvf test.tar.gz file dir
    • 解压缩: tar xzvf test.tar.gz -C 解压目录

      rar

  • 需要安装: sudo apt-get install rar

  • 压缩
    • rar a 压缩包名(不用指定后缀) 压缩内容
      • 压缩目录要加参数 -r
  • 解压缩
    • rar x 压缩包名 解压目录

zip/unzip

  • 压缩
    • zip 参数 压缩包名 原材料
      • 如果有目录:-r
  • 解压缩

    • unzip 压缩包名 -d 解压目录

      小结

  • 压缩

    • tar/rar/zip 参数 压缩包名 原材料
  • 解压缩
    • tar/rar/unzip 参数 压缩包名 参数 解压路径
      • rar解压缩到指定目录不需要指定参数
      • unzip 不需要解压参数

9. 软件安装和卸载

  1. 在线安装
    1. 安装: sudo apt-get(apt) install 安装包的名字 (Ubuntu16.0以后可简写成apt)
    2. 卸载: sudo apt-get(apt) remove 软件的名字
    3. 软件列表的更新: sudo apt-get(apt) update
    4. 清空缓存: sudo apt-get(apt) clean
      1. /var/cache/apt/archives
      2. xxx.deb
  2. 软件包安装
    1. 安装: sudo dpkg -i xxx.deb (dpkg:deb package; -i:install)
    2. 卸载: sudo dpkg -r 软件的名字 (-r:remove)
  3. 源码安装
    1. 看readme,一般是
      1. ./configure
      2. make
      3. make verify # (optional)
      4. sudo make install

10. vim

帮助文档:shell命令——vimtutor

三种工作模式

  • 命令模式
  • 编辑模式
  • 末行模式

image.png

命令模式下的相关操作

  • 保存退出:ZZ
  • 代码格式化:gg=G
  • 光标的移动
    • 上下左右:HJKL
    • 光标移动到行首:0(零)
    • 光标移动到行尾:$
    • 光标移动到文件首部:gg
    • 光标移动到文件末尾:G
    • 行跳转到第123行:123G
      • 行号n回车:当前行向下移动n行
  • 删除命令
    • 删除字符
      • 光标前的字符:X
      • 光标后的字符:x
    • 删除单词:dw
      • 删除整个单词,光标应该在单词的最前边
    • 删除光标前的字符串:d0
    • 删除光标后的字符串:d$(D)
    • 删除行:dd(删除光标所在行)
    • 删除多行:ndd
      • n:行数
  • 撤销和反撤销
    • 撤销:u
    • 反撤销:ctrl+r
  • 复制和粘贴
    • 复制:
      • 1行:yy
      • 多行:nyy
    • 粘贴:
      • p:粘贴到光标的下一行
      • P:粘贴到光标的上一行
  • 可视模式:v
    • 移动光标:hjkl
    • 复制:y
    • 删除:d
    • 粘贴:
      • p:粘贴到光标的后面
      • P:粘贴到光标的前面
  • 替换
    • r:替换一个,光标盖住的字符
    • R:替换多个,从光标盖住的这个往后替换
  • 查找命令
    • /xxx
    • ?xxx
      • 关键字切换:n/N
    • :光标移动到待搜索关键字上边,键盘输入

  • 查看man文档

    • 光标移动到函数名上+ 章节号+K

      编辑模式(从命令模式切换到编辑模式)

  • a:从光标后开始插入

  • A:从光标所在行的行开始插入
  • i;从光标前开始插入
  • I:从光标所在行的行首开始插入
  • o:从光标所在行的下面创建新行
  • O:从光标所在行的上面创建新行
  • s:删除光标盖住的字符
  • S:删除光标所在行

末行模式相关操作

  • 命令模式->末行模式
    • 键盘录入冒号(:)
  • 保存退出
    • 保存不退出:w
    • 退出:q
    • 退出不保存:q!
    • 保存退出:wq(或x)
  • 行跳转
    • 行号+回车
  • 替换
    • 替换光标所在行的字符串
      • :s/old/new/gc
        • g:替换当前行所有的old
        • c:替换的时候加上提示信息
    • 替换一个范围
      • :``x,y``s/old/new/gc
      • x,y是一个范围(行数)
    • 替换当前文档所有的
      • :%s/old/new/gc
  • 分屏
    • 当前文件分屏
      • 水平:sp
      • 垂直:vsp
    • 两个屏幕显示不同的文件
      • 水平:sp 文件名
      • 垂直:vsp 文件名
    • 屏幕的切换:
      • ctrl+w+w
    • 打开的时候分屏
      • 水平:vim -on 文件名 文件名
      • 垂直:vim -On 文件名 文件名
        • n可以省略,代表分屏的个数
    • 屏幕的关闭
      • 关闭所有:qall
      • 保存关闭所有:wqall
      • 保存所有:wall
  • 执行shell命令
    • :!+命令
  • 末行模式-> 命令模式
    • 两次esc
    • 末行模式下执行一个命令

配置文件

  • 用户级别:~/.vimrc
  • 系统级别:/etc/vim/vimrc