近期致力于总结科研或者工作中用到的主要技术栈,从技术原理到常用语法,这次查缺补漏当作我的小百科。主要技术包括:
- ✅数据库常用:MySQL, Hive SQL, Spark SQL
- ✅大数据处理常用:Pyspark, Pandas
- ⚪ 图像处理常用:OpenCV, matplotlib
- ⚪ 机器学习常用:SciPy, Sklearn
- ⚪ 深度学习常用:Pytorch, numpy
- ⚪ 常用数据结构语法糖:itertools, collections
- ✅ 常用命令: Shell, Git, Vim
以下整理错误或者缺少的部分欢迎指正!!!
Linux
Linux 的目录中有且只有一个根目录 / 。Linux 是以文件的形式管理我们的设备,因此 linux 系统一切皆为文件。Linux命令严格区分大小写。
ifconfig # 查询当前网卡信息
ifconfig eth0 # 配置网卡
df # 查看系统分区
ls /bin/ # 里面存放的为Linux命令文件
文件处理命令
- 显示目录文件
ls 选项[-ald] [文件或目录]
-a
显示所有文件,包括隐藏文件
-l
详细信息显示(可简略为ll
)
-d
查看目录属性
-h
人性化显示 - 创建新目录
mkdir -p [目录名]
-p
递归创建 - 切换目录
cd [目录]
cd ..
返回上一级目录 - 显示当前目录
pwd
- 删除空目录
rmdir [目录名]
- 复制
cp -rp [原文件或目录] [目标目录]
-r
复制目录
-p
保留文件属性 - 删除文件
rm -rf [文件或目录]
-f
强制执行 - 创建空文件
touch [文件名]
- 显示文件内容
cat [文件名]
-n
显示行号 - 分页显示文件内容
more [文件名]
(空格)或f
翻页
(Enter)
换行
q或Q
退出
/
搜索 - 分页显示文件内容(可向上翻页)
less [文件名]
- 显示文件前面几行
head -n [文件名]
- 显示文件后面几行
tail -n [文件名]
-f
动态显示文件末尾内容 - 生成链接文件
ln -s [原文件] [目标文件]
-s
创建软连接
软链接的作用和Windows中的快捷方式差不多,是指向源文件安装路径的符号链接,大小很小,真正拥有的权限是源文件所决定的权限 。
硬链接就是把源文件拷贝到目标位置,与cp -p
最大区别是可以同步更新,源文件有变化硬链接文件会同时变化,如果源文件丢失或被删除,硬链接并不会消失。可以通过i节点来区分,源文件和硬链接文件的i节点是一样的,所以他们会同步更新,但是不能跨分区放置硬链接,且不能对目录使用。
权限管理命令
用户有三类:u所有者(只有一个)、g所属组、o其他人、a所有人
权限有三类:r、w、x
代表字符 | 对文件的含义 | 对目录的含义 |
---|---|---|
r:read | 可以查看文件内容 可以cat/more/head/tail/less | 可以列出目录中的内容 可以ls |
w:write | 可以修改文件内容 可以vim | 可以在目录中创建、删除文件 可以touch/mkdir/rmdir/rm |
x:execute | 可以执行文件 可以script(脚本) command(命令) | 可以进入目录 可以cd |
- 改变文件或目录权限
chmod [{ugoa}{+-=}{rwx}] [文件或目录]
-R
递归修改,即修改包括文件下目录的权限 - 改变文件或目录的所有者
chown [用户] [文件或目录]
- 改变文件或目录的所属组
chgrp [用户组] [文件或目录]
- 显示、设置文件的缺省权限
umask [-S]
-S
以rwx形式显示新建文件缺省权限
新建文件默认没有 x 权限
umask
指令直接输入之后会显示 0022
,其中 0 代表特殊权限,022代表 777 与 022 之间异或逻辑关系
文件搜索命令
- 文件搜索
find [搜索范围] [匹配条件]
-name
文件名匹配,*
匹配任意字符,?
匹配任意一个字符
-iname
不区分大小写文件名匹配
-size
指定文件大小,size后接的数据只能为数据块
+n
大于,-n
小于,n
等于 1个数据块=512字节=0.5K
-user
根据所有者查找
-group
根据所属组查找
-type
根据文件类型查找,f
文件,d
目录,l
软链接
-a
同时满足,-o
满足任意一个 - 在文件资料库中查找文件
locate [文件名]
updatedb
更新资料库 - 搜索命令所在目录及别名信息
which [命令名]
- 搜索命令所在目录及帮助文档路径
whereis [命令名]
- 在文件中搜寻字串匹配的行并输出
grep -iv [指定字串] [文件]
-i
不区分大小写
-v
排除指定字串
帮助命令
- 获得帮助信息
man [命令或配置文件]
- 获得命令的简单介绍信息
whatis 命令名
- 查询简短的配置文件的作用
apropos [配置文件名称]
- 获得Shell内置命令的帮助信息
help 命令名
用户管理命令
- 添加新用户
useradd 用户名
- 设置用户密码
passwd 用户名
- 查看登录用户信息
who
- 查看登录用户详细信息
w
压缩解压命令
- .gz格式压缩
gzip [文件]
解压缩gunzip [压缩文件]
只能压缩文件不能压缩目录 - 打包解包目录,压缩后文件格式为.tar.gz
tar 选项[-zxcf] [压缩后文件名] [目录]
-c
打包
-x
解包
-v
显示详细信息
-f
指定文件名
-z
打包同时压缩/解压缩 - .zip格式压缩
zip 选项[-r] [压缩后文件名] [文件或目录]
解压缩unzip [压缩文件]
压缩文件后保留原文件
-r
压缩目录 - .bz2格式压缩
bzip2 选项 [-k] [文件]
解压缩bunzip2 选项 [-k] [压缩文件]
-k
产生压缩文件后保留原文件
可与tar
结合使用
网络命令
- 给用户发信息,以Ctrl+D保存结束
write <用户名>
- 发广播信息
wall [message]
- 测试网络连通性
ping 选项 IP地址
- 查看和设置网卡信息
ifconfig 网卡名称 IP地址
- 查看发送电子邮件
mail [用户名]
- 列出目前与过去登入系统的用户信息
last
- 检查某特定用户上次登录时间
lastlog
- 显示数据包到主机间的路径
traceroute
- 显示网络相关信息
netstat [选项]
-t
TCP协议
-u
UDP协议
-l
监听
-r
路由
-n
显示IP地址和端口号
查看本机监听的端口netstat -tlun
查看本机的所有网络连接netstat -an
查看本机路由表(网关)netstat -rn
- 配置网络(Red Hat专有)
setup
- 设备挂载
mount [-t文件系统] 设备文件名 挂载点
关机重启命令
在服务器上重启需要先停掉服务,否则物理内存会坏。且远程服务器只能重启,关机后需要管理员手动开机
- 关机重启
shutdown [选项] 时间
-c
取消前一个关机命令
-h
关机
-r
重启
其他关机命令halt
poweroff
init 0
其他重启命令reboot
init6
- 系统运行级别
0 关机
1 单用户,进入选项菜单 只有root用户登陆进去 相当于Windows安全模式F8,只不过没有图形界面
2 不完全多用户,不含NFS服务,无图形界面、NFS网络文件系统,Linux之间文件传输共享方式,除了NFS服务,和3一样。
3 完全多用户
4 未分配
5 图形界面
6 重启 - 查询系统运行级别
runlevel
- 退出登录
logout
Shell
Xshell是连接远程服务器工具的一种,常用命令如下:
ssh 服务器ip # 连接服务器
rz -be # 上传文件至服务器(-b表示以二进制方式,默认为文本方式;-e对所有控制字符转义)
sz filename # 从服务器下载文件至本地
scp -r host@ip:服务器端文件 本地位置 # 从服务器下载文件至本地(位置互换为上传) -r表示文件夹 -v显示详情
python test.py # 执行代码
ps aux # 查看所有服务进程
top # 查看系统健康状态
pstree # 查看进程树
netstat -nlp # 查看服务对应端口
Shell脚本的执行方式
- echo输出命令
echo [选项] [输出内容]
-e
支持反斜线控制的字符转换 - 执行脚本的三种方式:
./xxx.sh
需要先赋予执行权限chmod 755 xxx.sh
. xxx.sh
bash xxx.sh
- 注意事项
- 脚本第一行的
#!/bin/Bash
不是注释,是标识下面的语句为Shell脚本 - ctrl+c终止当前命令;ctrl+d退出当前终端
- 脚本第一行的
Bash的基本功能
- 历史命令
history [选项] [历史命令保存文件]
-c
清空历史命令
-w
把缓存中的历史命令写入历史命令保存文件~/.bash_history
默认保存1000条,可在环境变量配置文件/etc/profile中进行修改 - 命令别名
alias 别名='原命令'
查询命令别名alias
删除别名unalias 别名
系统别名文件/root/.bashrc ,修改后永久生效
输入输出重定向
-
标准输入输出
| 设备 | 设备文件名 | 文件描述符 | 类型 |
|–|–|–|–|
| 键盘 | /dev/stdin | 0 | 标准输入 |
| 显示器 | /dev/sdtout | 1 | 标准输出 |
| 显示器 | /dev/sdterr | 2 | 标准错误输出 | -
输出重定向
| 类型| 符号| 作用|
|–|–|–|
| 标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输 出到指定的文件或设备当中
| 标准输出重定向 | 命令 >> 文件 | 以追加的方式,把命令的 正确输出输出到指定的文 件或设备当中
| 标准错误输出重定向 | 错误命令 2>文件| 以覆盖的方式,把命令的 错误输出输出到指定的文 件或设备当中
| 标准错误输出重定向 | 错误命令 2>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中
| 正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输 出和错误输出都保存到同 一个文件当中
| 正确输出和错误输出同时保存 | 命令 >> 文件 2>&1| 以追加的方式,把正确输 出和错误输出都保存到同 一个文件当中
| 正确输出和错误输出同时保存 | 命令 &>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
| 正确输出和错误输出同时保存 | 命令 &>>文件| 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
| 正确输出和错误输出同时保存 | 命令 >> 文件1 2>>文件2| 把正确的输出追加到文件1中,把错误的输出追加到文件2中
Bash的变量
-
本地变量
变量调用echo $name
查看当前系统全部变量set
变量删除unset nam e
-
环境变量
声明变量export 变量名=变量值
查询变量env
删除变量unset 变量名
Shell编程
- cut命令
cut [选项] 文件名
-f
列号,提取第几列
-d
分隔符,按照指定分隔符分割列
eg:cut -d ":" -f 1,3 /etc/passwd
以:为分隔符提取第一第三列
当文件以空格分隔而不是\t分隔时cut会提取出错 - printf命令
printf ’输出类型输出格式’ 输出内容
输出类型:
%ns
输出字符串。n是数字指代输出几个字符
%ni
输出整数。n是数字指代输出几个数字
%m.nf
输出浮点数。m和n是数字,指代输出的整数 位数和小数位数。如%8.2f代表共输出8位数, 其中2位是小数,6位是整数
输出格式:
\a
输出警告声音
\b
输出退格键,也就是Backspace键
\f
清除屏幕
\n
换行
\r
回车,也就是Enter键
\t
平输出退格键,也就是Tab键
\v
垂直输出退格键,也就是Tab键 - awk命令
awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
条件(Pattern):
一般使用关系表达式作为条件,x >= 10 判断变量 x是否大于等于10
动作(Action):
格式化输出 ,流程控制语句
BEGIN
END
FS内置变量
关系运算符 - sed命令
sed [选项] ‘[动作]’ 文件名
sed 是一种几乎包括在所有 UNIX 平台(包括 Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令
-n
一般sed命令会把所有数据都输出到屏幕 , 如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
-e
允许对输入数据应用多条sed命令编辑
-i
用sed的修改结果直接修改读取数据的文件, 而不是由屏幕输出
动作:
a \
追加,在当前行后添加一行或多行。添加多行时,除最后 一行 外,每行末尾需要用“\”代表数据未完结
c \
行替换,用c后面的字符串替换原数据行,替换多行时,除最 后一行外,每行末尾需“\”代表数据未完结
i \
插入,在当期行前插入一行或多行。插入多行时,除最后 一行外,每行末尾需要“\”代表数据未完结
d
删除,删除指定的行
p
打印,输出指定的行。
s
字串替换,用一个字符串替换另外一个字符串。格式为“行范 围s/旧字串/新字串/g”(和vim中的替换格式类似)
流程控制
if语句
# 1.单分支if条件语句
if [ 条件判断式 ] ; then
程序
fi
#或者
if [ 条件判断式 ]
then
程序
fi
# 2.双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
# 3.多分支if条件语句
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
„省略更多条件…
else
当所有条件都不成立时,最后执行此程序
fi
case语句
case $ 变量名 in
" 值1")
如果变量的值等于值1,则执行程序1
; ;
" 值2")
如果变量的值等于值2,则执行程序2
; ;
…省略其他分支…
* )
如果变量的值都不是以上的值,则执行此程序
; ;
esac
for循环
for 变量 in 值1 值2 值3
do
程序
done
for((初始值;循环控制条件;变量变化))
do
程序
done
while循环与until循环
# 条件成立时进入循环
while [ 条件判断式 ]
do
程序
done
# 条件不成立时进入循环
until [ 条件判断式 ]
do
程序
done
函数
[ function ] funname [()]{
action;
[return int;]
}
Git
# 项目提交
git init
git add 想要提交的文件
git commit -m "提交说明"
git remote add origin 仓库地址
git push -u origin master
# 更新仓库
git status # 检查是否在该分支下,若不在,切换分支git checkout 分支名。
git add 更新的文件名
git commit -m "更新说明"
git pull # 拉取当前分支最新代码
git push origin master # 上传
# 输入github账户用户名和密码
git config --global user.name "你的GitHub登陆名"
git config --global user.email "你的GitHub注册邮箱"
公司开发分支为develop,员工个人开发分支为personal_develop。员工每次开发需要将develop分支merge到自己分支,在此基础上开发。开发后再提交merge develop request
# 切换到主分支develop
git checkout develop
# 检查当前分支
git branch
# 将develop分支代码拉到本地
git pull
# 切换到个人分支
git checkout personal_develop
# 将develop分支合并到personal_develop
git merge develop
git clone url # 克隆项目代码
Vim
进入文件,如果没有则新建文件vim file_name
写入模式
i
进入写入模式并插入之前
I
行首插入a
插入之后
A
行尾插入o
下行插入
O
上行插入w
光标向下移动一个词
b
光标向上移动一个词
命令模式(normal模式)
:w
保存
:w new_filename
另存为指定文件:q
退出
:q!
不保存修改退出:wq
保存并退出ZZ
:wq!
保存修改并退出(文件所有者及root可使用)
visual模式
v
进入viual模式从当前位置开始选中- :normal A.jpg 选中的行尾全部加上.jpg后缀
- ctrl+v 选中块
<operation> <motion>
d ←→
删除光标 (d+6→
删除右边6个字符)
y ←→
复制光标 (y+3←
复制左边3个字符)
复制粘贴剪切
yy
复制当前行
nyy
复制当前行一下n行p
粘贴在当前行上
P
粘贴在当前行下dd
删除一行(其实是剪切)
ndd
删除当前行一下n行
D
删除光标所在行到文件末尾的内容
x
删除光标后一个字符
c
删除并进入写入模式ciw
词中删除一个词并进入写入模式 (change in word)
yi"
复制双引号中的内容并进入写入模式(yank in “”)
替换和取消
r
取代光标所在处字符R
从光标所在处开始替换字符,按Esc结束u
撤销
查找及替换
f
查找
/
搜索n
下一条结果
N
上一条结果:%s/old/new/g
全文替换指定字符串
:n1,n2s/old/new/g
在一定范围内替换指定字符串
移动
0
回到行首
$
移到行尾:1
或gg
跳到第一行
:$
或G
跳到最后一行
25gg
或25G
跳到第25行jkhl
上下左右
刷新分屏
:source $MYVIMRC
刷新vim:split
上下分屏
:vsplit
左右分屏
使用技巧
- 导入命令执行结果
r !命令
- 连续行注释
:n1,n2s/^/#/g
:n1,n2s/^#//g
:n1,n2s/^/\/\//g
环境搭建
#查看python版本
python(3) --version
# 查看所有的虚拟环境,带有星号*的为当前虚拟环境
conda info -e
# 创建虚拟环境
conda create -n your_venv_name python=x.x
virtualenv your_venv_name
# 进入指定虚拟环境
activate your_venv_name(Windows)
source your_venv_name(Linux)
# 退出当前虚拟环境
deactivate
# 删除虚拟环境
conda remove -n your_venv_name --all
# 查看已安装模块
pip list
pip freeze
# 批量安装
pip freeze > requirements.txt
pip install -r requirements.txt
# 普通下载
pip install virtualenv # 安装虚拟环境
参考博客
- Linux笔记目录
- Git相关命令
- 部署开发环境相关命令