• Linux 笔记:核心思想、常用命令以及脚本语法


    总结于 《鸟哥的 Linux 私房菜 - 基础学习篇》 ,图片也来自于此。

    核心思想

    目录树结构(directory tree)

    Linux 系统是基于目录树结构的,这是它的核心思想。目录,即文件夹。Linux 系统相当于一个文件夹,Linux 系统的所有数据要么对应一个文件夹,要么就是一个文件。比如,你新建一个用户,其实就是新建了一个文件夹。一个用户对应一个文件夹。目录树结构:

    图片来自《鸟哥的 Linux 私房菜 - 基础学习篇》

    上图中 长方形是文件夹波浪形是文件,根目录是 / 。这个 / 很巧妙,在 macOS 中,假设你下载文件 test.md 到 /Users/username/Desktop/,那么文件会下载到桌面,最前面这个 / 就是根目录。如果你写成 Users/username/Desktop/,那么文件就会下载到currentDerectory/Users/username/Desktop/下。

    Linux 系统使用的是目录树架构,但其实数据是存放在 磁盘分区 当中的,那么问题来了:目录树和磁盘分区是神马关系?这个时候就牵扯到一个叫「挂载(mount)」的概念了。

    目录树和磁盘分区的关系

    挂载其实就是建立目录树和磁盘分区之间的关系。目录只是一个标识,叫什么我们可以自定义,一个磁盘分区对应一个目录。

    我们经常用 U 盘,假设一个 U 盘是一个磁盘分区,我们把一个假设叫 partition1 的 U 盘插到 Windows 电脑上,可能电脑就多了个 F 盘,那么目录就是 F ,相当于将目录 F 挂载到了 U 盘上,访问 F 就可以访问 partition1 里的内容。如果再插一个假设叫 partition2 的 U 盘,系统应该就会多了一个 H 盘,相当于目录 H 就挂载到了 partition2 上。假设 F 盘下将会有一个存放很多视频的 moive 文件夹,我们可以直接将 movie 文件夹挂载到 partition2 上,这样 movie 里的视频就存到 partition2 里面了,就不占用 F 盘的空间了。

    在 Linux 系统中道理也是一样的,比如在搭建 Linux 环境的时候,可以将 /home 单独挂载到一个磁盘分区上。

    图片来自《鸟哥的 Linux 私房菜 - 基础学习篇》

    常用命令

    命令 含义 选项 示例
    --help ls --help
    man manual man man
    ls list -a, --all
    -h, --human-readable
    -l, --long listing format
    ls -ah:显示目录下所有文件夹,包括隐藏文件夹
    ls -l == ll
    cd change directory cd 相当于 cd ~~ 当前用户根目录
    cd / 根目录
    cd .. 上一层
    cd ../.. 上两层
    cd ../<directory> 上一层里面某个目录
    cd <directory>/<directory> 当前目录下的某个目录下的某个目录
    rm remove -d, --direcorty
    -r, --recursive
    -f, --force
    rm <file>
    rm -d <directory>
    rm -rf <directory>
    rm *.pdf
    cat concatenate cat <file>
    mkdir make direcotry mkdir <directory>
    touch create a file touch <file>
    mv move move oldname name
    move <file>/<directory> <directory>
    cp copy cp test test.bak
    zip -r, --recurse zip -r test.zip test/
    unzip unzip test.zip
    tar tape or archive -f, --file=ARCHIVE
    -c, --create
    -t, --list
    -v, --verbose
    -x, --extract
    -z, --gzip, --gunzip, --ungzip
    tar -cf archive.tar foo bar:将文件 foo 和 bar 创建为 archive.tar
    tar -tvf archive.tar: 详细列出 archive.tar 中所有文件
    tar -xf archive.tar:从 archive.tar 中提取所有文件
    tar xvzf redis-stable.tar.gz:从 redis-stable.tar.gz 中详细提取所有文件
    pwd print working directory pwd
    sh run a script sh test.sh 相当于 ./test.sh
    start start notepad++ <file>
    start Typora <file>
    vi visual vi <file>
    vim vi improved vim <file>

    vi/vim 的三种模式

    vi <file>vim <file> 都是修改 <file> 的命令,后者为前者的增强版,输入此命令后,会有三种模式修改 <file> 文件。

    • 一般指令模式(command mode):你看不见你输入的内容
    • 编辑模式(insert mode):直接修改文件内容
    • 指令列命令模式(command-line mode):最下面一行,:/? 开头

    图片来自《鸟哥的 Linux 私房菜 - 基础学习篇》

    常用指令

    • 一般指令模式:
    指令 含义
    i 当前位置进入 insert 模式
    I 第一个字符
    a 下一个字符
    A 末尾
    o 下一列开头
    O 上一列开头
    r Replace 模式,取代一次
    R 一直取代
    u 撤销
    Ctrl + r 取消撤销,相当于 U?
    0 行首
    end / $ 行尾
    G 最后一列
    gg 1 G,第一列
    n<enter> 向下移动 n 列
    Ctrl + f fall,向下一页
    Ctrl + b before,向上一页
    x 删除
    X 删除前一个
    dd 删除当前列
    d$ 删除从当前位置到列尾
    yy 复制当前列
    • 编辑模式:
    指令 含义
    Esc 退出编辑模式,进入一般指令模式
    • 指令列命令模式:
    指令 含义
    :w 保存
    :w! 强制保证
    :q 退出
    :q! 强制退出
    :wq 退出并保存,相当于 ZZ
    /word 查找关键字
    :set nu 显示行号
    :1,$s/word1/word2/gc word1 替换为 word2

    /word 查找时,可使用 n 跳转到下一个查找结果,N 跳转到上一个查找结果

    脚本语法

    • 遍历。示例:一个打印出当前路径下所有文件夹的目录的脚本,名叫 traverse.sh ,内容如下:
    #!/bin/bash
    
    for i in $(ls $(PWD))
    
    do
    if [ -d $i ];then
    cd $i
    pwd
    cd ..
    fi # if 反向,代表 if 结束
    done
    

    执行脚本: sh traverse.sh

    其他常用命令

    ## 用户
    passwd <username> # 修改用户的密码
    whoami # 查看当前用户名
    
    ## 日志
    less <file> # 查看最新日志
    tail -f <file> # 查看实时日志
    grep -5 <key> <file> # 查看日志 <file> 关键字 key 上下五行
    grep -5 <key> <file1> <file2> # 输出日志 <file1> 关键字 key 上下五行的内容到 <file2> 中
    
    ## 进程
    ps -ef|grep WeChat # 查看进程名叫 WeChat 的信息,最开头的数字为 id
    kill -9 6002(最开头的数字) # 杀死进程 id 为 6002 的进程
    
    sed -i's/word1/werd2/g' <file> # 替换 <file> 的 word1 为 word2(sed -- stream editor)
    xclip -sel c < <file> # 不打开 <file> 的情况下复制其内容
    df -h # 查看磁盘分区和目录信息(df -- display free disk space)
    echo $PATH# 输出 $PATH 的内容
    

    References

  • 相关阅读:
    Java开发环境搭建
    MySQL优化
    js正则表达式,验证身份证
    获取urlc参数
    Oracle解锁
    Qt 常用类 (4)—— QPoint
    Qt 常用类——QStandardItemModel
    Qt QTableWidget用法总结
    Qt 随机数
    C++ static类成员,static类成员函数
  • 原文地址:https://www.cnblogs.com/deppwang/p/11593158.html
Copyright © 2020-2023  润新知