SSH
SSH连接服务器
ssh username@ip
username是服务器上的用户名
ip是服务器ip
可选参数
-p 端口号连接服务器指定端口-i 密钥路径使用指定路径的密钥连接服务器,避免输入密码(不输入时会默认去~/.ssh/id_rsa寻找密钥,没有或者密钥未授权才会让输入密码)
SSH configrc文件配置
使用SSH的config文件可以免去每次输入username和ip的麻烦,直接使用主机名即可访问
默认是没有ssh的config文件的,输入vim ~/.ssh/config生成并配置
简单的config文件格式为
1
2
3
4
host 你设置的服务器名
hostname 服务器的ip
username 用户名
port 默认为22端口,如果你服务器改了端口,在此设置
示例
1
2
3
4
5
6
7
8
9
Host hello1
hostname 111.111.11.11
user world
port 33
Host hello2
hostname 222.222.22.2
user hahaha
port 5035
经过以上配置,就可以直接使用ssh hello1连接第一个服务器,ssh hello2连接第二个服务器
SSH生成密钥
ssh-keygen -t rsa -C "备注" 使用此命令在~/.ssh/下生成密钥
id_rsa是私钥id_rsa_pub是公钥
公钥给服务器或者运维,让他们添加进服务器授权列表,私钥是绝不能泄露的
添加公钥到服务器授权列表
服务器端.ssh目录中新建一个authorized_keys的文件
将公钥内容拷贝到这个文件中,设置权限600
1
2
3
vim authorized_keys //创建authorized_keys文件,打开后将本地的公钥内容复制到这个文件中
chmod -R 600 authorzied_keys //修改权限,禁止除自己和root外的所有其他用户查看、修改
scp
从本地复制到远程服务器
复制文件
命令格式:
scp local_file remote_username@remote_ip:remote_filescp local_file remote_ip:remote_file
第1个指定了用户名,命令执行后需要输入用户密码
第2个没有指定用户名,命令执行后需要输入用户名和密码
remote_file需要输入完整的路径,从/根目录开始
复制目录
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folderscp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
从远程服务器复制到本地
从远程复制到本地的scp命令与上面的命令类似,只要将从本地复制到远程的命令后面2个参数互换顺序
如果更换了端口,需要在紧接着scp后面,其他所有参数前面加-P端口号
Git
本地配置
1
2
3
4
git config --global user.name "Your Name" // 设置用户名
git config --global user.email Your_email@example.com // 设置用户邮箱,GitHub的小绿点就是根据这个来识别的噢
git config --list // 列出当前git config的设置
常用命令
1
2
3
git add xxx // 添加文件到暂存区,可以用`.`代替具体的文件名将当前目录及子目录的所有文件都添加进暂存区
git commit -m "xxxxxx" // 提交修改
git push origin master // 推送到远程分支,比如Github
du 和 df
du: 显示每个文件和目录的磁盘使用空间
df: 用于显示磁盘分区上的可使用的磁盘空间
du常用参数
-s或--summariz: 显示总和,不显示子目录大小-h或--human-readable: 以人易读的方式显示,比如K、M、G、T等
实例
1
2
3
4
5
6
7
8
9
du // 显示目录或者文件所占空间
du file_name/dir_name // 显示指定文件或文件夹所占空间
du -s dir_name // 只显示文件夹总和大小,不显示子文件夹
du -sh dir_name // 以易读的方式显示文件夹总和大小且不显示子文件夹
du -sh --max-depth=1 // 以易读的方式显示当前目录下所有第一层文件夹的大小
du -sh * // 同上(可简化代替上一个命令)
df -h // 以易读的方式显示磁盘分区上的可使用的磁盘空间
mv
用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中
如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖
为什么重命名也用mv命令涉及到一点Linux文件系统的知识,简而言之可以用指针来理解,有空再来展开
1
2
3
mv file_name1 file_name2 //文件重命名
mv dir1 dir2 // 目录重命名
mv file_name dir // 将文件移动到dir目录下
vi
跳到文件第一行
- 输入:0或:1,然后回车
- 在键盘按下小写gg
跳到文件最后一行
- 输入:$,然后回车
- 在键盘按下大写G
- 在键盘按Shift + g
翻页
Ctrl + B向上翻页(此处不分大小写)(单词backward的意思)Ctrl + F向下翻页(forward)
wc 统计文件数量
ls -l|grep "^-"|wc -lls -l详细输出该目录下文件信息,也可以使用ls -lR连子目录下的文件一起统计-
grep ^-将输出信息过滤,只保留一般文件,保留目录用^d wc -l统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。
find ./ -type f|wc -l- 默认find会去子目录查找,用
find ./ -maxdepth 1 -type f只查找当前目录的文件
- 默认find会去子目录查找,用
第二种方法会比第一种方法快很多,尤其是统计子目录时
tar 打包和压缩
打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件
Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)
1
2
3
4
5
6
7
- z:有gzip属性的
- j:有bz2属性的
- Z:有compress属性的
- v:显示所有过程
- O:将文件解开到标准输出
- r:添加文件到已经压缩的文件
- f:<文件>或--file=<文件>:指定打包后的文件名
切记:参数-f是必须的,且是最后一个参数,后面只能接打包后的文件名
实例
压 缩:(不带z或者j时代表只打包不压缩)
1
2
tar -zcvf filename.tar.gz <要被压缩的文件或目录名称>
tar -jcvf filename.tar.bz2 <要被压缩的文件或目录名称>
查 询:
1
tar -ztvf filename.tar.gz
解压缩:
1
2
tar -zxvf filename.tar.gz -C <欲解压缩的目录>
tar -jxvf filename.tar.bz2 -C <欲解压缩的目录>
conda
创建环境:conda create -n 环境名称
删除环境:conda remove -n 环境名称 --all
重命名:通过clone实现
- 先 clone 一份 new name 的环境
- 删除 old name 的环境
conda create -n 新名称 --clone 旧名称
conda remove -n 旧名称 --all
显示当前虚拟环境信息
conda info -e
ln 文件链接
linux下文件链接有硬链接和软连接两种形式,都是为了节省磁盘空间
区别两种形式前要明白Linux文件系统下其实是由文件节点(inode)来唯一确定文件的,文件名只是指向文件节点的一个形式
- 硬链接:对真实inode进行修改
- 解释:增加一个指向文件节点的真实链接,对任意一个硬链接的修改,实际是对文件系统inode节点的文件进行修改,所以每个硬链接文件都会有同样的修改
- 意义:在不增加磁盘空间的情况下,保存多个相同且可以自动同步的文件(在不同路径下使用、修改并保证同步同一个文件)
- 软连接:不对真实inode进行修改
- 解释:等效于windows下的快捷方式,对快捷方式的修改没有任何意义
- 意义:可以在多个地方使用同一个文件,一般不对这个文件进行修改
- 区别:软连接和硬链接其实很相似,只是使用的地方不同
- 软连接一般用在只读的地方,硬链接用在对文件修改得较多的地方
- 建立一个硬链接会增加该文件inode的连接数(修改inode的地方),而软连接不会修改这个
语法
1
ln [选项] 源文件 目标文件
参数
- 源文件:指定连接的源文件。如果使用-s选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件
- 目标文件:指定源文件的目标连接文件
示例
将目录/home/hello/word下的文件HELLO1链接到目录/usr/bin下的文件HELLO
1
2
cd /home/hello
ln word/HELLO1 /usr/bin/HELLO
在执行ln命令之前,目录/usr/bin中不存在HELLO文件。执行ln之后,在/usr/bin目录中才有HELLO这一项,表明HELLO1和HELLO链接起来(注意,二者在物理上是同一文件),利用ls -l命令可以看到链接数的变化。
在目录/usr/bin下建立一个符号链接文件abc,使它指向目录/home/hello/word
1
ln -s /home/hello/word /usr/bin/abc
执行该命令后,/home/hello/word代表的路径将存放在名为/usr/bin/abc的文件中
返回上一次目录
cd -
该命令等同于cd $OLDPWD,关于这一点在bash的手册页(可使用命令man bash访问其手册页)中有介绍:
An argument of - is equivalent to $OLDPWD.
神奇的感叹号
!!:上一条命令
!$:上一条命令中的最后一个参数
!:-:上一命令除了最后一个参数
!:数字:上一命令的第几个参数(不算命令,从参数开始数)
!*:上一条命令中的所有参数
!str:最近一条以str开头的命令
!?str?:最近一条包含str的命令
!n:顺数第n条命令
!-n:倒数第n条命令
^old^new:将上一命令中的old替换为new
!!:gs/old/new:将上一命令中的old替换为new
!scp:gs/old/new:将上一scp命令中的old替换为new
Bash 快捷键
本小节转载自Linuxtoy.org
编辑命令
- Ctrl + a :移到命令行首
- Ctrl + e :移到命令行尾
- Alt + f :按单词前移(右向)
- Alt + b :按单词后移(左向)
- Ctrl + xx:在命令行首和光标之间移动
- Ctrl + u :从光标处删除至命令行首
- Ctrl + k :从光标处删除至命令行尾
- Ctrl + w :从光标处删除至字首
- Alt + d :从光标处删除至字尾
- Ctrl + d :删除光标处的字符
- Ctrl + h :删除光标前的字符
- Ctrl + y :粘贴至光标后
- Alt + c :从光标处更改为首字母大写的单词
- Alt + u :从光标处更改为全部大写的单词
- Alt + l :从光标处更改为全部小写的单词
- Ctrl + t :交换光标处和之前的字符
- Alt + t :交换光标处和之前的单词
- Alt + Backspace:与 Ctrl + w
相同类似,分隔符有些差别 [感谢 rezilla 指正]
重新执行命令
- Ctrl + r:逆向搜索命令历史
- Ctrl + g:从历史搜索模式退出
- Ctrl + p:历史中的上一条命令
- Ctrl + n:历史中的下一条命令
- Alt + .:使用上一条命令的最后一个参数
控制命令
- Ctrl + l:清屏
- Ctrl + o:执行当前命令,并选择上一条命令
- Ctrl + s:阻止屏幕输出
- Ctrl + q:允许屏幕输出
- Ctrl + c:终止命令
- Ctrl + z:挂起命令
Bang (!) 命令
- !!:执行上一条命令
- !blah:执行最近的以 blah 开头的命令,如 !ls
- !blah:p:仅打印输出,而不执行
- !$:上一条命令的最后一个参数,与 Alt + . 相同
- !$:p:打印输出 !$ 的内容
- !*:上一条命令的所有参数
- !*:p:打印输出 !* 的内容
- ^blah:删除上一条命令中的 blah
- ^blah^foo:将上一条命令中的 blah 替换为 foo
- ^blah^foo^:将上一条命令中所有的 blah 都替换为 foo
_友情提示_:
-
以上介绍的大多数 Bash 快捷键仅当在 emacs 编辑模式时有效,若你将 Bash 配置为 vi 编辑模式,那将遵循 vi 的按键绑定。Bash 默认为 emacs 编辑模式。如果你的 Bash 不在 emacs 编辑模式,可通过
set -o emacs设置。 -
^S、^Q、^C、^Z 是由终端设备处理的,可用
stty命令设置。