前言
服务器一般没有图形化界面,所有自然而然就要用到linux操作系统进行操作咯。
1.1 常用文件管理命令
bin
文件夹: 存的是一些常用的可执行命令
etc
文件夹: 存的是一些配置文件
var
文件夹: 存的是一些日志文件
lib
文件夹: 存的是一些安装包和头文件
home
文件夹: 存的是所有用户的根目录
proc
文件夹: 存的是进程相关的一些信息
回到家目录: cd ~/
或者 cd
清除本行: ctrl + u
ls常用参数: -l -a -h ll = ls - la
显示当前路径:pwd
返回上一层: cd ..
返回上一个呆过的目录: cd -
复制文件: cp 源文件 目标文件 cp = 复制 + 粘贴 + 重命名
复制文件夹加参数
给文件夹的名字起空格: 转义加 \ 即可
创建层级文件夹: mkdir a/b/c -p
创建文件: touch xxx
查看历史指令记录; history
删除: rm xxx yyy -r(递归删)
删库跑路: rm /* -rf
取文件内容; cat xxx
mv cp 唯一区别 一个是直接移动 一个是复制黏贴
top命令: 相当于windows下的任务管理器
描述路径方式:
- 绝对路径 (从根路径/开始描述)
- 相对路径 (从当前路径开始描述)
2.1 tmux和vim
tmux
tmux最重要的两个作用: 1. 分屏
2. 任务可以挂到云端执行
安装tmux命令:
sudo apt install tmux
tmux修改ctrl + b 快捷键为ctrl + a
vim ~/.tmux.conf
tmux操作:
1.tmux: 新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框
2.按下Ctrl + a 后手指松开,然后按%
: 将当前pane左右半分成两个pane
3.按下Ctrl + a 后手指松开,然后按"代码
: 将当前pane上下半分成两个pane
4.Ctrl + d: 关闭当前pane,如果当前windows的所有pane均以关闭,则自动关闭windows;如果当前session的所有windows均已关闭,则自动关闭session
5.按下Ctrl + a 后手指松开,然后按方向键: 选择相邻的pane.
6.按下Ctrl + a 的同时按方向键,可以调整pane之间分割线的位置.
7.按下Ctrl + a 后手指松开,然后按z
: 将当前pane全屏/取消全屏。
8.按下Ctrl + a 后手指松开,然后按d
: 挂起当前session。
9.tmux + a: 打开之前挂起的session
10.按下Ctrl + a 后手指松开, 然后按s代码
,选择其他session。
方向键 - 上: 选择上一项 session/window/pane
方向键 - 下: 选择下一项 session/window/pane
方向键 - 右: 展开当前项 session/window
方向键 - 左: 闭合当前项 session/window
11.按下Ctrl + a 后手指松开, 然后按c,在当前session中创建一个新的window。
12.按下Ctrl + a 后手指松开,然后按w,选择其他的window,操作方法与(10)完全相同
13.按下Ctrl + a 后手指松开,然后按PageUp;翻阅当前pane内的内容
14.在tmux中选中文本时,需要按住shift键.
15.鼠标滚轮: 翻阅当前pane内的内容
16.在tmux中选中文本时,需要按住shift键。 复制: ctrl + insert 粘贴: (linux)shift + insert
vim(命令行模式下的编辑器)
功能:
1.命令行模式下的文本编辑器.
2.根据文件扩展名自动判别编程语言,支持代码缩进、代码高亮等功能.
3.使用方式: vim filename
如果已有该文件,则打开它.
如果没有该文件,则打开一个新的文件,并命名为filename
模式:
1.一般命令模式
默认模式: 命令输入方式: 类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制,粘贴
删除文本等.
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. :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.Shift + >: 将选中的文本整体向右移动
30.Shift + <: 将选中的文本整体向左移动
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卡死时,可以取消当前在执行的命令
异常处理:
每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件.
如果打开某个文件时,该文件的swap文件已存在,则会报错.此时解决方法有两种
1.找到正在打开该文件的程序,并退出
2.直接删掉该swp文件即可
组合连招:
删除全部文本: gg d G
将全文代码格式化 gg = G
3.1 Shell语法
4.1 ssh
5.1 git
6.1 thrift
7.1 管道、环境变量与常用命令
管道
概念
管理类似于文件重定向,可以将前一个命令的stout
重定向到下一个命令的stdin
.
要点
1.管理命令仅处理stout
,会忽略stderr
2.管道右边的命令必须能接受stdin
3.多个管道命令可以串联
与文件重定向的区别
- 文件重定向左边为命令,右边为文件
- 管道左右两边均为命令,左边有
stout
,右边有stdin
举例
统计当前目录所有python文件的总行数。其中代码
、代码
、代码
等命令可以参考常用命令
统计当前目录下的所有python文件
find . -name '*.py' | xargs cat | wc -l
# xargs的作用: 将标准输入的内容用空格隔开 作为cat的命令行参数传给cat(将标准输入变成文件参数)
xrags cat: 将前面的文件用cat cat一遍 列表出前面文件的所有内容
wc -l 统计标准输入的内容的总行数
# 将 cat出来的文件名作为参数
find . -name '*.py' | cat | wc -l
环境变量
概念
Linux系统中会用到很多环境变量来记录配置信息。
环境变量类似于全局变量,可以被各个进程访问到。我们可以通过修改环境变量来方便地修改系统配置。
查看
列出当前环境下的所有环境变量。
env # 显示当前用户的变量
set # 显示当前shell的变量,包括当前用户的变量
export # 显示当前导出成用户变量的shell变量
输出某个环境变量的值:
echo $PATH
修改
环境变量的定义、修改、删除操作可以参考shell语法-变量这一节的内容。
为了将环境变量的修改应用到未来所有环境下、可以将修改命令放
~/.bashrc
文件中。
修改完~/.bashrc
文件后,记得执行source ~/.bashrc
,来将修改应用到当前的bash
环境下.
为何将修改命令放到~/.bashrc
,就可以确保修改会影响未来所有的环境呢?
- 每次启动
bash
,都会先执行~/.bashrc
- 每次
ssh
登录远程服务器,都会启动一个bash
命令行给我们。 - 每次
tmux
新卡一个pane,都会启动一个bash
命令行给我们。 - 所以未来所有新开的环境都会加载我们修改的内容。
export HOME=/home/xtzy/xx文件夹 # 修改路径 退出新开bash就无效 需要在.bashrc文件夹修改才能全局应用
常用的环境变量
1.HOME
: 用户的家目录
2.PATH
: 可执行文件(命令)的存储路径。路径与路径之间用:
分隔.当某个可执行文件同时出现在多个路径中时,会选择从左到右第一个路径中的执行。下列所有存储路径的环境变量,均采用从左到右的优先顺序.
3.LD_LIBRARY_PATH
: 用于指定动态链接库(.so文件)的路径,其内容时以冒号分隔的路径列表.
4.C_INCLUDE_PATH
: C语言的头文件路径,内容是以冒号分隔的路径列表。
5.CPLUS_INCLUDE_PATH
: Cpp的头文件路径,内容时以冒号分隔的路径列表。3333
6.PYTHONPATH
: Python导入包的路径,内容时以冒号分隔的路径列表.
7.JAVA_HOME
: jdk的安装目录。
8.CLASSPATH
: 存放Java导入类的路径,内容是冒号分隔的路径列表。
# cpu的信息
cd /proc/cpuinfo
# 如何到command命令
# 遍历PATH里的所有路径 直到找到第一个和command匹配的命令
# 如何将一个可执行文件test变成一个命令?
# 先pwd 把当前路径复制下来
# 打开家目录下的.bashrc文件
# 修改PATH
vim ~/.bashrc
export PATH=路径:$PATH
source ~/.bashrc
# 再看path的内容就多了一个目录
echo $PATH
# 退出登录以后就有了test命令
test
# 做完记得将.bashrc进行回滚
# 如果动态链接库的PATH是空的 会特定找几个默认的地方
/usr/local/lib/
/usr/include
/usr/include/c++
g++ 在加载时 先将CPLUS_INCLUDE_PATH里的所有路径先遍历一遍
# 打开python交互式解释器
ipython # 支持一些bash命令 补全更完整
import random
random.randint(1,10)
random.randint(1,10)
random.randint(1,10)
8.1 租云服务器和docker教程
腾讯云地址:https://cloud.tencent.com/
未来的主要工作场所是docker
创建工作用户xtzy
并赋予sudo
权限
登录到新服务器。打开 Terminal,然后:
ssh root@xxx.xxx.xxx.xxx # 注意腾讯云登录的用户不是root,而是ubuntu
创建xtzy
用户:
adduser xtzy # 创建用户xtzy
usermod -aG sudo xtzy # 给用户xtzy分配sudo权限
配置免密登录方式
退回Terminal,然后配置xtzy
用户的别名和免密登录,可以参考4. ssh——ssh登录。
配置新服务器的工作环境
将Terminal的配置传到新服务器上:
scp .bashrc .vimrc .tmux.conf server_name: # server_name需要换成自己配置的别名
安装tmux
和docker
登录自己的服务器,然后安装tmux:
sudo apt-get update
sudo apt-get install tmux
打开tmux
。(养成好习惯,所有工作都在tmux
里进行,防止意外关闭终端后,工作进度丢失)
然后在tmux
中根据docker安装教程安装docker
即可。
docker教程
将当前用户添加到docker
用户组
为了避免每次使用docker
命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker
用户组(可以参考官方文档):官方文档
sudo usermod -aG docker $USER
执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo
权限。
镜像(images)
1.docker pull ubuntu:20.04
:拉取一个镜像
2.docker images
:列出本地所有镜像
3.docker image rm ubuntu:20.04
或 docker rmi ubuntu:20.04
:删除镜像ubuntu:20.04
4.docker [container] commit CONTAINER IMAGE_NAME:TAG
:创建某个containerdocker
的镜像
5.docker save -o ubuntu_20_04.tar ubuntu:20.04
:将镜像ubuntu:20.04
导出到本地文件ubuntu_20_04.tar
中
6.docker load -i ubuntu_20_04.tar
:将镜像ubuntu:20.04
从本地文件ubuntu_20_04.tar
中加载出来
容器(container)
-
docker [container] create -it ubuntu:20.04
:利用镜像ubuntu:20.04
创建一个容器。 -
docker ps -a
:查看本地的所有容器 -
docker [container] start CONTAINER
:启动容器 -
docker [container] stop CONTAINER
:停止容器 -
docker [container] restart CONTAINER
:重启容器 -
docker [contaienr] run -itd ubuntu:20.04
:创建并启动一个容器(不加d 就直接进去) -
docker [container] attach CONTAINER
:进入容器
先按Ctrl-p
,再按Ctrl-q
可以挂起容器 -
docker [container] exec CONTAINER COMMAND
:在容器中执行命令 -
docker [container] rm CONTAINER
:删除容器 -
docker container prune
:删除所有已停止的容器 -
docker export -o xxx.tar CONTAINER
:将容器CONTAINER
导出到本地文件xxx.tar
中 -
docker import xxx.tar image_name:tag
:将本地文件xxx.tar导入成镜像,并将镜像命名为image_name:tag
-
docker export/import
与docker save/load
的区别:export/import
会丢弃历史记录和元数据信息,仅保存容器当时的快照状态save/load
会保存完整记录,体积更大
-
docker top CONTAINER
:查看某个容器内的所有进程 -
docker stats
:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息 -
docker cp xxx CONTAINER:xxx
或docker cp CONTAINER:xxx xxx
:在本地和容器间复制文件 -
docker rename CONTAINER1 CONTAINER2
:重命名容器 -
docker update CONTAINER --memory 500MB
:修改容器限制
实战
进入Terminal,然后:
scp /var/lib/acwing/docker/images/docker_lesson_1_0.tar server_name: # 将镜像上传到自己租的云端服务器
ssh server_name # 登录自己的云端服务器
docker load -i docker_lesson_1_0.tar # 将镜像加载到本地
docker run -p 20000:22 --name my_docker_server -itd docker_lesson:1.0 # 创建并运行docker_lesson:1.0镜像
docker attach my_docker_server # 进入创建的docker容器
passwd # 设置root密码
去云平台控制台中修改安全组配置,放行端口20000
。
返回AC Terminal,即可通过ssh
登录自己的docker
容器:
ssh root@xxx.xxx.xxx.xxx -p 20000 # 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址
然后,可以仿照上节课内容,创建工作账户xtzy
。
最后,可以参考4. ssh——ssh登录配置docker
容器的别名和免密登录。
小Tips
如果apt-get
下载软件速度较慢,可以参考清华大学开源软件镜像站清华大学开源软件镜像站中的内容,修改软件源。
迁移的是容器。
常用命令
sudo apt-get update
: 从服务器获取软件列表,并在本地保存为文件。
sudo apt-get upgrade
-- 本地安装软件与本地软件列表对比,如本地安装版本低,会提示更新。
系统状况
-
top
: 查看所有进程的信息(Linux的任务管理器)- 打开后,输入
M
:按使用内存排序 - 打开后,输入
P
:按使用CPU排序 - 打开后,输入
q
: 退出
- 打开后,输入
-
df -h
: 查看硬盘使用情况 -
free -h
: 查看内存使用情况 -
du -sh
: 查看当前目录占用的硬盘空间 (-ch 是详细看) -
ps aux
: 查看所有进程(一般用来查某个进程)-
ps aus | grep xxx # 查某个进程 kill -9 pid # 杀掉进程
-
-
kill -9 pid
: 杀死编号为pid
的进程- 传递某个具体的信号:
kill -s SIGTERM pid
- 传递某个具体的信号:
-
netstat -nt
: 查看所有网络连接 -
w
: 列出当前登录的用户 -
ping www.baidu,com
:检查是否连网
文件权限
1.chmod
:修改文件权限
chmod +x xxx
:给xxx
添加可执行权限chmod -x xxx
: 去掉xxx
的可执行权限chmod 777 xxx
:将xxx
的权限改成777chmod 777 xxx -R
:递归修改整个文件夹的权限
文件检索
1,find /path/to/directory/ -name '*.py'
: 搜索某个文件路径下的所有.py
文件
2.grep xxx
: 从stdin
中读入若干行数据,如果某行中包含xxx
,则输出该行;否则忽略该行。
-
# 通过find + grep 实现全文的搜索和过滤 find homework/lesson_6 -name '*.cpp' | xargs cat | grep 'acs-x'
3.wc
: 统计行数、单词数、字节数
-
既可以从
stdin
中直接读入内容;也可以在命令行参数中传入文件名列表; -
wc -l
: 统计行数 -
wc -w
: 统计单词数 -
wc -c
: 统计字节数 -
# 既可以接收标准读入 也可以接收文件参数 wc abc def ghi xtzy tzy zy ctrl + d结束 # 统计某个文件的总行数 find . name '*.xx' | xargs cat | wc -l
4.tree
: 展示当前目录的文件结构
tree /path/to/directory
: 展示某个目录的文件结构tree -a
: 展示隐藏文件
5.ag xxx
:搜索当前目录下的所有文件,检索xxx
字符串 (非常重要!!!)
6.cut
: 分割一行内容
- 从
stdin
中读入多行数据 echo $PATH | cut -d ':' -f 3,5
:输出PATH
用:
分割第3、5列数据echo $PATH | cut -d ':' -f 3-5
:输出PATH
用:
分割第3-5列数据echo $PATH | cut -c 3,5
:输出PATH
的第3、5个字符echo $PATH | cut -c 3-5
:输出PATH
的第3-5个字符
7.sort
: 将每行内容按字典序排序 (可以和find一起使用)
- 可以从
stdin
中读取多行数据 - 可以从命令行参数中读取文件名列表
8.xargs
: 将stdin
中的数据用空格或回车分割成命令行参数(有些命令不接受标准输入)
find . -name '*.py' | xargs cat | wc -l
: 统计当前目录下所有python文件的总行数
查看文件内容
1.more
: 浏览文件内容
- 回车: 下一行
- 空格: 下一页
b
: 上一页q
: 退出
2.less
:与more
类似,功能更全(没有vim好用)
- 回车: 下一行
y
: 上一行Page Down
: 下一页Page Up
: 上一页
3.head -3 xxx
: 展示xxx
的前3行内容
- 同时支持从
stdin
读入内容
4.tail -3 xxx
: 展示xxx
末尾3行内容
- 同时支持从
stdin
读入内容
用户相关
1.history
: 展示当前用户的历史操作,内容存放在~/.bash_history
中。
工具
1.md5sum
: 计算md5
:哈希值 (将任意长度的文件变成一个三十二位的字符串)
- 可以从.
stdin
读入内容 - 也可以在命令行参数中传入文件名列表;
2: 统计time command
:命令的执行时间
3.ipython3
: 交互式python3环境。可以当作计算器,或者批量管理文件。
- .
! echo "Hello World"
: .!
表示执行.shell
脚本
4..watch -n 0.1 command
: 每0.1s执行一次.command
命令
5.tar
: 压缩文件
- .
tar -zcvf xxx.tar.gz /path/to/file/*
: 压缩 - .
tar -zxvf xxx.tar.gz
: 解压缩
6.diff xxx yyy
: 查找文件xxx
与yyy
的不同点
安装软件
1 .sudo command
: 以root
身份执行command
命令
2.apt-get install xxx
: 安装软件
3.pip install xxx --user -upgrade
: 安装python包