Linux Learning
Linux Learning日记
1. 常用文件管理
- 文件系统结构
- root:
/
- home: 家目录,每个用户都有一个家目录,一般是
/home/用户名
- bin: 存放二进制可执行文件
- lib: 存放共享库
- var: 存放变量
- etc: 存放配置文件
- home: 家目录,每个用户都有一个家目录,一般是
- root:
- 路径
- 绝对路径:从根目录开始的路径,以
/
开头 - 相对路径:从当前目录开始的路径,不以
/
开头/
: 根目录.
: 当前目录..
: 上一级目录~/
: 当前用户的家目录,即/home/username
- 绝对路径:从根目录开始的路径,以
- 常用文件管理命令
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并重命名为file2cp -r /direct1 /direct2
: 复制目录1到目录2(目录2不存在则创建)
mkdir
: make directory 创建目录mkdir direct1
: 创建目录1mkdir -p /direct1/direct2
: 创建目录1下的目录2(目录1不存在则创建)
rm
: remove 删除文件/目录rm file1
: 删除文件1rm -r direct1
: 删除目录1-r
表示recursive,递归删除
rm -rf direct1
: 强制删除目录1rm direct/*
:*
表示当前目录下的所有文件
mv
: move 移动文件/目录+重命名mv file1 direct1/file2
: 将file1移动到目录1并重命名为file2mv file1 file2
: 将file1重命名为file2
touch
: 创建空文件touch file1
: 创建文件1
cat
: concatenate 查看文件内容cat file1
: 查看文件1的内容
2. tmux
- 功能
- 在一个终端窗口中创建多个终端窗口(分屏)
- 允许断开Terminal连接后,继续在后台运行程序
- Tmux结构
- Session: 会话,一个Session可以包含多个Window
- Window: 窗口,一个Window可以包含多个Pane
- Pane: 面板,一个Pane就是一个终端窗口
- 常用操作
tmux
: 创建一个新的Sessionctrl a + %
: 将当前窗口垂直分割ctrl a + "
: 将当前窗口水平分割ctrl a + 方向键
: 切换panectrl d
: 退出当前窗口ctrl a + d
: 挂起当前Sessiontmux attach
: 恢复上一次的Sessiontmux a
: 简写
ctrl a + s
: 列出所有Session- 方向键+上下键: 选择Session
- 方向键+左右键: 选择展开/收起Session
enter
: 选择Session
ctrl a + z
: 全屏/退出全屏ctrl a + c
: 创建新的Windowshift
: tmux中选中文本
3. Vim
- 功能
- 文本编辑器
- 根据文件扩展名自动判别编程语言,支持代码缩进、高亮等功能
- 使用方式:
vim file
- 如果已有该文件,则打开它
- 如果没有该文件,则打开一个新的文件并命名为file
- 模式
- 一般命令模式
- 命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
- 编辑模式
- 按i进入,按esc推出
- 命令行模式
- 在一般命令模式中按下
:/?
三个字母中的任意一个进入 - 可以查找、替换、退出、配置等
- 在一般命令模式中按下
- 一般命令模式
- 常用操作
- 操作:
(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):n
或nG
: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
- 功能
- SSH是一种网络协议,用于加密远程连接
- 可以在不安全的网络中安全地传输数据
- 可以远程登录到其他计算机上
- SSH是一种网络协议,用于加密远程连接
- SSH登录
ssh user@hostnane
user
: 用户名hostname
: IP地址或者域名
- 配置文件
~/.ssh/config
1
2
3
4
5
6Host myserver1 # 别名
User username
Hostname IP
Host myserver2
User username
Hostname IP
- SSH密钥
- 生成密钥:
ssh-keygen
- 添加公钥到服务器:
ssh-copy-id xxxx@xxxxxxxxx
- 生成密钥:
- 执行命令
ssh xxxx@xxxxxxxx 'command'
- command单引号:
$i
会在服务器上执行,而不是本地执行 - command双引号:
$i
会在本地执行,需要加上\
转译,则$i
会在服务器上执行
- command单引号:
- SCP传输文件
scp source1 source2 destination
- 复制文件夹:
scp -r source destination
- 从服务器复制文件到本地:
scp xxxxxxxx@xxxxxxxx:source destination
- 复制文件夹:
6. Git
- Git: 以树状结构管理文件
- 工作区:本地文件夹
- 暂存区:数据暂时存放的地方,独立于各个分支
- 本地仓库:本地文件夹中的
.git
文件夹 - 远程仓库:远程服务器上的仓库
- 版本库:存放所有版本的仓库
- 版本结构:树结构,每个节点都是一个版本
- 基本配置
git config --global user.name "username"
: 配置全局用户名,信息会保存在~/.gitconfig
文件中git config user.name "username"
: 配置当前仓库用户名
git config --global user.email "email"
: 配置全局邮箱git config user.email "email"
: 配置当前仓库邮箱
- 本地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仓库
- 本地分支管理
git branch
: 查看分支git branch -b branch_name
: 创建并切换到新分支git checkout branch_name
: 切换分支git merge branch_name
: 合并指定分支到当前分支- 合并分支时可能会出现冲突,需要手动解决冲突
- 解决冲突后,再次
git add
和git commit
git branch -d branch_name
: 删除分支
- 远程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
: 删除远程分支
- .gitignore: 忽略文件的配置文件,在项目根目录下创建
*/__pycache__
: git忽略所有__pycache__
文件夹中的文件
7. 管道
**管道(pipeline)**:用于连接两个命令,将前一个命令的stdout
作为后一个命令的stdin
- 格式:
command1 | command2
- command2要求必须能接受
stdin
,否则会报错
eg. find . -name "*.py" | xargs cat | wc -l
8. Linux常用命令
- 环境变量
- 查看:
env
或echo $PATH
- 修改:
export xxx=xxx
- 为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到
~/.bashrc
文件中,并执行source ~/.bashrc
命令 - e.g.
export PATH=$PATH:/user/bin
- 为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到
- 常见环境变量
PATH
: 环境变量,用于指定命令的搜索路径HOME
: 用户家目录USER
: 当前用户PWD
: 当前工作目录CPLUS_INCLUDE_PATH
: C++头文件搜索路径
- 查看:
- 系统状况
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
: 查看当前登录用户
- 更改文件权限
chmod
i.e. change mode 修改文件权限x
: 可执行r
: 可读w
: 可写+
: 添加权限-
: 删除权限
- e.g.
chmod +w file
: 向file添加写权限 chmod 777 file
: 为file添加所有权限(ps: 777为二进制表示,表示所有权限)
- 文件检索
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
中读入若干行数据,然后将每行数据作为命令的参数,最后执行命令
- 工具
md5sum file
: 计算文件的md5哈希值- 可以从
stdin
读入若干行数据,用ctrl + d
结束输入
- 可以从
time command
: 计算命令执行时间watch -n 1 command
: 每隔1秒执行一次commandtar
: 压缩/解压文件tar -zcvf xxxx.tar.gz file
: 压缩文件tar -zxvf file.tar.gz
: 解压文件x
: 解压c
: 压缩z
: 使用gzip压缩v
: 显示详细信息f
: 指定文件名
9. 云服务器与Docker
云服务器的配置(以腾讯云为例)
- 登陆:
ssh ubuntu@xxx.xxx.xxx.xxx
xxx为服务器公网IP - 创建用户:
adduser username
- 添加用户到sudo组:
usermod -aG sudo username
aG
: add to groupsudo
: 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中下载,一行行复制命令
- 登陆:
Docker
- Docker的基本概念
- 镜像:类似于模板,用于创建容器
- 容器:类似于一个轻量级的虚拟机,包含应用程序和运行环境
- 仓库:用于存放镜像的地方
- 用处: 创建完全一样的开发、测试、生产环境
- 配置流程
- 将当前用户添加到docker组避免每次都要sudo:
sudo usermod -aG docker $USER
- 执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo权限。
- 将镜像上传到自己租的云端服务器
scp xxx.tar server:
- 将镜像导入到docker中:
docker load -i xxx.tar
- 创建container并运行:
docker run -p 20000:22 --name xxx -itd xxx:xxx
-p
: 端口映射- 在云平台控制台中修改防火墙配置,放行端口20000
--name
: 容器名-itd
: 交互式、后台运行
- 进入container:
docker attach xxx
- 设置root密码:
passwd
- ssh连接:
ssh -p 20000 server
- 将当前用户添加到docker组避免每次都要sudo:
- 常用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
: 将文件复制到容器中(可以是文件夹)
- 镜像images
Linux Learning
http://example.com/2024/01/25/Linux-Learning/