【Linux】常用命令



2018年02月04日    Author:Guofei

文章归类: 0x11_算法平台    文章编号: 101

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/linux.html


文件和目录相关命令

目录

  • /: 根目录
  • /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

离线安装: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中的两个有用的命令

  1. sz 文件名
    下载文件到本地。
  2. 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


您的支持将鼓励我继续创作!