Skip to content

Linux 学习笔记

Linux 安装

VMware Workstation下载

登录官网

注册登录后点击这里的所有产品

打开后直接ctrl+f搜索workstation就找到了,选 player~(需要多处理器等高级功能就下Pro,但是需要许可证)

VMware 配置

下载完成后安装,无脑下一步即可

安装的时候,来到这个网站找系统镜像

NEXT, ITELLYOU

找到想要的系统迅雷下载~

安装完成后打开,选择创建新虚拟机

点击浏览找到下好的镜像系统

输入用户名密码

起个名字,在电脑里找个地方大的位置

无脑下一步开始啦

点击自定义硬件

差不多这么设置下就行了,以后也可以再改

等待安装完成进入系统后,登录账户(微软账户即可),然后一直next就完成了

相关软件包安装

安装 Vim

Linux 必不可少的,先装个 Vim

sudo apt install vim

输入密码,敲个Yes或者Y等他自己安装就行~轻轻松松

安装 Git

在配置服务器或者共享文件夹之前,git用来互相传文件还是挺好用的

sudo apt install git

还是输入密码,确认后自动安装完成~

安装 Flex

向作业低头,被迫下载

sudo apt-get install flex

安装 bison

为了作业再低一次头

sudo apt-get install bison

安装 python-qt4

低了两次也不少这一次了

sudo apt-get install python-qt4

不出意外会因为少什么东西报错。。。。

先输入sudo add-apt-repository ppa:rock-core/qt4

然后跳转到download目录下cd ~/Downloads

依次输入

wget http://archive.ubuntu.com/ubuntu/pool/universe/q/qt-assistant-compat/libqtassistantclient4_4.6.3-7build1_amd64.deb

sudo apt-get install ./libqtassistantclient4_4.6.3-7build1_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/universe/p/python-qt4/python-qt4_4.12.1+dfsg-2_amd64.deb

sudo apt-get install ./python-qt4_4.12.1+dfsg-2_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/universe/p/python-pyaudio/python-pyaudio_0.2.11-1build2_amd64.deb

sudo apt-get install ./python-pyaudio_0.2.11-1build2_amd64.deb

然后再进行sudo apt-get install python-qt4就好啦~

成功打开~~

如果出现如下错误:

Failed to load module "canberra-gtk-module"

输入:sudo apt-get install libcanberra-gtk-module即可

文件交互

指令操作

ctrl c:取消命令,并且换行

ctrl u:清空本行命令

tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项

ls:列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件

pwd:显示当前路径

cd XXX:进入XXX目录下,

cd ../:返回上层目录

cp XXX YYY:将xx文件复制成YYYXXXYYY可以是一个路径,比如../dir_c/a.txt,表示上层目录下的dir_c 文件夹下的文件a.txt

mkdir XXX:创建目录XXX

rm XXX:删除普通文件:

rm XXX -r:删除文件夹

mv XXX YYY:将XXX文件移动到YYY,和cp命令一样,XXXYYY可以是一个路径﹔重命名也是用这个命令

touch XXX:创建一个文件

cat XXX:展示文件XXX中的内容

相关练习

  1. 进入homework_0文件夹,分别创建文件夹dir_a, dir_b,dir_c
shell
cd homework_0
mkdir dir_a dir_b dir_c
  1. 进入homework_1文件夹,将a.txt,b.txt,c.txt分别复制成:a.txt.bak, b.txt.bak,c.txt.bak
shell
cd homework_1
for var in *.txt;
do 
    cp "$var" "${$var%.txt}.txt.bak"
done
  1. 进入homework 2文件夹,将a.txt,b.txt,c.txt分别重命名为:a_new.txt,b_new.txt,c_new.txt
shell
cd homework_2
for var in *.txt;
do 
    cp "$var" "${$var%.txt}.new.txt"
done
  1. 进入homework _3文件夹,将dir_a文件夹下的a.txt,b.txt,c.txt分别移动到文件夹dir_b
shell
cd homework_3
mv dir_a/* dir_b
  1. 进入homework_4文件夹,将普通文件a.txt, b.txt,c.txt删除
shell
cd homework_4
rm *
  1. 进入homework_5文件夹,将文件夹dir_a, dir b, dir_c删除
shell
cd homework_5
rm * -r
  1. 进入homework_6文件夹,查看task.txt的内容,并按其指示进行操作
shell
cd homework_6
cat task.txt
// 将task.txt重命名为done.txt,创建目录dir_a,将done.txt移动到目录dir_a下
mkdir dir_a
mv task.txt dir_a/done.txt
  1. 进入homework_7文件夹,创建文件夹dir_0, dir_1, dir_2,将a.txt,b.txt,c.txt复制到dir_0 下,重命名为a0.txt,b0.txt,c0.txt;将a.txt,b.txt,c.txt复制到dir_1下,重命名为a1.txt, b1.txt,c1.txt ;将a.txt,b.txt,c.txt复制到dir_2下,重命名为a2.txt,b2.txt,c2.txt;
shell
cd homework_7
for i in {0..2}
do 
	mkdir "dir_$i"
	for var in *.txt
	do 
		cp "$var" "dir_$i/${var%.txt}$i.txt"
	done
done
  1. 进入homework_8文件夹,分别在dir_a, dir_b, dir_c文件夹下查看task.txt的内容,并分别按照指示进行操作
shell
cd homework_8cd dir_acat task.txt// 将a.txt删除rm a.txtcd ../dir_bcat task.txt// 将b.txt重命名为b_new.txtmv b.txt b_new,txtcd ../dir_ccat task.txt// 将c.txt复制成c.txt.bakcp c.txt c.txt.bak
  1. 进入homework_9文件夹,将其中所有txt类型的文件删除
shell
cd homework_9r

tmux 教程

功能

  1. 分屏。
  2. 允许断开Terminal连接后,继续运行进程。

结构

一个`tmux`可以包含多个`session`,一个`session`可以包含多个`window`,一个`window`可以包含多个pane。

实例

shell
        tmux:
            session 0:
                window 0:
                    pane 0
                    pane 1
                    pane 2
                    ...
                window 1
                window 2
                ...
            session 1
            session 2
            ...

操作

  1. tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。
  2. 按下Ctrl + a后手指松开,然后按%:将当前pane左右平分成两个pane。
  3. 按下Ctrl + a后手指松开,然后按":将当前pane上下平分成两个pane。
  4. Ctrl + d:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。
  5. 鼠标点击可以选pane。
  6. 按下ctrl + a后手指松开,然后按方向键:选择相邻的pane。
  7. 鼠标拖动pane之间的分割线,可以调整分割线的位置。
  8. 按住ctrl + a的同时按方向键,可以调整pane之间分割线的位置。
  9. 按下ctrl + a后手指松开,然后按z:将当前pane全屏/取消全屏。
  10. 按下ctrl + a后手指松开,然后按d:挂起当前session。
  11. tmux a:打开之前挂起的session。
  12. 按下ctrl + a后手指松开,然后按s:选择其它session。

​ 方向键 —— 上:选择上一项 session/window/pane

​ 方向键 —— 下:选择下一项 session/window/pane

​ 方向键 —— 右:展开当前项 session/window

​ 方向键 —— 左:闭合当前项 session/window

  1. 按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window。
  2. 按下Ctrl + a后手指松开,然后按w:选择其他window,操作方法与12. 完全相同。
  3. 按下Ctrl + a后手指松开,然后按PageUp:翻阅当前pane内的内容。
  4. 鼠标滚轮:翻阅当前pane内的内容。

vim 教程

功能

  1. 命令行模式下的文本编辑器。
  2. 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。

模式

  1. 一般命令模式

​ 默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。

  1. 编辑模式

​ 在一般命令模式里按下i,会进入编辑模式。

​ 按下ESC会退出编辑模式,返回到一般命令模式。

  1. 命令行模式

​ 在一般命令模式里按下:/?三个字母中的任意一个,会进入命令行模式。命令行在最下面。

​ 可以查找、替换、保存、退出、配置编辑器等。

操作

  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. :nnGn为数字,光标移动到第n
  12. gg:光标移动到第一行,相当于1G
  13. n<Enter>:n为数字,光标向下移动n
  14. /word:向光标之下寻找第一个值为word的字符串。
  15. ?word:向光标之上寻找第一个值为word的字符串。
  16. n:重复前一个查找操作
  17. N:反向重复前一个查找操作
  18. :n1,n2s/word1/word2/gn1n2为数字,在第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. Ctrl + q:当vim卡死时,可以取消当前正在执行的命令

相关练习

  1. 进入homework_0文件夹,创建文件names.txt,并顺次将下列姓名写入该文件,每个名字占一行。 AcWing、yxc、Bob、张强、李明、Alice
shell
  cd homework_0
  vim names.txt
  iAcwing<Enter>yxc<Enter>Bob<Enter>张强<Enter>李明<Enter>Alice
  <Esc>
  :wq
  1. 进入homework_1文件夹,打开problem.txt,并依次删除下列字符:

  2. 最后一行第101个字符.

  3. 3行第8个字符

  4. 1行第30个字符

  5. 16行第55个字符

  6. 9行第80个字符

  7. 最后保存文件并退出。

shell
cd homework_1
vim problem.txt
G101<Space>i<backspace>Esc
3G8<Space>i<backspace>Esc
gg30<Space>i<backspace>Esc
16G55<Space>i<backspace>Esc
9G80<Space>i<backspace>Esc
:wq
  1. 进入 homework_2文件夹,打开problem.txt,并依次执行如下操作:
  2. 在第1个"two"的后面添加"abc"
  3. 在第2个"two"的前面添加"def"
  4. 将第3个"two"后面的连续12个字符删掉
  5. 将第4个"two"所在的行删掉
  6. 最后保存文件并退出。
shell
cd homework_2
vim problem.txt
gg
/two<Enter>
3<Space>iabc<Esc>
nidef<Esc>n
n3<Space>d12<Space>
ndd
:wq
  1. 进入homework_3文件夹,打开problem.txt,并依次执行如下操作:

  2. 将第5行至第15行中所有of替换成OF

  3. 将全文中所有的the替换成THE

  4. 将第偶数个is替换成IS,第奇数个is不变。下标从1开始。

shell
cd homework_3
vim problem.txt
:5,15s/of/OF/g
:1,$s/the/THE/g
:1,$s/is/IS/gcnynynynynyny...
  1. 进入homework_4文件夹,打开problem.txt,并依次执行如下操作:

  2. 删除第11

  3. 将所删除的行粘贴到文件最后一行的下一行

  4. 复制第5

  5. 将所复制的行粘贴到文件当前最后一行的下一行

shell
cd homework_4
vim problem.txt
11GddGp5GyyGp
:wq
  1. 进入homework_5文件夹,打开problem.txt,并依次执行如下操作:
  2. 删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符)
  3. 将所删除的内容粘贴到文件末尾(注意不要另起一行)
  4. 复制第5行第88个个字符(包含该字符)至第7行第6个字符(包含该字符)
  5. 将所复制的内容粘贴到当前文件末尾(注意不要另起一行)
shell
cd homework_5
vim problem.txt
11G14<Space>v13G5<Space>dG$p
5G87<Space>v7G6<Space>yG$p
  1. 进入homework_6文件夹,并依次执行如下操作:
  2. 清空source0.cpp
  3. source1.cpp中的第1-3行和第12-24行复制到source0.cpp
shell
cd homework_5
vim source0.cpp
ggdG:wq
vim source1.cpp
1Gv3G$y:q
vim source0.cpp
p:wq
vim source1.cpp
12Gv24G$y:q
vim source0.cpp
G$i<Right><Enter><Esc>p:wq
  1. 进入homework_7文件夹,格式化source.cpp
shell
cd homework_7
vim source.cpp
gg=G
  1. 进入homework_8文件夹,打开source.cpp,并依次执行如下操作:
  2. 将第15-21行向右缩进2
  3. 将第22-23行向左缩进1次。
shell
cd homework_8
vim source.cpp
15Gv21G>15Gv21G>
22Gv23G<

进入homework_9文件夹,打开链接:https://www.acwing.com/activity/content/code/content/1694465/新建文件source.cpp,将链接中的代码抄进source.cpp文件中。

shell
cd homework_9
vim source.cpp
#include <iostream>

using namespace std;

int main()
{
    int a, b;
    cin >> a >> b;
    cout << a + b << endl;
    return 0;
}
<Esc>:wq

shell 学习

Linux系统中一般默认使用bash,文件格式为.sh

文件开头需要写#! /bin/bash,指明bash为脚本解释器。

运行方式

shell
$ chmod +x test.sh  # 使脚本具有可执行权限
$ ./test.sh  # 当前路径下执行
$ bash test.sh	# 用解释器执行

注释

shell
# 单行注释
:<<{string}
	多行注释,string为任意字符串
{string}

变量

定义变量

不加空格

power=Gettler

使用变量

大括号加不加均可,起标记边界作用

echo ${power}

只读变量

使用readonly或者declare可以将变量变为只读。

shell
name=yxc
readonly name
declare -r name  # 两种写法均可

name=abc  # 会报错,因为此时name只读

删除变量

unset可以删除变量。

shell
name=yxc
unset name
echo $name  # 输出空行

变量类型

  1. 自定义变量(局部变量)子进程不能访问的变量
  2. 环境变量(全局变量)子进程可以访问的变量

自定义变量改成环境变量:

shell
$ name=yxc  # 定义变量
$ export name  # 第一种方法
$ declare -x name  # 第二种方法

环境变量改为自定义变量:

shell
$ export name=yxc  # 定义环境变量
$ declare +x name  # 改为自定义变量

字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号与双引号的区别:

  1. 单引号中的内容会原样输出,不会执行、不会取变量;
  2. 双引号中的内容可以执行、可以取变量;
shell
   name=yxc  # 不用引号
   echo 'hello, $name \"hh\"'  # 单引号字符串,输出 hello, $name \"hh\"
   echo "hello, $name \"hh\""  # 双引号字符串,输出 hello, yxc "hh"

获取字符串长度

shell
name="yxc"
echo ${#name}  # 输出3

提取子串

shell
name="hello, yxc"
echo ${name:0:5}  # 提取从0开始的5个字符

数组

数组中可以存放多个不同类型的值,只支持一维数组,初始化时不需要指明数组大小。 数组下标从0开始。

定义

数组用小括号表示,元素之间用空格隔开。例如:

shell
array=(1 abc "def" yxc)

也可以直接定义数组中某个元素的值:

shell
array[0]=1
array[1]=abc
array[2]="def"
array[3]=yxc

读取数组中某个元素的值

格式:

shell
${array[index]}

例如:

shell
array=(1 abc "def" yxc)
echo ${array[0]}
echo ${array[1]}
echo ${array[2]}
echo ${array[3]}

读取整个数组

格式:

shell
${array[@]}  # 第一种写法
${array[*]}  # 第二种写法

例如:

shell
array=(1 abc "def" yxc)

echo ${array[@]}  # 第一种写法
echo ${array[*]}  # 第二种写法

相关练习

  1. 进入homework_0文件夹,编写自动完成lesson_1作业的脚本helper.sh。要求:
  2. 当前目录下仅包含helper.sh
  3. helper.sh具有可执行权限
  4. 在任意路径依次执行下列命令后,lesson_1的作业可以得到满分:
shell
homework 1 create
/home/acs/homework/lesson_3/homework_0/helper.sh
shell
# echo "helloworld"

# homework_0

dir=/home/acs/homework/lesson_1/homework_

for i in dir_a dir_b dir_c
do
    mkdir ${dir}0/$i
done

# homework_1


for i in a b c
do
    cp ${dir}1/${i}.txt ${dir}1/${i}.txt.bak
done

# homework_2

for i in a b c
do
    mv ${dir}2/${i}.txt ${dir}2/${i}_new.txt
done

# homework_3

for i in a b c
do
    mv ${dir}3/dir_a/${i}.txt ${dir}3/dir_b/${i}.txt
done

# homework_4

for i in a b c
do
    rm ${dir}4/${i}.txt
done

# homework_5

for i in a b c
do
    rm ${dir}5/dir_${i} -r
done


# homework_6

mkdir ${dir}6/dir_a
mv ${dir}6/task.txt "${dir}6/done.txt"

mv "${dir}6/done.txt" "${dir}6/dir_a"

# homework_7

for i in $(seq 0 2)
do
    mkdir ${dir}7/dir_${i}
    for j in a b c
    do
        cp ${dir}7/${j}.txt ${dir}7/dir_${i}/${j}${i}.txt
    done
done

# homework_8

rm ${dir}8/dir_a/a.txt

mv ${dir}8/dir_b/b.txt ${dir}8/dir_b/b_new.txt

cp ${dir}8/dir_c/c.txt ${dir}8/dir_c/c.txt.bak

# homework_9

rm ${dir}9/*.txt
  1. 进入homework_1文件夹,编写脚本check_file.sh。要求:
  2. 当前目录下仅包含check_file.sh
  3. heck_file.sh具有可执行权限。
  4. check_file.sh接收一个传入参数。格式为 ./check_file.sh file
  5. 判断传递参数,分别在标准输出中输出如下内容(不包括双引号): 1. 如果传入参数个数不是1,则输出一行:arguments not valid,然后退出,退出状态等于1。 2. 如果file文件不存在,则输出一行:not exist,然后退出,退出状态等于2。 3. 如果file文件存在,则输出分别进行如下5个判断,然后退出,退出状态等于0。
    1. 如果file为普通文件,则输出一行:regulare file
    2. 如果file为目录(文件夹),则输出一行:directory
    3. 如果file具有可读权限,则输出一行:readable
    4. 如果file具有可写权限,则输出一行:writable
    5. 如果file具有可执行权限,则输出一行:executable
shell
#! /bin/bash

if [ $# -ne 1 ]
then
    echo arguments not valid
    exit 1
fi

if [ -e "$1" ]
then
    if [ -f "$1" ]
    then
        echo regulare file
    fi

    if [ -d "$1" ]
    then
        echo directory
    fi

    if [ -r "$1" ]
    then
        echo readable
    fi
    
    if [ -w "$1" ]
    then
        echo writable
    fi
    
    if [ -x "$1" ]
    then
        echo executable
    fi
    
    exit 0
else
    echo not exist
    exit 2
fi
  1. 进入homework_2文件夹,编写脚本main.sh。要求:

  2. 当前目录下仅包含main.sh

  3. main.sh具有可执行权限

  4. 该文件从stdin(标准输入)中读取一个整数n

  5. stdout(标准输出)输出斐波那契数列的第n项。即:a[0] = 1, a[1] = 1, a[i] = a[i - 1] + a[i - 2], 求a[n]

  6. 数据保证 0 <= n <= 20,脚本不需要判断n的合法性。

shell
#! /bin/bash
read n
a[0]=1
a[1]=1
for((i=2;i<=n;i++))
do
    a[i]=$(expr ${a[i-1]} + ${a[i-2]})
done
echo ${a[n]}
  1. 进入homework_3文件夹,编写脚本main.sh。要求:
  2. 当前目录下仅包含main.sh
  3. main.sh具有可执行权限
  4. 该文件从stdin(标准输入)中读取两行整数nm
  5. stdout(标准输出)中输出1~n的按字典序从小到大的顺序数第m个全排列,输出一行,用空格隔开所有数,行末可以有多余空格。
  6. 数据保证 1 <= n <= 10, 1 <= m <= min(100, n!),脚本不需要判断数据的合法性。
shell
#! /bin/bash

read n
read m

for ((i = 1; i <= n; i++))
do
    st[$i]=0
done

dfs(){
    if [ $1 -eq $n ]
    then
        m=`expr $m - 1`
        if [ $m -eq 0 ]
        then
            echo ${path[@]}
            return 0
        fi
        return 1
    fi
    local j=0
    for((j = 1; j <= n; j++))
    do
        if [ ${st[$j]} -eq 0 ]
        then
            path[$1]=$j
            st[$j]=1
            if dfs `expr $1 + 1`
            then
                return 0
            fi

            st[$j]=0
        fi
    done

    return 1
}


dfs 0

==if 后边必须加空格!!! ==

  1. 进入homework_4文件夹,编写脚本main.sh。要求:
  2. 当前目录下仅包含main.sh
  3. main.sh具有可执行权限
  4. main.sh接收两个传入参数。格式为 ./main.sh input_file output_file
  5. input_file中读取一个正整数n,然后将前n个正整数的平方和写入output_file
  6. 数据保证 1 <= n <= 100,脚本不需要判断所有数据的合法性。
shell
#! /bin/bash

input_file=$1
output_file=$2

read n < $input_file

sum=0

for ((i = 1; i <= n; i++))
do
    a=`expr $i \* $i`
    sum=`expr $sum + $a`
done

echo $sum > $output_file

ssh 学习

ssh 登录

shell
ssh user@hostname
  • user: 用户名
  • hostname: IP地址或域名

第一次登录时会提示:

shell
    The authenticity of host '123.57.47.211 (123.57.47.211)' can't be established.
    ECDSA key fingerprint is SHA256:iy237yysfCe013/l+kpDGfEG9xxHxm0dnxnAbJTPpG8.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入yes,然后回车即可。

这样会将该服务器的信息记录在~/.ssh/known_hosts文件中。

然后输入密码即可登录到远程服务器中。

默认登录端口号为22。如果想登录某一特定端口:

ssh user@hostname -p 22

配置文件

创建文件 ~/.ssh/config

然后在文件中输入:

shell
Host myserver1
    HostName IP地址或域名
    User 用户名

Host myserver2
    HostName IP地址或域名
    User 用户名

之后再使用服务器时,可以直接使用别名myserver1myserver2

密钥登录

创建密钥:

ssh-keygen

然后一直回车即可。

执行结束后,~/.ssh/目录下会多两个文件:

  • id_rsa:私钥
  • id_rsa.pub:公钥

之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。

例如,想免密登录myserver服务器。则将公钥中的内容,复制到myserver中的~/.ssh/authorized_keys文件里即可。

也可以使用如下命令一键添加公钥:

ssh-copy-id myserver

执行命令

命令格式:

ssh user@hostname command

例如:

ssh user@hostname ls -a

或者

单引号中的$i可以求值

ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'

或者

双引号中的$i不可以求值

ssh myserver "for ((i = 0; i < 10; i ++ )) do echo $i; done"

scp 传文件

基本用法

命令格式:

scp source destination

source路径下的文件复制到destination

一次复制多个文件:

scp source1 source2 destination

复制文件夹:

scp -r ~/tmp myserver:/home/acs/

将本地家目录中的tmp文件夹复制到myserver服务器中的/home/acs/目录下。

scp -r ~/tmp myserver:homework/ 将本地家目录中的tmp文件夹复制到myserver服务器中的~/homework/目录下。

scp -r myserver:homework .

myserver服务器中的~/homework/文件夹复制到本地的当前路径下。

指定服务器的端口号:

scp -P 22 source1 source2 destination

注意: scp-r -P等参数尽量加在sourcedestination之前。

使用scp配置其他服务器的vimtmux

scp ~/.vimrc ~/.tmux.conf myserver:

错误记录

若遇到错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:jHBFH8cnZffI74jSvgcGz9QqvgrS7EQTm66p2dixDMA. Please contact your system administrator. Add correct host key in /home/acs/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/acs/.ssh/known_hosts:4 remove with: ssh-keygen -f "/home/acs/.ssh/known_hosts" -R "47.XX.XXX.129" ECDSA host key for 47.XX.XXX.129 has changed and you have requested strict checking. Host key verification failed. lost connection

输入ssh-keygen -f "/home/acs/.ssh/known_hosts" -R "47.XX.XXX.129"即可。