Linux Learning

Linux Learning日记

1. 常用文件管理

  1. 文件系统结构
    • root/
      • home: 家目录,每个用户都有一个家目录,一般是/home/用户名
      • bin: 存放二进制可执行文件
      • lib: 存放共享库
      • var: 存放变量
      • etc: 存放配置文件
  2. 路径
    • 绝对路径:从根目录开始的路径,以/开头
    • 相对路径:从当前目录开始的路径,不以/开头
      • /: 根目录
      • .: 当前目录
      • ..: 上一级目录
      • ~/: 当前用户的家目录,即/home/username
  3. 常用文件管理命令
    • ctrl c: 终止当前进程/结束当前命令并换行
    • ctrl u: 删除光标前的内容,清除某行命令
    • tab: 自动补全
    • ls: list 列出当前目录下的文件和目录
      • ls -a: 列出当前目录下的所有文件和目录,包括隐藏文件
      • ls -A: 列出当前目录下的所有文件和目录,包括隐藏文件,但不包括...
      • ls -l: 列出当前目录下的文件和目录的详细信息
      • ls -al: 列出当前目录下的所有文件和目录的详细信息,包括隐藏文件
        • 可以简写为ll
      • ls -h: 以更友好的方式显示文件大小
    • pwd: print working directory 显示当前所在目录
    • cd: change directory 切换目录 cd默认切换到家目录
      • cd /: 切换到根目录
      • cd ~: 切换到当前用户的家目录
        • 直接cd也是进入到家目录
      • cd ..: 切换到上一级目录
      • cd -: 切换到上一次所在的目录
    • cp: copy 复制文件+粘贴+重命名/复制目录
      • cp /direct1/file1 /direct2/file2: 复制文件1从direct1到direct2并重命名为file2
      • cp -r /direct1 /direct2: 复制目录1到目录2(目录2不存在则创建)
    • mkdir: make directory 创建目录
      • mkdir direct1: 创建目录1
      • mkdir -p /direct1/direct2: 创建目录1下的目录2(目录1不存在则创建)
    • rm: remove 删除文件/目录
      • rm file1: 删除文件1
      • rm -r direct1: 删除目录1
        • -r表示recursive,递归删除
      • rm -rf direct1: 强制删除目录1
      • rm direct/*: *表示当前目录下的所有文件
    • mv: move 移动文件/目录+重命名
      • mv file1 direct1/file2: 将file1移动到目录1并重命名为file2
      • mv file1 file2: 将file1重命名为file2
    • touch: 创建空文件
      • touch file1: 创建文件1
    • cat: concatenate 查看文件内容
      • cat file1: 查看文件1的内容

2. tmux

  1. 功能
    • 在一个终端窗口中创建多个终端窗口(分屏)
    • 允许断开Terminal连接后,继续在后台运行程序
  2. Tmux结构
    • Session: 会话,一个Session可以包含多个Window
    • Window: 窗口,一个Window可以包含多个Pane
    • Pane: 面板,一个Pane就是一个终端窗口
  3. 常用操作
    • tmux: 创建一个新的Session
    • ctrl a + %: 将当前窗口垂直分割
    • ctrl a + ": 将当前窗口水平分割
    • ctrl a + 方向键: 切换pane
    • ctrl d: 退出当前窗口
    • ctrl a + d: 挂起当前Session
    • tmux attach: 恢复上一次的Session
      • tmux a: 简写
    • ctrl a + s: 列出所有Session
      • 方向键+上下键: 选择Session
      • 方向键+左右键: 选择展开/收起Session
      • enter: 选择Session
    • ctrl a + z: 全屏/退出全屏
    • ctrl a + c: 创建新的Window
    • shift: tmux中选中文本

3. Vim

  1. 功能
    • 文本编辑器
    • 根据文件扩展名自动判别编程语言,支持代码缩进、高亮等功能
    • 使用方式:vim file
      • 如果已有该文件,则打开它
      • 如果没有该文件,则打开一个新的文件并命名为file
  2. 模式
    • 一般命令模式
      • 命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
    • 编辑模式
      • 按i进入,按esc推出
    • 命令行模式
      • 在一般命令模式中按下:/?三个字母中的任意一个进入
      • 可以查找、替换、退出、配置等
  3. 常用操作
    • 操作:
      (1) i:进入编辑模式
      (2) ESC:进入一般命令模式
      (3) h 或 左箭头键:光标向左移动一个字符
      (4) j 或 向下箭头:光标向下移动一个字符
      (5) k 或 向上箭头:光标向上移动一个字符
      (6) l 或 向右箭头:光标向右移动一个字符
      (7) n<Space>:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
      (8) 0 或 功能键[Home]:光标移动到本行开头
      (9) $ 或 功能键[End]:光标移动到本行末尾
      (10) G:光标移动到最后一行
      (11) :nnG:n为数字,光标移动到第n行
      (12) gg:光标移动到第一行,相当于1G
      (13) n<Enter>:n为数字,光标向下移动n行
      (14) /word:向光标之下寻找第一个值为word的字符串。
      (15) ?word:向光标之上寻找第一个值为word的字符串。
      (16) n:重复前一个查找操作
      (17) N:反向重复前一个查找操作
      (18) :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
      (19) :1,$s/word1/word2/g:将全文的word1替换为word2
      (20) :1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。
      (21) v:选中文本
      (22) d:删除选中的文本
      (23) dd: 删除当前行
      (24) y:复制选中的文本
      (25) yy: 复制当前行
      (26) p: 将复制的数据在光标的下一行/下一个位置粘贴
      (27) u:撤销
      (28) Ctrl + r:取消撤销
      (29) 大于号 >:将选中的文本整体向右缩进一次
      (30) 小于号 <:将选中的文本整体向左缩进一次
      (31) :w 保存
      (32) :w! 强制保存
      (33) :q 退出
      (34) :q! 强制退出
      (35) :wq 保存并退出
      (36) :set paste 设置成粘贴模式,取消代码自动缩进
      (37) :set nopaste 取消粘贴模式,开启代码自动缩进
      (38) :set nu 显示行号
      (39) :set nonu 隐藏行号
      (40) gg=G:将全文代码格式化
      (41) :noh 关闭查找关键词高亮
      (42) Ctrl + q:当vim卡死时,可以取消当前正在执行的命令

4. Shell语言

这个太复杂了,以后有机会慢慢补

5. SSH

  1. 功能
    • SSH是一种网络协议,用于加密远程连接
      • 可以在不安全的网络中安全地传输数据
      • 可以远程登录到其他计算机上
  2. SSH登录
    • ssh user@hostnane
      • user: 用户名
      • hostname: IP地址或者域名
  3. 配置文件
    • ~/.ssh/config
      1
      2
      3
      4
      5
      6
      Host myserver1 # 别名
      User username
      Hostname IP
      Host myserver2
      User username
      Hostname IP
  4. SSH密钥
    • 生成密钥:ssh-keygen
    • 添加公钥到服务器:ssh-copy-id xxxx@xxxxxxxxx
  5. 执行命令
    • ssh xxxx@xxxxxxxx 'command'
      • command单引号:$i会在服务器上执行,而不是本地执行
      • command双引号:$i会在本地执行,需要加上\转译,则$i会在服务器上执行
  6. SCP传输文件
    • scp source1 source2 destination
      • 复制文件夹:scp -r source destination
      • 从服务器复制文件到本地:scp xxxxxxxx@xxxxxxxx:source destination

6. Git

  1. Git: 以树状结构管理文件
    • 工作区:本地文件夹
    • 暂存区:数据暂时存放的地方,独立于各个分支
    • 本地仓库:本地文件夹中的.git文件夹
    • 远程仓库:远程服务器上的仓库
    • 版本库:存放所有版本的仓库
    • 版本结构:树结构,每个节点都是一个版本
  2. 基本配置
    • git config --global user.name "username" : 配置全局用户名,信息会保存在~/.gitconfig文件中
      • git config user.name "username": 配置当前仓库用户名
    • git config --global user.email "email": 配置全局邮箱
      • git config user.email "email": 配置当前仓库邮箱
  3. 本地git仓库
    • git init: 初始化一个本地仓库
    • git add file: 将文件添加到暂存区
      • git add .: 将所有文件添加到暂存区
    • git commit -m "message": 将暂存区的文件提交到本地仓库
    • git status: 查看当前仓库状态
    • git log: 查看提交日志
      • git log --pretty=oneline: 以一行的形式显示提交日志
      • git reflog: 查看全部命令历史
    • git diff: 查看文件修改内容
    • git reset --hard HEAD^: 回退到上一个版本
      • HEAD^^: 上上个版本
      • HEAD~100: 前100个版本
      • git reset --hard commit_id: 回退到指定版本
    • git restore file: 撤销工作区的修改
      • git restore --staged file: 撤销暂存区的修改
    • rm ./* -rf: 删除本地git仓库
  4. 本地分支管理
    • git branch: 查看分支
    • git branch -b branch_name: 创建并切换到新分支
    • git checkout branch_name: 切换分支
    • git merge branch_name: 合并指定分支到当前分支
      • 合并分支时可能会出现冲突,需要手动解决冲突
      • 解决冲突后,再次git addgit commit
    • git branch -d branch_name: 删除分支
  5. 远程git仓库
    • git remote add origin git@xxxxxx:xxxxxx.git: 将本地仓库与远程仓库关联
      • tips: 关联前一定要先绑定SSH密钥!!!不然会提示server certificate verification failed
      • 解决方式:git remote rm origin后重新绑定
    • git push -u origin master: 将本地仓库的内容推送到远程仓库
      • -u: 第一次推送时需要加上
      • master: 远程仓库的分支名,建议和本地分支名一致
    • git push origin branch_name: 推送本地分支到远程仓库
    • git clone xxx@xxxxxx:xxxxxx.git: 克隆远程仓库
    • git pull: 从远程仓库拉取内容
      • git pull origin branch_n_ame: 从远程仓库的branch_name分支拉取内容并与本地当前分支合并
    • git branch --set-upstream-to=origin/branch_name branch_name: 设置本地分支与远程分支关联
    • git push -d origin branch_name: 删除远程分支
  6. .gitignore: 忽略文件的配置文件,在项目根目录下创建
    • */__pycache__: git忽略所有__pycache__文件夹中的文件

7. 管道

**管道(pipeline)**:用于连接两个命令,将前一个命令的stdout作为后一个命令的stdin

  • 格式: command1 | command2
  • command2要求必须能接受stdin,否则会报错

eg. find . -name "*.py" | xargs cat | wc -l

8. Linux常用命令

  1. 环境变量
    • 查看: envecho $PATH
    • 修改: export xxx=xxx
      • 为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到~/.bashrc文件中,并执行source ~/.bashrc命令
      • e.g. export PATH=$PATH:/user/bin
    • 常见环境变量
      • PATH: 环境变量,用于指定命令的搜索路径
      • HOME: 用户家目录
      • USER: 当前用户
      • PWD: 当前工作目录
      • CPLUS_INCLUDE_PATH: C++头文件搜索路径
  2. 系统状况
    • top: 查看所有进程信息
      • q: 退出
      • P: 按CPU使用率排序
      • M: 按内存使用率排序
    • df -h: i.e. disk free 查看磁盘使用情况
      • 其中-h表示以更友好的方式显示文件大小
    • free -h: 查看内存使用情况
    • du: i.e. disk usage 查看文件夹大小
      • du -h: 以更友好的方式显示文件大小
      • du -s: 只显示总大小,不显示子目录大小
    • ps aux: i.e. process status 查看所有进程信息
      • a: 显示所有用户的进程
      • u: 显示用户详细信息
      • x: 显示没有控制终端的进程
    • kill -9 pid: 强制杀死进程
    • w: 查看当前登录用户
  3. 更改文件权限
    • chmod i.e. change mode 修改文件权限
      • x: 可执行
      • r: 可读
      • w: 可写
      • +: 添加权限
      • -: 删除权限
    • e.g. chmod +w file: 向file添加写权限
    • chmod 777 file: 为file添加所有权限(ps: 777为二进制表示,表示所有权限)
  4. 文件检索
    • find /path/to/directory -name "file": 查找文件
    • grep xxx: 从stdin中读入若干行数据,如果某行中包含xxx,则输出该行;否则忽略该行。
    • wc: i.e. word count 统计文件行数、单词数、字符数
      • wc -l: 统计行数
      • wc -w: 统计单词数
      • wc -c: 统计字符数
    • tree: 以树状结构显示当前文件夹
    • ag: i.e. the silver searcher 快速查找文件内容,并在stdout中输出
      • ag xxx: 查找文件内容中包含xxx的文件
      • ag -l xxx: 只输出包含xxx的文件名
    • cut: 从文件中提取字段
      • stdin中读入若干行数据,然后将每行数据按照指定的分隔符进行分割,最后输出指定的字段
      • echo $PATH | cut -d ':' -f 3,5:输出PATH用:分割后第3、5列数据
      • echo $PATH | cut -d ':' -f 3-5:输出PATH用:分割后第3-5列数据
    • sort: 对每行内容按照字典序排序
      • 可以从stdin读入若干行数据
      • 可以从命令行参数中读取文件名列表
    • xargs: 从stdin中读入若干行数据,然后将每行数据作为命令的参数,最后执行命令
  5. 工具
    • md5sum file: 计算文件的md5哈希值
      • 可以从stdin读入若干行数据,用ctrl + d结束输入
    • time command: 计算命令执行时间
    • watch -n 1 command: 每隔1秒执行一次command
    • tar: 压缩/解压文件
      • tar -zcvf xxxx.tar.gz file: 压缩文件
      • tar -zxvf file.tar.gz: 解压文件
        • x: 解压
        • c: 压缩
        • z: 使用gzip压缩
        • v: 显示详细信息
        • f: 指定文件名

9. 云服务器与Docker

  1. 云服务器的配置(以腾讯云为例)

    • 登陆:ssh ubuntu@xxx.xxx.xxx.xxx xxx为服务器公网IP
    • 创建用户:adduser username
    • 添加用户到sudo组:usermod -aG sudo username
      • aG: add to group
      • sudo: super user do
    • 配置免密登陆:ssh-copy-id 参考SSH部分
    • 配置工作环境:scp .bashrc .vimrc .tmux.conf server:
    • 安装tmux:sudo apt-get update之后sudo apt-get install tmux
    • 安装docker: 在tmux中下载,一行行复制命令
  2. Docker

  • Docker的基本概念
    • 镜像:类似于模板,用于创建容器
    • 容器:类似于一个轻量级的虚拟机,包含应用程序和运行环境
    • 仓库:用于存放镜像的地方
  • 用处: 创建完全一样的开发、测试、生产环境
  • 配置流程
    1. 将当前用户添加到docker组避免每次都要sudo:sudo usermod -aG docker $USER
      • 执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo权限。
    2. 将镜像上传到自己租的云端服务器 scp xxx.tar server:
    3. 将镜像导入到docker中:docker load -i xxx.tar
    4. 创建container并运行:docker run -p 20000:22 --name xxx -itd xxx:xxx
      • -p: 端口映射
        • 在云平台控制台中修改防火墙配置,放行端口20000
      • --name: 容器名
      • -itd: 交互式、后台运行
    5. 进入container:docker attach xxx
    6. 设置root密码:passwd
    7. ssh连接:ssh -p 20000 server
  • 常用docker命令
    • 镜像images
      • docker images: 查看所有镜像
      • docker rmi image_id: 删除镜像
      • docker pull image_name: 从仓库拉取镜像
      • docker commit container_id image_name: 保存容器为镜像
      • docker save -o xxx.tar image_name: 保存镜像为文件
      • docker load -i xxx.tar: 将镜像从文件中导入
    • 容器container
      • docker ps: 查看所有容器
        • -a: 查看所有容器,包括已停止的
      • docker create -it image_name: 创建容器
        • -it: 交互式
        • -d: 后台运行
        • --name: 容器名
      • docker start container_id: 启动容器
      • docker stop container_id: 停止容器
      • docker run -itd image_name: 创建并运行容器
      • docker attach container_id: 进入容器
        • ctrl + p 后再 ctrl + q 挂起容器(不关闭)
      • docker exec -it container_id: 在容器中执行命令
      • docker rm container_id: 删除容器
      • docker container prune: 删除所有停止的容器
      • docker export container_id -o xxx.tar: 导出容器为文件
      • docker import xxx.tar image_name: 导入文件为镜像
      • docker stats: 查看容器资源使用情况
      • docker rename old_name new_name: 重命名容器
      • docker cp file container_id:/path: 将文件复制到容器中(可以是文件夹)

Linux Learning
http://example.com/2024/01/25/Linux-Learning/
作者
KesonStar
发布于
2024年1月25日
许可协议