linux操作

Linux

What is Linux?

  • 一个Linux发行版(例如Ubuntu):
    • Linux内核
    • GNU项目:一个自由软件集合
    • 其它软件和库

Linux基础操作

1
命令名 [选项][参数]...
  • [ ]:意为可选0~n个
  • 可通过man命令来查看具体命令的使用说明
    1
    man [选项] 命令

目录操作

1
cd directory

在需要键入文件名或目录名时: 可以使用 Tab 自动补足全名,双击 Tab 可以显示所有可能选项

  • /:根目录
  • ~:当前用户主目录
    • 普通用户($):/home/username
    • root(系统管理员)用户(#):/root
  • .:当前目录
  • ..:上一级目录
  • -:上一次访问的目录
1
ls [选项] [目录]
  • 选项(常用):
    • -a 显示隐藏的文件
    • -l 每行只列出一个文件
1
mkdir [选项] 目录
1
pwd [选项]
  • 作用:输出当前目录的绝对路径
1
rmdir [选项] 目录
  • 作用:删除目录

文件操作

支持对多个文件的操作,例如使用*来匹配任意长度的字符串

1
touch [选项] 文件名
  • 作用:当文件存在时更新文件的时间戳,当文件不存在时创建新文件。
1
rm [选项] 文件
  • 选项:
    • -r:递归删除目录及其内容,删除非空目录必须有此选项,否则无法删除
    • -f:强制删除,不提示用户确认,忽略不存在的目录
    • -i:逐一提示用户确认每个将要被删除的文件
1
cp [选项] 源文件 目标路径
  • 选项:
    • -r:递归复制目录及其子目录内的所有内容
1
mv [选项] 源文件 目标路径
  • 作用:
    • move
    • rename:例如mv test.txt test2.txt
  • 选项:
    • -v:显示详细的操作信息
    • -i:覆盖前询问
    • -u:(仅在有必要时移动)仅在源文件较新,或目标文件不存在时,才执行移动操作
  • 多源移动;当有多个源时,最后一个参数必须是目录
1
diff [选项] 文件1 文件2
  • 作用:比较
  • 选项:
    • -b:不检查空白字符的不同
    • -B:不检查空行
    • -1:仅显示有无差异,不显示详细信息
1
cat 文件
  • 作用:将文件内容输出到标准输出
1
echo <text>
  • 作用:print
  • 默认添加换行符,所以即使echo ''并非空(需要 -n去除)

查找操作

1
find [路径] <选项>
  • 作用:在给定路径/当前目录下查找
  • 选项:
    • -name <文件名>:指定需要查找的文件名
1
grep [选项] PATTERN FILE

(PATTERN是匹配字符串,FILE是文件或目录的路径)

  • 作用:输出匹配PATTERN的文件和相关的行。
  • 选项:
    • -a:不忽略二进制数据进行搜索。
    • -i:忽略大小写差异。
    • -r:从目录中递归查找。
    • -n:显示行号。
    • -v:反向过滤
    • -w:按独立单词匹配
    • -o:只输出匹配到的部分
  • 例如:grep hello a.txt
  • 可使用正则表达式作匹配
    • '^a':匹配行首为a的行
    • 'end$':匹配行尾为end的行
    • '[0-9]'
1
tree [选项] [目录名]
  • 作用:输出一个目录下的文件树。
  • 选项:
    • -a:列出全部文件(包含隐藏文件)
    • -d:只列出目录

快捷键

  • ctrl + c:终止程序执行
  • ctrl + z:挂起当前程序
  • ctrl + d:终止输入(相当于输入一个EOF)
  • ctrl + l:清屏
  • ctrl + s/ctrl + q:暂停/启动终端

GNU工具

GCC

即GNU编译器套件。

1
gcc [选项] 源代码文件
  • 作用:编译源代码文件
  • 选项:-o example
  • 若编译成功,同目录下出现a.out可执行文件
    • 执行./a.out即可输出
    • 需要传参?可类比:./casegen.out add 100 > case_add

make

make学习博客

  • make工具:根据Makefile中规则,自动化编译和构建项目
  • Makeflie
    • 由一系列rules构成,每条rule形式如下:
      1
      2
      <target> : <prerequisites> 
      [tab] <commands>
    • target
      • 通常是文件名:指明Make命令所要构建的对象
      • 也可以是某个操作的名字,这称为phony ,例如:
        1
        2
        3
        .PHONY: clean
        clean:
        rm *.o temp
      • 若Make命令没有指定目标,默认会执行Makefile文件的第一个目标
    • prerequisites(前置条件)
      • 通常是一组文件名,之间用空格分隔
      • 用法:生成多个文件alt text
      • 本质:若某个文件变化,会导致目标过期,则当前目标依赖该文件
        • 注意区分与伪目标(调用就执行,不关心过期)
    • commands(命令)
      • 注意:需要注意的是,每行命令在一个单独的shell中执行。这些Shell之间没有继承关系alt text
        • 这种“独立”只反映在shell变量上,而不影响磁盘上文件的改变
    • 多级Makefile:
      • 调用下级Makefile:
        • make -C subfile xxx
    • Grammar
      1. #
      2. echoing回声
      • 正常情况下,make会打印每条命令,然后再执行,这就叫做回声
      • 在命令的前面加上@,就可以关闭回声
      1. wildcard通配符alt text
      2. 模式匹配:%
      3. 变量和赋值符
        1. 调用时,要把变量放在$()
        2. 赋值运算符:常用:= alt text
      4. 内置变量
      • $(CC):指向当前使用的编译器
      1. 自动变量
        1. $@:代指当前target
        2. $<:代指第一个前置条件
        3. $?:代指比目标更新的所有前置条件
        4. $^:代指所有前置条件,之间以空格分隔
        5. $*:指代匹配符%匹配的部分
      2. 循环和判断:遵循bash语法

ctags

~/.vimrc中添加配置:

1
2
set tags=tags
set autochdir
  • 功能:代码跳转
    • ctrl+]跳转至相关定义文件位置
    • ctrl+o返回跳转前位置

tmux

终端复用工具 输入tmux进入tmux新对话

  • 重要快捷键:alt text

Git

alt text

  • 工作区
  • 暂存区
  • 版本库 S
  • untracked:未跟踪,未被git跟踪的状态
  • unmodified:未修改,版本库版本和工作区版本一致
  • modified:已修改,版本库版本和工作区版本不一致
  • staged:已暂存,修改版本已提交至暂存区,但尚未上传

Git常用指令

基本提交

git init git clone <URL>:“克隆”一个已有的储存库到当前目录下 git status:查看当前分支状态 git add:将新文件/已修改文件加入暂存区

  • git add .:add所有修改进入暂存区
  • git add <filename>

git checkout:切换分支(需要保证当前所有文件状态为未修改git commit:git commit -m <message>

  • 将暂存区的修改提交到储存库中

git log:查询提交记录

撤销指令

  • 工作区撤销 git restore <file> 把工作区文件恢复到暂存区版本
  • 暂存区撤销 git restore --staged <file> 把文件从暂存区取出,但还保留工作区文件
  • 删除未跟踪文件 git clean -f

版本回退

  • 版本库回到上一个提交 git reset --hard HEAD^
  • 版本库回到指定提交 git reset --hard <hash>
    • hash: 对应提交的hash值,可用git log获取

远程本地同步

  • 远程->本地:git pull [远程仓库名] [远程仓库分支]:[本地仓库分支]
  • 本地->远程:git push [远程仓库名] [本地仓库分支]:[远程仓库分支] git restore:取消修改
  • 未add入暂存区时:git restore <filename> 来撤销对这个文件的修改,使其退回到上一个 commit 的状态
  • 已add入暂存区后:git restore --staged <filename>将文件移除暂存区,再次restore

Shell

Shell,即操作系统的“外壳”(相对“内核”而言),是用于访问操作系统服务的用户界面

分类

GUI Shell

  • GUI:
    • Graphical User Interface

CLI Shell

  • CLI:
    • Command Line Interface:命令行界面

Shell脚本语言

Shell脚本的执行

  • 约定脚本文件的文件名以.sh结尾
  • 执行Shell脚本:./文件名
    • 前提:脚本文件有“执行”权限
    • chmod +x filename添加执行权限

Bash Shell语法基础

1
2
3
#!/bin/bash
#My first Shell script!
echo "Hello, world!"

alt text

  1. 变量:无需指定类型,但是等号两边不允许空格
  • 使用${var_name}/$var_name可以获取变量的值
  • 数组:i=(1 2 3 4)
  1. 脚本参数alt text 特殊变量:
    • $#:传递的参数个数
    • $*:一个字符串,内容是传递的全部参数
    • $?:函数返回值
    • $N:当N>=10时,需使用${N} 使用特殊变量时,尽量加上双引号"",防止解析错误
  2. 条件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if condition1
    then
    command11
    command12
    ......
    elif condition2
    then
    command21
    command22
    ......
    else
    command31
    command32
    ......
    fi
  • 整数比较方法:((condition))
  1. 循环
1
2
3
4
5
while condition
do
command
...
done
  1. 计算
    • 以下等价:
      • let i=i+1
      • i=$((i+1))
    • 运算符:
      • (()):结果非零时返回0(真)
      • $(()):直接返回计算数值结果
      • []:条件为真时返回0
        • [ -s < file> ]:文件非空
      • [[]]:支持&&等逻辑符
  2. 函数
  • 定义:
    1
    2
    3
    4
    function fun_name() {
    body...
    return int_value;
    }
    (如果要返回值,必须返回一个[0,255]之间的整数)
  • 调用: fun_name param1 param2 ... paramN
  1. 变量字符串分割
    1
    2
    ${name:1:3} //${变量:起始位置:长度}
    ${name:0:(-3) }//去掉末尾3个字符

sed

通过命令编辑和输出文本的工具

1
sed [选项] '命令' 文件
  • 选项
    • -n:安静模式,只显示经过sed处理的内容。否则显示输入文本的所有内容。
    • -i:直接修改读取的档案内容,而不是输出到屏幕。否则,只输出不编辑
    • -e: 允许在同一行里执行多条命令,例如sed -e '4astr ' -e 's/str/aaa/' my.txt
  • 命令:
    • <行号>a<内容>: 新增,在行号后新增一行相应内容。行号可以是“数字”,在这一行之后新增,也可以是“起始行,终止行”,在其中的每一行后新增。当不写行号时,在每一行之后新增。使用$表示最后一行。后面的命令同理。
    • <行号>c<内容>:取代。用内容取代相应行的文本。
    • <行号>i<内容>:插入。在当前行的上面插入一行文本。
    • <行号>d:删除当前行的内容。
    • <行号>p:输出选择的内容。通常与选项-n一起使用。
      • ‘n,mp’:输出[n,m]
    • s//:将(正则表达式)匹配的内容替换为
      • 默认只作用于每一行的第一个匹配项
      • 末尾标识符g:作用于所有,e.g.sed -i "s/char/int/g" file

awk

文本处理工具 awk '条件 { 动作 }' 文件名

  • awk默认:

    • 一次读取1行
    • 把这一行拆成若干字段,用空白字符分割每一列
    • 执行规则
  • 常用内置变量

    • $0:整行
    • $n:第n列
    • NF:当前行的字段数
    • NR:当前是第几行
    • OFS:输出字符分隔符
  • 例如:

    • awk '$2 > 80 {print $0}' score.txt:当第二列大于80时,输出一整行
    • awk -F ',' '{print $1, $3}' test.csv:输入分隔符为,
  • 一定要注意用''包裹条件&动作,防止解析错误

重定向

在命令后添加

  • > output.txt:覆盖原有内容,若不存在则新建
  • >> output.txt:追加内容 即可将输出重定向到文件中,而非原本的控制台上
  • <:输入重定向
  • 标准流:alt text
    • >1> 的简写 tips:
    • 重定向不能创建目录,只能创建文件

管道

管道符号|可以对命令进行连接 alt text e.g.+

1
grep -n "key" file1.txt | cut -d ":" -f 1
  • cut:
    • -d ":":以":"作为分隔符
    • -f n:取第n块
      • -f n、m
      • -f n-m

Copyright © 2026 CRZ's Blog

Powered by Hexo • Theme Candelas