文件和目录相关命令
目录
/
: 根目录/bin
: 可执行二进制文件的目录/etc
: 系统配置文件存放的目录/home
: 用户家目录
clear # 清屏
# 重定向
ls > a.txt
ls >> a.txt # “追加” 保存
cd /home # 进入一个目录
cd .. # 返回上一级目录
cd ../.. # 返回上两级目录
cd ~ # 切换到当前用户的主目录
cd - # 返回上次所在的目录
pwd # 显示工作路径
# ls:查看
ls # 查看目录中的文件
ls my_dir # 查看 my_dir 目录中的文件
ls -l # 显示文件和目录的详细资料
# 结果类似
# drwxrwxr-x 2 codespace root 4096 Jun 14 02:20 _data
# 第一部分是:
# d:代表它是文件夹;r:代表有read读权限;w:write;x :执行权限;rwx:该用户所在用户组的权限;r-x:其它用户组的权限
# 2 代表文件被使用的次数
# codespace:当前用户
# root:当前用户组
ls -l # 显示的时间是修改时间 modification time
ls -l --time=atime # 显示最近访问时间 access time
ls -l --time=ctime # 显示 属性(如权限等)修改时间 status time
ls -a # 显示隐藏文件
ls *[0-9]* # 显示包含数字的文件名和目录名
ls -h # 文件的大小的单位加上 K/M/G,而不是一串数字 ,更美观
tree # 显示文件和目录由根目录开始的树形结构
tree -d # 仅显示目录
tree -L n # n代表数字..表示要显示几层...
tree -f # 显示完整路径..
tree -N # mac 中使用,防止乱码
参数
-a
隐藏的目录和文件也显示-d
只显示目录,不显示文件-D
列出文件或目录的更改时间。-f
在每个文件或目录之前,显示完整的相对路径名称。-L level
限制目录显示层级。-u
列出拥有者,没有对应的名称时,则显示用户识别码。
du -h -d 1 reading/
du -sh # 当前文件夹的大小
du -sh dir1 # 估算目录 dir1 已经使用的磁盘空间
du -sk * | sort -rn # 以容量大小为依据依次显示文件和目录的大小
mkdir dir1 # 创建一个叫做 'dir1' 的目录
mkdir dir1 dir2 # 同时创建两个目录
mkdir -p /tmp/dir1/dir2 # 创建一个目录树
# rm: 删除
rm -f file1 # 删除文件
rm -r dir1 # 删除一个叫做 'dir1' 的目录并同时删除其文件和子文件夹
rmdir dir1 # 删除目录,目录为空才行
cp file1 file2 # 复制一个文件
cp dir1 dir2 # 复制 dir1 到 dir2,不会复制子目录
cp -r dir1 dir2 # 复制 dir1 到 dir2,包括子目录
# -a :包括子目录,并且保持权限
mv dir1 new_dir # 移动/重命名 一个文件/目录
touch a.txt # 创建一个文件
软链接 ln -s
ln -s file1 lnk1 # 创建一个指向文件或目录的软链接。软链接就是“快捷方式”
# lnk1 中只是保存了 file1(如果是相对路径,就只保存相对路径;如果是绝对路径,就保存绝对路径,因此常常用绝对路径)
# 可以对文件创建软链接,也可以对文件夹创建软链接
# 创建软链接后的使用方式例如:cat lnk1; ls lnk1
ln file1 lnk1 # 创建一个指向文件或目录的物理链接
硬链接 ln
:相当于文件的别名,让多个文件名指向同一个文件
- 软链接指向的是文件名,硬链接指向的是文件数据(像内存的引用计数)
- 因此1:硬链接删除一个文件名,数据还在。从而可以防止误删导致的数据丢失。
- 因此2:创建硬链接可以不用绝对路径,因为是指向数据本身的。
- 因此2:不能给目录创建 硬链接
进程相关
ps # 查看进程
# -a 全部显示
# -u显示详细状态
# -x 显示没有控制终端的进程
top # 查看进程
# -M 根据内存陪许
# -P 根据CPU排序
# -T 根据进程时间
# q退出
kill [-signal] pid # 结束进程
权限相关
chgrp # 改变文件所属群组
chown # 改变文件拥有者
chmod # 改变文件的权限, SUID, SGID, SBIT等等的特性
whoami # 显示当前用户
who # 显示所有用户
find
find my_path -name file1.txt # 在 my_path 中查找 file.txt
# 可以使用通配符。*(0个或多个字符) 和 ?(1个字符)
find my_path -name "*.txt" # 在 my_path 中查找 '.txt' 结尾的文件
find my_path -name "file?.txt" # 查找类似 file1.txt 的文件
# 实际上,这些命令也可以使用通配符:ls、cp、mv
find my_path -user guofei # 在 my_path 中查找属于用户 'guofei' 的文件和目录
find my_path -type f -atime +100 # 搜索在过去100天内未被使用过的文件
find my_path -type f -mtime -10 # 搜索在10天内被创建或者修改过的文件
find my_path -name "*.txt" -exec cat {} \;
# 搜索所有的 *.txt 文件,然后用 cat 显示它们
# 解释: find [path] [expression] -exec [command] {} ; 允许匹配后执行某个命令
find my_path -name \*.rpm -exec chmod 755 '{}' \; # 搜索以 '.rpm' 结尾的文件并定义其权限
find my_path -xdev -name \*.rpm
# -xdev选项表示只在当前文件系统中搜索文件,不搜索其他挂载的文件系统
locate \*.ps # 寻找以 '.ps' 结尾的文件(先运行 'updatedb' 命令 )(基于数据库,速度比find快)
whereis ls # 显示一个二进制文件、源码或man的位置
which ls # 显示一个二进制文件或可执行文件的完整路径
# 案例:
# 删除空文件夹
find . type -d -empty|xargs rm -rf
# type -d 指的是类型为文件夹
# -empty 指的是空文件夹
# xargs 是把前一个命令的输出作为输入,例如 xargs -n 1 rm -f 读入一条数据
cat/tac/more:查看文件
cat file.txt # 从上到下的顺序预览文件。适合查看小型文件
# -b 打印行号,行号从 1 开始
# -n 打印行号,并且不跳过空白行
tac file.txt # 从下到上的顺序预览文件,这个命令名本身也是 cat 颠倒过来
more file.txt # 分屏预览某个文件。适合查看大型文件
# 按空格:翻到下一页
# 按回车:下一行
# /字符串:搜索下一个
# :f:显示当前行号
# q 退出
# b 往前翻
less file.txt # 效果和 more 类似,但是更多功能
head -n 20 file.txt # 显示前 20 行
tail -n 20 file.txt # 显示后 20 行
od file.txt -ta # 查看二进制文件
# -ta 以默认字符格式输出
# -tc 以 ASCII 码格式输出
# -td 十进制格式输出
# -to 八进制格式输出
# -tx 十六进制格式输出户
例子
cat file1.txt file2.txt > file3.txt
# 把两个文件的内容都显示出来,然后放到另一个文件中
touch
# touch
touch
# -a 修改 atime 到现在
# -c 修改 ctime 到现在
# -m 修改 mdate 到现在
touch -d "2 days ago" file.txt # 修改到 2 天前
touch -t 0712250000 file1 # 修改一个文件或目录的时间戳 - (YYMMDDhhmm)
另外,对于不存在的文件,touch 可以新建
vim
- 命令模式:在Linux终端中输入
vim 文件名
就进入了命令模式,但不能输入文字。 - 编辑模式:在命令模式下按
i
就会进入编辑模式,此时就可以编辑文件。按Esc
可回到命令模式。 - 末行模式:在命令模式下按
:
进入末行模式,左下角会有一个冒号出现,此时可以敲入命令并执行。按Esc
可回到命令模式。
命令模式:转到编辑模式:
i
o
当前行下面插入一个空行,并把光标移动过去,然后进入编辑模式O
当前行上面插入一个空行,并把光标移动过去,然后进入编辑模式r
替换光标处的字符R
替换当前字符及其后的字符,直到按 [ESC]
命令模式:复制黏贴
p
黏贴,配合下面的命令使用yy
拷贝1行nyy
拷贝n行dd
剪切1行3dd
剪切3行x
剪切光标所在位置X
剪切光标前一个位置db
从当前剪切到单词开头dw
从当前剪切到单词结尾ndd
剪切下面n行v
开启选中模型(V
开启行选中模式),然后可以配合y
,x
,p
命令模式:移动光标
L
当前屏幕底行H
当前屏幕头行M
当前屏幕中间行$
当前行尾0
当前行首w
下一个单词首部b
上一个单词}
下一个空白行{
上一个空白行
命令模式:其它常用
u
:撤销- / + 查找内容 :开始查找
- n:下一个目标
- N:上一个目标
>>
和<<
缩进
常用的末行命令:
:w
:写入磁盘:wq
退出保存:q!
退出不保存r filename
:将文件考到光标处:n
光标移动到第n行并回到命令模式:1,5s/hello/good
:从第一行到第五行,查找 hello,并替换为 good:%s/hello/good
:百分号代表查找替换全文
命令模式:其它
nyw:拷贝n个单词
%:自动匹配查找
a:追加到后面
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符
S: 删除指定数目的行,并以所输入文本代替之
d0: 删至行首
D: 删除光标处到行尾
d+}:删除光标所在处到下一个空白行
dG:删除光标处到文件结尾
vsp + 文件名垂直分屏
Ctrl+ww:不同屏幕切换
59,60s/源/目标/g 从59到60全部替换
%s/源/目标/g 全文替换
搜索:如果想搜索 ‘str_find’ 这个字符串,输入 ‘\str_find’
- 按
n
键可以调到下一个 - 按大写的
N
可以跳到上一个 (Cap Lock
后的N,或者shift+n
) - 从文件结尾向前搜索
?str_find
跳转
- 跳到最后一行,大写
G
, 或者shift+g
- 调到第一行,
gg
- vi加密。进入vi,输入”:” + “X” 之后就提示你输入两次密码。之后:wq 保存退出。再次进入时就提示你输入密码了。如果你不想要密码了,就:X 提示你输入密码时连续按两次回车,就搞定了。
grep:搜索文件中的字符串
# 从 a.txt 中找到字符串 guofei,并显示整个行
grep 'guofei' a.txt -n
# -n : 附加行号
# -i :匹配时忽略大小写
# -c : 返回匹配次数
# -v :反向选择(选择没匹配到的)
# grep 可以传入正则表达式
grep '^a' a.txt -n # 查找 a 开头的
# 案例:寻找 txt 文件
ls -l | grep .txt
# 案例:统计文件个数
# 统计当前文件夹下文件的个数
ls -l |grep "^-"|wc -l
# 统计当前文件夹下目录的个数
ls -l |grep "^d"|wc -l
# 统计当前文件夹下文件的个数,包括子文件夹里的
ls -lR|grep "^-"|wc -l
# 统计文件夹下目录的个数,包括子文件夹里的
ls -lR|grep "^d"|wc -l
解释
ls -l
列出文件和文件夹,ls -lR
递归列出文件和文件夹grep "^-"
筛选出以横线开头的,grep "^d"
筛选出以d开头的wc -l
计算有多少行
常用命令
帮助:man
man date
# 在 man page 中,可以按 “/” 进入搜索功能。按 “q” 推出页面。按空格换下一页。按B返回上一页。
时间
# 显示当前时间
date
# 按照指定的格式显示时间
date +%Y/%m/%d
date +%Y-%m-%d
date +%H:%M:%S
# 显示日历
cal
# 查询 2018/02 的日历
cal 02 2018
date +%Y-%m-%d --date '1 days ago'
DATE=$(date +%Y-%m-%d --date '1 days ago')
history:显示最近的命令
history [-raw] histfiles
# 选项与参数:
# n :数字,意思是“要列出最近的 n 笔命令列表”的意思!
# -c :将目前的 shell 中的所有 history 内容全部消除
# -a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,
# 则默认写入 ~/.bash_history
# -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
# -w :将目前的 history 记忆内容写入 histfiles 中!
登陆信息
登陆欢迎信息在 /etc/issue 里
系统相关
# 打开一个简单的计算机
bc
关机、重启
# 将数据同步写入硬盘中
sync
# 关机
shutdown
重新开机,关机: reboot, halt, poweroff
shutdown [-krhc] [时间] [警告讯息]
# -k : 不要真的关机,只是发送警告讯息出去!
# -r : 在将系统的服务停掉之后就重新开机(常用)
# -h : 将系统的服务停掉后,立即关机。 (常用)
# -c : 取消已经在进行的 shutdown 指令内容。
# 时间 : 指定系统关机的时间,默认 1 分钟
# 例子
shutdown -h 10 'I will shutdown after 10 mins'
reboot # 系统重新开机
halt # 系统停止~屏幕可能会保留系统已经停止的讯息
poweroff # 系统关机,所以没有提供额外的电力,屏幕空白!
base64
# 把文件做 base64 编码
base64 -i file.zip>a.txt
base64 -d -i a.txt -o file2.zip
# -i: input
# -d: decode
查看系统配置
uname -r # 查看核心版本
uname -m # 查看操作系统版本
uname # 查看平台
硬盘
/dev/sd[a-p][1-128]:为实体磁盘的磁盘文件名;
/dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名
看文件的 inode 信息
ls -li
df:列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
tar
tar 只是打包,不是压缩
tar -cf archive.tar file1 # 打包
tar -tf archive.tar # 显示包中的内容
tar -xf archive.tar # 解包
tar -rf archive.tar b.txt # 向一个已存在的 tar 文件中添加一个新文件
# -c 产生新的包
# -f 指定包的文件名
# -x 解包
# -r 往包内增加文件; -u 更新文件
# -t 列出文件
# -v 显示正在处理哪个文件
# -C 指定解压缩到哪个目录
# 压缩算法:
# -z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
# -j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
tar -jcvf archive.tar.bz2 tmp # 打包压缩
tar -jtvf archive.tar.bz2 # 显示压缩包
tar -jxvf archive.tar.bz2 # 解压缩
tar有很多参数,下面列出常用的:
tar -cf all.tar *.jpg # 将所有.jpg的文件打成一个名为all.tar的包。
tar -uf all.tar logo.gif # 更新原来tar包all.tar中logo.gif文件
tar -cvf archive.tar file1 file2 dir1 # 打包一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
zip
zip -r FileName.zip DirName # 压缩
# -r :打包所有子文件夹
zip FileName.zip a.txt
# 如果 FileName.zip 存在,那么把 a.txt (以覆盖方式)添加进去
unzip FileName.zip # 解压
# -d :解压缩到指定目录,例如 unzip -d ./path2 a.zip
# -P :指定密码
# -9 :指定压缩级别
详情链接
可以比较一下Python的zip操作
程序结构
命令
设置别名
# 设置别名
alias guofei_ls='ls -la'
# 看一个命令是否是系统命令
type cd
type guofei_ls
换行符
# 反斜杠用来换行
cd\
path1
赋值
# 赋值
x=ls
# 1. 等号两边不能有空白
# 2. 变量名不能是数字开头
# 3. 被赋值的字符串如果有空格,必须加引号
# 4. 赋值可以嵌套,例如:
var="lang is $LANG"
echo ${var} # 显示:lang is zh_CN.UTF-8,可以理解为赋值的时候做了字符串替换,之后改变 LANG 变量也不会导致 var 被改变。
# 5. 等号右边加括号,表示右边是命令
x=$(ls)
echo $x # 显示之前的 ls 的返回
${x} -la
# 1. 前加$表示取出变量值,或者 $x 也有一样效果
# 2. 取出后可以作为命令的一部分直接使用,也可以显示:
echo $x
# 取消赋值
unset x
变量用于子程序
cd /lib/modules/$(uname -r)/kernel
# uname -r 代表 20.3.0
# 上面代表 cd 到 /lib/modules/20.3.0/kernel
export x='ls' # 加 export 后,可以被子程序使用
export # 单独的会吧所有变量都显示出来
一些环境变量
HOME # 用户主文件夹
SHELL # 所使用的 SHELL程序,Linux 默认是 /bin/bash
HISTSIZE # 可以记录多少历史命令
PATH # 变量目录
LANG # 语言
RANDOM # 0~32767 的随机数
read
# 用来读取用户输入
read [-pt] variable
# -p:后接提示字符
# -t:等待秒数
# 例子:
read -p "Please keyin your name in 30s: " -t 30 your_name
echo $your_name
declare
declare [-aixr] variable
# -a : array 类型
# -i :integer 类型
# 不支持浮点类型
# 例子:
x=100+200 # 其实是字符串加
declare -i x=100+200 # 这才是数字加
var[1]='a';var[2]='b'
echo "${var[1]},${var[2]}"
管道
cmd1 && cmd2 # cmd1 正确执行,则开始执行 cmd2
cmd1 || cmd2 # cmd1 执行且错误,则开始执行 cmd1
# 例子:
ls /tmp/vbirding && echo "exist" || echo "not exist"
# 若存在,这显示 exist,否则显示 not exist
cut:分割字符串,然后取出第n个
# cut -d '分隔字符' -f fields
echo $PATH |cut -d ':' -f 3
/home/guofei/anaconda3/bin
# 按冒号分割,然后取第3个
重定向
ls > file.txt
# 添加到文件的末尾
ls >> file.txt
管道
tree | more
# 把第一个命令的结果,当成“文件”;然后把它放到第二个命令中
# 上面的命令相当于两条命令 tree > file.txt; more file.txt
script
如何传参?
# file.sh
echo "param 0: ${0}"
echo "param 1: ${1}"
echo "param 2: ${2}"
调用 sh 文件
bash file.sh a b
# 结果:
# param 0: file.sh
# param 1: a
# param 2: b
可以用 shift 来偏移参数号(用的时候详查)
流程控制
if
if [ 条件 ]; then
执行
fi
if [ 条件 ]; then
执行
else
执行
fi
if [ 条件 ]; then
执行
elif [[ condition ]]; then
#statements
else
执行
fi
read ny;
if [ "${ny}" == "y" ]||[ "${ny}" == "Y" ];then
echo "yes";
elif [ "${ny}" == "n" ]||[ "${ny}" == "N" ];then
echo "no";
else
echo "what?";
fi
# || 是或, && 是且
函数
function print_it(){
echo "param 0: ${0}"
echo "param 1: ${1}"
echo "param 2: ${2}"
}
# 如何调用
print_it 1 2
# 打印:
# param 0: -bash
# param 1: 1
# param 2: 2
while 循环
while [[ condition ]]; do
#statements
done
until [[ condition ]]; do
#statements
done
sum=0 # 这是加总的数值变数
i=0 # 这是累计的数值,亦即是 1, 2, 3....
while [ "${i}" != "100" ]; do
i=$(($i+1)) # 每次 i 都会增加 1
sum=$(($sum+$i)) # 每次都会加总一次!
done
echo "The result of '1+2+3+...+100' is ==> $s"
for循环
sum=0; i=0;
for (( i = 0; i < 10; i++ )); do
i=$(($i+1)) # 每次 i 都会增加 1
sum=$(($sum+$i)) # 每次都会加总一次!
done
echo $sum
for x in one two three four
do
echo number $x
done
权限相关
chmod
- 用户组可以是
u
(user,所有者)、g
(group,所属组)、o
(other,其他人)或者a
(all,所有人)。 - 操作符可以是
+
(添加权限)、-
(去除权限)或者=
(设置权限)。 - 权限可以是
r
(读取权限)、w
(写入权限)或者x
(执行权限)。
例如,要将文件file.txt的所有者和所属组的权限设置为读取和写入,其他人的权限设置为只读,可以执行以下命令:
chmod u+rw,g+rw,o+r file.txt
# (另外,还可以以数字的形式实现,不写了)
# 如何把权限全部去掉
chmod a=- file.txt
另外,在执行 ls -l
命令的时候,第一部分,形如 drwxr-xr-x
- 第一个字符,
-
代表文件,d
代表目录 - 接下来3个字符代表 user 的权限
rwx
分别代表 read,write,execute - 接下来3个字符代表 group 的权限
- 接下来3个字符 other 的权限
用户相关
whoami # 显示当前用户
who # 列出正在登陆的用户
passwd # 修改当前用户的密码
exit # 退出登陆
新建用户
# 新建用户
sudo useradd -m guofei2 -g my_group
# 创建一个用户 guofei,它属于一个用户组 my_group
# -m 同时创建用户目录
# 如果不指定 -g,那么会创造一个和用户名相同的用户组
# 给新用户设置密码
sudo passwd guofei2
# 列出所有用户
cat /etc/passwd
# 显示的某一行格式如下:
# guofei2:x:1001:1001::/home/guofei2:/bin/sh
# 每一项意义如下:
# 用户名、密码占位符、uid(用户id)、gid(组id)、用户描述(可选)、用户主目录、用户 shell 类型
# 列出所有的用户组
cat /etc/group
# 显示的某一行如下:
# guofei2:x:1001:
# 也可以用这个命令查看用户信息
id # 所有用户
id guofei2 # 查看某个用户
# 显示如下:
# uid=1001(guofei2) gid=1001(guofei2) groups=1001(guofei2)
# 切换到另一个用户
su guofei2
su - guofei2 # (更常用)切换到用户 guofei2,然后切换到 guofei2 的工作目录,同时加载 guofei2 的环境变量
# 修改用户组
usermod
# -g 修改用户组
# -G 设置一个附加组
# 例子:给用户 guofei2 设置一个附加组 sudo:
sudo usermod -G sudo guofei2
# 这样,用户 guofei2 可以使用 sudo 权限了
# 修改附加组
gpasswd
# -a 添加附加组
# -d 删除附加组
gpasswd -d guofei2 sudo # 从 guofei2 删除附加组 sudo
# 删除用户
userdel -r guofei2
# -r 同时删除用户主目录,同时删除同名的用户组
# 创建用户组
groupadd my_group
# 删除用户组
groupdel my_group
# 用户组下面没有用户,才能删
软件
查看已经安装的软件
# 最常用
pkg -l | grep ruby
apt list
# rpm包安装的
rpm -qa | grep ruby
# 以deb包安装的
dpkg -l | grep ruby
# yum方法安装的
yum list installed | grep ruby
# 如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了,
# 上面两种方法都看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。
# 说明:其中rpm yum 是Redhat系linux的软件包管理命令,dpkg是debian系列的软件包管理命令
安装软件
apt-get update
# 基础软件
apt-get install sudo
sudo apt update
# 常用工具
# 安装 gcc/g++/make 等编译和构建所需的基本软件
sudo apt install build-essential
sudo apt install gcc
gcc --version
# ifconfig:
sudo apt install -y net-tools
# tree:
sudo apt install tree
# 安装git:
sudo apt install git
# 用 sudo apt install git-all 安装所有额外组件
# 看CUDA:
nvidia-smi
nvcc --version
离线安装:deb文件
# 安装
sudo dpkg -i package.deb
# 卸载
dpkg -i package
# 查询
dpkg -l package
安装anaconda
# 下载安装包 https://www.anaconda.com/products/individual
# 用 sh 命令运行下载好的安装包 sh **.sh
# 设置环境变量:
export ANACONDA_HOME='root/anaconda3' # 这里填入你安装 anaconda的目录
export PATH=$ANACONDA_HOME/bin:$PATH
source ~/.bashrc
docker:https://docs.docker.com/engine/install/ubuntu/ pycharm:https://www.anaconda.com/pycharm
使用软件
pyspark
spark-shell
重装linux系统
下载Ubuntu:https://ubuntu.com/download/desktop
下载 Ubuntu 推荐的 烧录工具
- MacBook:https://www.balena.io/etcher/
- Windows:https://rufus.ie/zh/
远程连接 linux 服务器
ssh 远程连接服务器
# linux 服务器上安装
sudo apt install -y openssh-server
# 在本地:
ssh user@ip # ssh 连接服务器
# -f SSH连接成功后,转入后台运行。用来在不中断SSH连接的情况下,在本地shell中执行其他操作。
# -p 22 请求 22 端口
# -N 表示只连接远程主机,不打开远程shell
exit # 退出
使用 linux 上的 jupyter
export remote_ip=10.10.10.10
# 把本地的 9987 端口和服务器的 8888 连接起来(先确保本地的 9987 端口没被占用)
ssh -f guofei@${remote_ip} -N -L 9987:localhost:8888
# 远程连接并开启 jupyter:
ssh guofei@${remote_ip}
jupyter-lab --no-browser --port=8888
# 本地打开浏览器 http://localhost:9987/lab?token=123
远程传文件
# 本地的 bash 里面
scp /Users/guofei/Desktop/me.png guofei@10.10.10.10:me.png
下载上传文件
补充xshell中的两个有用的命令
- sz 文件名
下载文件到本地。 - rz
跳出窗口让你选择上传的文件,然后上传。
参考文献
关于Linux命令的: https://www.cnblogs.com/yjd_hycf_space/p/7730690.html
关于压缩解压缩的:http://blog.csdn.net/radianceblau/article/details/54925014
查找已安装的文件:http://blog.hexu.org/archives/1158.shtml