linux命令学习(你想找的都在这里) ---持续更新

文章目录

  • linux 系统的发展史
  • mkdir touch gedit
  • rm 删除命令
  • cat 查看连接文件/more 分屏查看文件内容
  • history 查看历史指令
  • scp && rsync && ssh(secure shell)
  • 查看python、torch、CUDA、CUDNN版本命令
  • 查看cv2版本及其安装
  • 查看python安装路径
  • conda
  • du -sh * && du -h
  • df -h(disk free)
  • cp
  • wget
  • tmux命令
  • lsblk(list block)
  • mount
  • find && grep
  • tar && zip && unzip && gzip&&gunzip
  • linux安装ffmpeg
  • LD_LIBRAR_PATH && LIBRARY_PATH
  • ls && ls -al
  • /lib和/usr/lib和/usr/local/lib区别
  • ipython notebook
  • 重定向命令
  • tee(双向重定向命令)
  • & 和 &&
  • 管道命令 |
  • xargs
  • 文件和目录常用的命令
  • shutdown
  • ifconfig && ping
  • chmod
  • 查看用户信息who && whoami
  • which
  • bin sbin
  • 进程信息(ps top htop kill)
  • 软链接(ln)
  • wc
  • sed(Stream EDitor 行编辑器)
  • awk
  • vim
    • 4.1 移动(基本)
      • 1) 上、下、左、右
      • 2) 行内移动
      • 3) 行数移动
        • 4) 屏幕移动
    • 4.2 移动(程序)
        • 1) 段落移动
      • 2) 括号切换
      • 3) 标记
    • 4.3 选中文本(可视模式)
    • 4.4 撤销和恢复撤销
    • 4.5 删除文本
    • 4.6 复制、粘贴
    • 4.7 替换
    • 4.8 缩排和重复执行
    • 4.9 查找
      • 常规查找
      • 单词快速匹配
    • 4.10 查找并替换
      • 1) 全局替换
      • 2) 可视区域替换
      • 3) 确认替换
    • 4.11 插入命令
      • 演练 1 —— 编辑命令和数字连用
      • 演练 2 —— 利用 可视块 给多行代码增加注释
    • 05. 分屏命令
      • 5.1 末行命令扩展
    • 5.2 分屏命令
      • 1) 切换分屏窗口
      • 2) 调整窗口大小
    • 06. 常用命令速查图
      • vimrc

linux 系统的发展史

操作系统:对下控制硬件运行,对上为应用程序提供支持
linux 基于unix发展而来
linux内核: 系统的心脏,提供操作系统的最基本的功能,它负责管理系统的进程调动、内存管理、 设备驱动、文件和网络系统,决定着系统的性能和稳定性。(linux内核是用C语言编写的开源程序)
linux发行版: linux内核 + 一套软件+使用手册
常见的发行版:centos redhat ubuntu Fedora
linux命令学习(你想找的都在这里) ---持续更新_第1张图片
windows和linux文件系统区别:
windows:每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形
linux:
linux命令学习(你想找的都在这里) ---持续更新_第2张图片
ubuntu 没有盘符这个概念,只有一个根目录/,所有文件都在它下面
/bin 、/usr/bin:可执行二进制文件的目录
/boot:放置 linux 系统启动时⽤到的⼀些⽂件,如 linux 的内核⽂件: /boot/vmlinuz ,系统引 导管理器: /boot/grub
/dev:存放linux系统下的设备⽂件,访问该⽬录下某个⽂件,相当于访问某个设备,常⽤的是挂 载光驱 mount /dev/cdrom /mnt
/etc:系统配置⽂件存放的⽬录,不建议在此⽬录下存放可执⾏⽂件
/lib、/usr/lib、/usr/local/lib:系统使⽤的函数库的⽬录,程序在执⾏过程中,需要调⽤⼀些额外的 参数时需要函数库的协助
/sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使⽤的可执⾏命令
/usr:应⽤程序存放⽬录
/root:系统管理员root的家⽬录

mkdir touch gedit

mkdir 创建目录 递归创建目录-p
touch 创建文件
gedit 编辑文件

rm 删除命令

-i 以进行交互式方式执行
-f 强制删除,忽略不存在的文件,无序提示
-r 递归地删除目录下的内容,删除文件夹(目录)时必须加此参数

cat 查看连接文件/more 分屏查看文件内容

-n 查看文件内容,并且对每行进行编号(含空行)
-b 查看文件内容,并且对每行进行编号(不含空行)
-s 查看文件内容,多个空白行只显示一行
连接文件: 如 cat text.txt tet.txt 使用cat方式将两个文件合并查看

history 查看历史指令

!历史指令编号 - 执⾏历史指令

scp && rsync && ssh(secure shell)

最近想让师兄把他服务器上的数据集拷到我服务器 用了这两个命令
scp :secure copy(默认端口为22)
上传 scp 本地路径 服务器用户名@服务器地址:远程路径
ex: scp local_file username@ip:remote_folder
如果复制目录下的所有文件:scp -r local_file username@ip:remote_folder
当端口非22时:
scp -P 333333 -r local_file username@ip:remote_folder
下载 scp 服务器用户名@服务器地址:远程路径 本地路径

rsync:remote sync
参数:-a ,–archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
-v, --verbose 详细模式输出
ex: rsync -av local_file username@ip:remote_folder
区别:scp是相当于复制,粘贴,如果有的话是覆盖,比较耗时间,而rsync有重复的文件,会直接跳过; rsync远程拷贝可以附带软链接/硬链接, 而scp不支持链接的拷贝;(然后师兄说如果是压缩包用scp,不让用rsync)
ssh:ssh [-p port] username@remote(域名/IP地址,也可以配置别名)
使用 exit 退出当前用户的登录
域名/IP地址
端口号(SSh 服务器 22;Web服务器 80;HTTPS 443;FTP 服务器 21)
(WinSCP MobaXterm)当然也可以使用图形软件进行ssh登录服务器,进行文件传输,WinSCP,使用SFTP协议(ssh 文件传输协议)
linux命令学习(你想找的都在这里) ---持续更新_第3张图片

查看python、torch、CUDA、CUDNN版本命令

(1) python
python --version / python -V
(2)torch
import torch
print(torch.__version __)
(3) cuda
cat /usr/local/cuda/version.txt
(4) cudnn
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

查看cv2版本及其安装

#查看版本
python
import cv2
print(cv2.__version__)
或者:python -c "import  cv2;print(cv2.__version__)"

#安装指定版本cv2
pip install opencv_python == 3.4.2.17(指定版本)
pip install opencv-contrib-python==3.4.2.17
为啥会有 opencv-contrib-python 呢? opencv  contrib是opencv的扩展版本,像SIFT等算法都放在Contrib库中了

参考Python opencv contrib版本安装指北

查看python安装路径

(1)which python
(2)python -c “import sys;print(sys.executable)”
(3)python -c “import os;print(os.sys.executable)”

conda

更新conda: conda update -n base conda
创建一个环境: conda creat --name pytracking python==3.7
激活某个程序的环境: conda activate pytracking(你代码的名字)
停止一个激活的环境: conda deactivate
更换源:
(1)直接vim ~/.condarc 手动添加镜像路径
(2)conda config --add channels https://mirrors.tuna.tsinghua.edu/cn/anaconda/pkgs/free
conda config --set show_channel_urls yes
如果要移除的话:conda config --remove channels ‘http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/’
参考

du -sh * && du -h

du -sh * (disk usage 查看当前目录下各个文件及目录占用空间的大小)

du -sh filename (查看指定文件的大小)
在这里插入图片描述
du -h 查看目录下所有文件的大小

df -h(disk free)

查看系统中文件的使用情况(磁盘剩余空间)
linux命令学习(你想找的都在这里) ---持续更新_第4张图片

cp

cp命令主要用于复制文件或目录 cp 源文件 目标文件
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-i:覆盖文件前提示
cp 源文件 目标文件
今天用到了,复制多个文件到另一个目录下
cp ltr/result_module2/checkpoints/ltr/bbreg/atom_default/{ATOMnet_ep0050.pth.tar,ATOMnet_ep0049.pth.tar,ATOMnet_ep0048.pth.tar,ATOMnet_ep0047.pth.tar} pytracking/networks/
看到多个文件用{ }包起来

wget

下载数据集需要,可以网络不稳定,老是断,这个命令拯救了我
它的名字是“World Wide Web”和“Get”的结合,同时也隐含了软件的主要功能。目前它支持通过HTTP、HTTPS,以及FTP这三个最常见的TCP/IP协议协议下载。
1.使用wget -c断点续传,重新启动下载中断的文件
需要继续中断的下载时可以使用-c参数
例如我下载coco2017的命令为:wget -c http://images.cocodataset.org/zips/train2017.zip 其他coco数据集val、test链接
2.使用wget -b后台下载
对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载

tmux命令

Terminal Multiplexer 的缩写,是linux终端的复用神器,当服务器断网的时候,当有多个窗口,tmux神器就会发挥它的神力,它包括会话(session)、窗口(window)、窗格(pane)三部分。会话实质是伪终端的集合,每个窗口表示一个伪终端,多个窗格展现在一个屏幕上,这一屏幕就叫窗口。
linux命令学习(你想找的都在这里) ---持续更新_第5张图片
会话管理命令如下
新建会话:tmux new
新建指定会话: tmux new -s wenmei
查看会话列表: tmux ls
连接上一个会话: tmux a
连接指定会话:tmux a -t wenmei
重命名会话: tmux rename -t wenmei ss
关闭指定的会话: tmux kill-session -t wenmei
关闭指定会话:tmux kill-sever
关闭上次打开的会话:tmux kill-session
窗口管理命令如下:
新建窗口:ctrl b +c
进入下一个窗口(窗口翻页):ctrl b +p 如果不行 可以直接加数字 如:ctrl b +1
关闭窗口:ctrl b +&
窗格管理命令:
水平方向创建窗格:ctrl b +%
垂直方向创建窗格:ctrl b +‘’
关闭当前窗格:ctrl b +x
参考资料
这里面的表格很清楚

lsblk(list block)

查看系统的磁盘
lsblk命令默认情况下将以树状列出所有块设备,如下:
linux命令学习(你想找的都在这里) ---持续更新_第6张图片

mount

首先查看磁盘状况: df -h
然后挂载:sudo mount /dev/sda1 /mnt/raid

find && grep

1.find 查找文件
find /home/wenmei/ -name “* .txt” #以txt结尾的所有文件
find ./ -name test.sh
find /tmp -size 2M(等于2M的文件,如果是+2M 表示大于,-2M 表示小于)

2.grep [-选项] ‘搜索内容串’ 文件名
如 grep ‘teacher’ test.txt
-n 显示匹配行及行号
-v 显示不包含匹配文本的所有行(相当于求反)
-c 选项告诉 grep 抑制匹配行的打印,只显示匹配行的数量,匹配查询的行。
-i 忽略大小写
如 grep -in hello 123.txt
grep -n ss test.txt
常用的两种模式查找:(正则化表达)
^a 行首,搜寻以a开头的行
de$ 行尾,搜寻以de结尾的行
. (点) 如 grep -n ‘t.t’ test.txt 查找满足两边都是t中间是任意值

tar && zip && unzip && gzip&&gunzip

linux命令学习(你想找的都在这里) ---持续更新_第7张图片

不同操作系统中,常用的打包压缩方式是不同的
Windows 常用 rar
Mac 常用 zip
Linux 常用 tar.gz
1.打包+压缩
打包文件:(归档)
tar -cvf 打包文件.tar.gz 被打包的文件/路径
-c 生成档案文件,创建打包文件
-v 列出归档解档的详细过程,显示进度
-f 指定档案文件(放在最后,后面必须跟上要处理的文件名)
-x 解压
-z(通过gzip支持的压缩或解压缩)
如: tar -zcvf py.tar 01.py 02.py 03.py
解压+解包文件
tar -zxvf 打包文件.tar.gz
解压到指定路径的命令:tar -zxvf filename -C path(这个path必须存在)

2.解压+解包
这里tar 与 gzip 命令结合,可以使用实现文件的打包和压缩,这样文件也会很小
tar 只负责打包文件,但不压缩
用gzip压缩tar打包后的文件,其扩展名一般用xxx.tar.gz(也是linux中最常见的压缩文件格式)

3.压缩zip命令
zip -r myfile.zip 源文件
将文件压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.
4.解压.zip文件命令:unzip命令
unzip -o -d /home/bunny myfile.zip 此压缩文件压缩到指定目录

5.压缩为 .gz 文件
gzip -r (递归) -f(强制) -v(显示指令执行过程)filename
注意 压缩为 .gz 文件 源文件会消失,所以想要保留源文件,使用命令:
gzip -c 源文件 >压缩文件

6 .解压.gz文件
gunzip fiiename.gz
当然是用 gzip -d 也可以解压(decompression )

7.tar 与 bzip2命令结合可以使用实现文件打包和压缩(用法和gzip一样)
tar 只负责打包文件,但不压缩
用bzip2压缩tar打包后的文件,器扩展名一般用xxx.tar.bz2
在tar命令中有一个选项 -j 可以调用bzip2,从而可以方便的实现压缩和解压缩的功能
压缩文件: tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径。。
解压缩文件: tar -jxvf 打包文件.tar.bz2

linux安装ffmpeg

源码安装一般包括一个步骤:配置(configure),编译(make),安装(make install)
首先下载好使用的压缩包(如yasm,ffmpeg),解压后,进入目录后,执行 ./configure (生成Makefile文件)这里我们可以增加参数,
–perfix 这样可以将要安装的应用安装到指定的目录中;还有一个是 **–enable-shared,表示编译后链接成共享对象,生成动态链接库,后缀名为.so,而–enable-static,**表示生成静态链接库,后缀名为.a
他们两之间的区别如下:
动态库:
优点
·生成的可执行程序体积小
·动态库在内存只加载一次,同时可为多个进程共享,由此会提高一定的效率
缺点
·依赖库文件,不方便移植
静态库:
优点
·因为将库中代码加载进程序中,因此运行时省去动态链接加载的过程,带来一定的性能提升
·程序运行可以不依赖于库文件,即便库文件被删除也可以照样运行
缺点
·生成的可执行程序体积较大
·使用静态链接库无法在内存中共享,会造成一定的浪费

接着运行 make 生成头文件include 和动态库文件lib 参考ffmpeg之头文件和库文件
最后make install (将编译出来的二进制文件,库,配置文件等等放到相应的目录下)
然后进入到安装的指定目录下,查看一下发现有bin,include,lib,share这4个目录,其中bin是ffmpeg主程序二进制目录,include是C/C++头文件目录,lib是编译好的库文件目录,share是文档目录
然后进入bin目录下,运行./ffmpeg -version,报错信息如下:
在这里插入图片描述
原因是lib目录未加载到链接到系统库中,系统ld目录列表在 /etc/ld.so.conf 中,打开文件会发现,里面引用了/etc/ld.so.conf.d/下面所有的.conf文件
解决方案:执行命令 vim /etc/ld.so.conf.d/ffmpeg.conf 然后添加一行内容: /usr/loacl/ffmpeg/lib (根据自己指定的目录更改)之后保存并退出,然后执行 ldconfig 使配置生效,现在再次执行 ./ffmpeg -version 显示就正常了
应该有很多人和我一样,不想编译FFMPEG之后还要动自己系统的环境,这时有一个简单的方法可以解决这个问题。就是在当前终端export一个环境变量。如下所示:
export LD_LIBRARY_PATH=newdir:$LD_LIBRARY_PATH

当然可以用make clean清除编译结果

LD_LIBRAR_PATH && LIBRARY_PATH

LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库) 时除了默认路径之外的其他路径。(看清楚是库哈)
用法:
export LD_LIBRARY_PATH=newdir:$LD_LIBRARY_PATH,也就是如果从文件不在缺省目录’/lib’and’/usr/lib’。那么就需要指定环境变量LD_LIBRARY_PATH,newdir为你所生成的库文件。
LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库 时指定除了系统默认路径之外的其他路径;
LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库 时指定查找共享库的路径;
参考LD_LIBRARY_PATH详解

ls && ls -al

-a 显示指定目录下所有子目录与文件,包括隐藏文件
-1 以列表方式显示文件的详细信息(d 目录 - 文件 l 链接文件 【文件类型、权限【文件拥有者、同组用户、其他用户】、文件所属用户、文件所属组、文件大小、文件最后修改时间、文件或目录名】)
-h 配合 -l 以人性化的方式显示文件大小,最直接的变化是,⽂件或者⽬录⼤⼩以 K、M的形式显示,不在以字节为单位显示

ls输出颜色不止3种,有以下几种,
白色:表示普通文件
蓝色:表示目录
绿色:表示可执行文件
红色:表示压缩文件
浅蓝色:链接文件
红色闪烁:表示链接的文件有问题
黄色:表示设备文件
灰色:表示其他文件

/lib和/usr/lib和/usr/local/lib区别

/lib是内核级别的
/usr/lib是系统级别的
/usr/local/lib是用户级别的

ipython notebook

打开服务器中的一个火狐浏览器

重定向命令

重定向:改变数据流和原来的默认“走向”

‘>’ 将本应该显示在终端的内容(结果)保存到指定文件中,如果文件不存在,则创建,若存在则覆盖其内容。
如:ls > test.txt echo Hello Python > test.txt
‘>>’ 将输出结果追加到目标文件中,如果文件不存在,就创建文件;如果文件存在,就把结果追加到原文件末尾。
注:如果你追加的文件是一个不存在的文件夹里面的文件,是不会创建的,会报错

/dev/null 表示空设备文件
0 表示/dev/stdin标准输入 键盘
1 表示dev/stdout标准输出 屏幕
2 表示dev/stderr标准错误 屏幕
2>&1 也就表示将错误重定向到标准输出上(& 放在命令到结尾,表示后台运行,防止终端一直被某个进程占用,这样终端可以执行别到任务)

tee(双向重定向命令)

在数据流的处理过程中将某段信息保存下来,使其既能输出到屏幕又能保存到某一个文件中。
–dataset $ dataset 2>&1 | tee logs/test_$dataset.log(将标准错误信息重定向到标准输出,然后通过管道输出到日志中)
ls |tee output.txt

& 和 &&

& 表示该命令在后台执行
&&表示前一条命令执行成功时,才执行后一条命令(;无论前一句的结果如何均会执行后续的命令,|| 前一条命令执行不成功,才执行后一条命令)
jobs 查看当前有多少在后台运行
fg 把任务调至前台任务
bg 把任务调至后台任务

管道命令 |

上一条命令的输出,作为下一条命令参数(输入)
如: ls -lha ~ | grep vi
ls -lha ~ | more

xargs

管道可以实现:将前面的标准输出作为后面命令的标准输入;
管道无法实现:将前面的标准输出作为后面命令的命令参数。
ls | grep siam | xargs -I {} cp resnet.model {}
#我用的这句话是ls到当前路径的一些文件,并筛选以siam开头的文件,将resnet.model拷贝到以siam开头的文件中,可见将标准输出作为cp的命令参数。

详解链接 以后用到再细查

文件和目录常用的命令

Linux 内核
Linux 发行版本
单用户操作系统(磁盘)
多用户操作系统(/根目录,/ home,/bin、/usr/bin 可执行二进制文件的目录,/etc 系统配置文件存放的目录,/dev ,/mnt)
查看目录内容 ls
ls -a 显示指定目录下所有子目录与文件,包括隐藏文件(以.开头的文件为隐藏文件)
ls -l 以列表方式显示文件的详细信息
ls -h 配合-l以人性化的方式显示文件的大小
linux命令学习(你想找的都在这里) ---持续更新_第8张图片
从左到右依次是:
权限,第一个字符如果是d表示目录(拥有者权限、组权限、其他用户权限)
硬链接数,通俗地讲,就是有多少种方式,可以访问到前目录/文件
拥有者

大小、时间、名称

一直在使用 通配符 但是不知道它就是通配符,它与ls搭配使用,显示自己想要的文件或者目录:
*代表任意个数个字符
?代表任意一个字符,至少1个
[]表示可以匹配字符组中的任意一个
[abc]匹配a、b、c中的任意一个
[a-f]匹配从a到f范围内的任意一个字符
切换目录 cd
Linux 所有的目录和文件名都是大小写敏感的
cd / cd ~ 切换到当前用户的主目录(/home/用户目录)
cd . 保持在当前目录不变
cd . .切换到上级目录
cd - 可以在最近两次工作目录之间来回切换

创建和删除操作
touch 创建文件或修改文件时间
如果文件不存在,可以创建一个空白文件
如果文件已经存在,可以修改文件的末次修改日期
mkdir
-p 可以递归创建目录
新建目录的名称不能与当前目录中已有的目录或文件同名
rm(可以配合通配符使用,使用时需小心)
-r 递归地删除目录下的内容,删除文件夹时必须加此参数
-f 强制删除,忽略不存在的文件,无序提示
拷贝 cp 和移动文件 mv
tree 命令可以以树状图列出文件目录结构 tree [目录名]
-d 只显示目录(不会显示文件)
(之前一直想显示SiamMask的目录,现在有机会了,可是下面的data数据太多了,完全刷屏)
linux命令学习(你想找的都在这里) ---持续更新_第9张图片
cp 上面有
mv 源文件 目标文件(移动文件或者目录/ 文件或者目录重命名)
-i 覆盖文件前提示
查看文件内容 cat more grep
cat 查看文件内容 ,会一次显示所有的内容,适合查看内容较少的文本文件
more 可以分屏显示文件内容 ,每次只显示一页内容
cat -b 对非空输出行编号
cat -n 对输出的所有行进行编号
grep(类型与ctrl + F)上面有

其他 echo 重定向 管道

linux命令学习(你想找的都在这里) ---持续更新_第10张图片

shutdown

shutdown 命令可以安全关闭或者重新启动系统
shutdown 选项 时间
-r 重新启动
shutdown -r now
shutdown now
shutdown +10(10分钟后自动关机)
shutdown -c 取消之前指定的关机计划

ifconfig && ping

ifconfig 查看/配置计算机当前的网卡配置信息
ping IP地址 一般用于检测当前计算机到目标计算机之间的网络是否通畅,数值越大,速度越慢
ping 127.0.0.1 检测本地网卡工作正常

chmod

可以修改用户/组 对文件/目录的权限
chmod +/- rwx 文件名/目录名
#递归修改文件权限
chmod -R 755 文件名/目录名
chmod在设置权限时,可以简单地使用三个数字分别对应 拥有者/组 和其他用户的权限。(r 4 w 2 x 1)
chmod u/g/o/a +/-/= rwx ⽂件
u 代表用户
g 代表组
o 代表其他
a 代表所有

查看用户信息who && whoami

linux命令学习(你想找的都在这里) ---持续更新_第11张图片
linux命令学习(你想找的都在这里) ---持续更新_第12张图片

which

which 命令可以查看执行命令所在位置,例如
which python which conda

bin sbin

在linux中,绝大多数可执行文件都是保存在/bin、/sbin、/usr/bin、/usr/sbin
/bin(binary)是二进制执行文件目录,主要用于具体应用
/sbin(system binary )是系统管理员专用的二进制代码存放目录,主要 用于系统管理
/usr/bin(user commands for applications) 后期安装的一些软件
/usr/sbin(super user commands for applications)超级用户的一些管理程序

进程信息(ps top htop kill)

所谓进程,通俗地说就是 当前正在执行的一个程序
ps aux (process status 查看进程的详细状况 PID cpu memory)
a 显示终端上的所有进程,包括其他用户的进程
u 显示进程的详细状态
x 显示没有控制终端的进程

top 动态显示运行中的进程并且排序 退出 q
htop 以人性化的界面显示

kill -9 进程代号 终止指定代号的进程,-9表示强行终止
提示:最好只终止由当前用户开启的进程,而不要终止root身份开启的进程,否则可能导致系统奔溃

软链接(ln)

这应该是我研一的时候就认识的命令,当时啥都不懂
ln -s 被链接的源文件 链接文件,例如
ln -s /mnt/sdb/wenmei/data/vot2017 vot2017
软链接类似于Windows下的快捷方式,源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用,软链接不占用磁盘空间,源文件删除则软链接失效;而硬链接是文件的一个或多个文件名。
使用ls -l查看的时候会对应有一个箭头指向链接的目录地址
如果没有-s 选项建立的是一个硬链接文件(使用ls -l查看的时候没有一个箭头指向链接的目录地址),硬链接和软链接之间的不同是,删除源文件硬链接不受影响,而软链接会受到影响。
linux命令学习(你想找的都在这里) ---持续更新_第13张图片
不过在日常工作中,几乎不会建立文件的硬链接。
软连接和硬链接的区别
1).软链接可以跨⽂件系统,硬链接不可以;
2).软链接可以对⼀个不存在的⽂件名(filename)进⾏链接(当然此时如果你vi这个软链接⽂件, linux会⾃动新建⼀个⽂件名为filename的⽂件),硬链接不可以(其⽂件必须存在,inode必须存在);
3).软链接可以对⽬录进⾏连接,硬链接不可以
sudo apt install xxx
apt(Advanced Package Tool)

wc

wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。
该命令各选项含义如下:

  • c 统计字节数。

  • l 统计行数。

  • w 统计字数。
    cat 文件名 | wc -l 或者 wc -l 文件名#前者只输出行号 后者会输出行号和文件名

sed(Stream EDitor 行编辑器)

sed主要是用来将数据进行选取、替换、删除、新增的命令
sed -i.bak 's/root/ROOT/g' 文件名
s 替换,替换每行中的第一个匹配的内容
g 全部替换,替换每行中的所有匹配内容
a 向匹配行下一行插入内容a\ nl /etc/passwd |sed '/root/ a \ROOT'
i 向匹配行上一行插入内容i\ nl /etc/passwd |sed '/root/ i \ROOT'
c 更改匹配行的内容 c\ nl /etc/passwd |sed '/root/ c \ROOT'
d 删除匹配的内容 c\ nl /etc/passwd |sed '/root/d'

awk

相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理。 因此,awk 相当的适合处理小型的数据数据处理

vim

编辑文件指定行:
vim 文件名 + 定位到最后一行
vim 文件名 +12 定位到12行
vim 文件名 定位到第一行
如果不显示行数:
到vi或者vim编辑器的末行模式下,输入 set number 或者 set nu,按下回车就显示行号了
那怎么关闭行数呢?
只要再到vi或者vim编辑器的末行模式下输入 set nonumber 或者 set nonu,按下回车行号就没了

三种基本工作模式:
1.命令模式 vi的入口,定位,翻页、复制、粘贴、删除
2.末行模式 vi的出口,执行保存、退出等操作 :
3.编辑模式 i 编辑
linux命令学习(你想找的都在这里) ---持续更新_第14张图片
linux命令学习(你想找的都在这里) ---持续更新_第15张图片

4.1 移动(基本)

  • 编辑操作命令,能够和 移动命令 结合在一起使用

1) 上、下、左、右

命令 功能 手指
h 向左 食指
j 向下 食指
k 向上 中指
l 向右 无名指

2) 行内移动

命令 英文 功能
w word 向后移动一个单词
b back 向前移动一个单词
0 行首
^ 行首,第一个不是空白字符的位置
$ 行尾

3) 行数移动

命令 英文 功能
gg go 文件顶部
G go 文件末尾
数字gg go 移动到 数字 对应行数
数字G go 移动到 数字 对应行数
:数字 移动到 数字 对应行数

4) 屏幕移动

命令 英文 功能
Ctrl + b back 向上翻页
Ctrl + f forward 向下翻页
H Head 屏幕顶部
M Middle 屏幕中间
L Low 屏幕底部

4.2 移动(程序)

1) 段落移动

  • vi 中使用 空行 来区分段落
  • 在程序开发时,通常 一段功能相关的代码会写在一起 —— 之间没有空行
命令 功能
{ 上一段
} 下一段

2) 括号切换

  • 在程序世界中,()[]{} 使用频率很高,而且 都是成对出现的
命令 功能
% 括号匹配及切换

3) 标记

  • 在开发时,某一块代码可能需要稍后处理,例如:编辑、查看
  • 此时先使用 m 增加一个标记,这样可以 在需要时快速地跳转回来 或者 执行其他编辑操作
  • 标记名称 可以是 a~z 或者 A~Z 之间的任意 一个 字母
  • 添加了标记的 行如果被删除标记同时被删除
  • 如果 在其他行添加了相同名称的标记之前添加的标记也会被替换掉
命令 英文 功能
mx mark 添加标记 x,x 是 a~z 或者 A~Z 之间的任意一个字母
'x 直接定位到标记 x 所在位置

4.3 选中文本(可视模式)

  • 学习 复制 命令前,应该先学会 怎么样选中 要复制的代码
  • vi 中要选择文本,需要先使用 Visual 命令切换到 可视模式
  • vi 中提供了 三种 可视模式,可以方便程序员选择 选中文本的方式
  • ESC 可以放弃选中,返回到 命令模式
命令 模式 功能
v 可视模式 从光标位置开始按照正常模式选择文本
V 可视行模式 选中光标经过的完整行
Ctrl + v 可视块模式 垂直方向选中文本
  • 可视模式下,可以和 移动命令 连用,例如:ggVG 能够选中所有内容

4.4 撤销和恢复撤销

  • 在学习编辑命令之前,先要知道怎样撤销之前一次 错误的 编辑动作!
命令 英文 功能
u undo 撤销上次命令
CTRL + r redo 恢复撤销的命令

4.5 删除文本

命令 英文 功能
x cut 删除光标所在字符,或者选中文字
d(移动命令) delete 删除移动命令对应的内容
dd delete 删除光标所在行,可以 ndd 复制多行
D delete 删除至行尾

提示:如果使用 可视模式 已经选中了一段文本,那么无论使用 d 还是 x,都可以删除选中文本

  • 删除命令可以和 移动命令 连用,以下是常见的组合命令:
* dw        # 从光标位置删除到单词末尾
* d0        # 从光标位置删除到一行的起始位置
* d}        # 从光标位置删除到段落结尾
* ndd       # 从光标位置向下连续删除 n 行
* d代码行G   # 从光标所在行 删除到 指定代码行 之间的所有代码
* d'a       # 从光标所在行 删除到 标记a 之间的所有代码

4.6 复制、粘贴

  • vi 中提供有一个 被复制文本的缓冲区
    • 复制 命令会将选中的文字保存在缓冲区
    • 删除 命令删除的文字会被保存在缓冲区
    • 在需要的位置,使用 粘贴 命令可以将缓冲区的文字插入到光标所在位置
命令 英文 功能
y(移动命令) copy 复制
yy copy 复制一行,可以 nyy 复制多行
p paste 粘贴

提示

  • 命令 dx 类似于图形界面的 剪切操作 —— CTRL + X
  • 命令 y 类似于图形界面的 复制操作 —— CTRL + C
  • 命令 p 类似于图形界面的 粘贴操作 —— CTRL + V
  • vi 中的 文本缓冲区同样只有一个,如果后续做过 复制、剪切 操作,之前缓冲区中的内容会被替换

注意

  • vi 中的 文本缓冲区 和系统的 剪贴板 不是同一个
  • 所以在其他软件中使用 CTRL + C 复制的内容,不能在 vi 中通过 P 命令粘贴
  • 可以在 编辑模式 下使用 鼠标右键粘贴

4.7 替换

命令 英文 功能 工作模式
r replace 替换当前字符 命令模式
R replace 替换当前行光标后的字符 替换模式
  • R 命令可以进入 替换模式,替换完成后,按下 ESC 可以回到 命令模式
  • 替换命令 的作用就是不用进入 编辑模式,对文件进行 轻量级的修改

4.8 缩排和重复执行

命令 功能
>> 向右增加缩进
<< 向左减少缩进
. 重复上次命令
  • 缩排命令 在开发程序时,统一增加代码的缩进 比较有用!
    • 一次性 在选中代码前增加 4 个空格,就叫做 增加缩进
    • 一次性 在选中代码前删除 4 个空格,就叫做 减少缩进
  • 可视模式 下,缩排命令只需要使用 一个 > 或者 <

在程序中,缩进 通常用来表示代码的归属关系

  • 前面空格越少,代码的级别越高
  • 前面空格越多,代码的级别越低

4.9 查找

常规查找

命令 功能
/str 查找 str
  • 查找到指定内容之后,使用 Next 查找下一个出现的位置:
    • n: 查找下一个
    • N: 查找上一个
  • 如果不想看到高亮显示,可以随便查找一个文件中不存在的内容即可

单词快速匹配

命令 功能
* 向后查找当前光标所在单词
# 向前查找当前光标所在单词
  • 在开发中,通过单词快速匹配,可以快速看到这个单词在其他什么位置使用过

4.10 查找并替换

  • vi 中查找和替换命令需要在 末行模式 下执行
  • 记忆命令格式:
:%s///g

1) 全局替换

  • 一次性替换文件中的 所有出现的旧文本
  • 命令格式如下:
:%s/旧文本/新文本/g

2) 可视区域替换

  • 先选中 要替换文字的 范围
  • 命令格式如下:
:s/旧文本/新文本/g

3) 确认替换

  • 如果把末尾的 g 改成 gc 在替换的时候,会有提示!推荐使用!
:%s/旧文本/新文本/gc
  1. y - yes 替换
  2. n - no 不替换
  3. a - all 替换所有
  4. q - quit 退出替换
  5. l - last 最后一个,并把光标移动到行首
  6. ^E 向下滚屏
  7. ^Y 向上滚屏

4.11 插入命令

  • vi 中除了常用的 i 进入 编辑模式 外,还提供了以下命令同样可以进入编辑模式:
命令 英文 功能 常用
i insert 在当前字符前插入文本 常用
I insert 在行首插入文本 较常用
a append 在当前字符后添加文本
A append 在行末添加文本 较常用
o 在当前行后面插入一空行 常用
O 在当前行前面插入一空行 常用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Tires1q-1595294183864)(media/14993340485745/004_%E6%8F%92%E5%85%A5%E5%91%BD%E4%BB%A4.png)]

演练 1 —— 编辑命令和数字连用

  • 在开发中,可能会遇到连续输入 N 个同样的字符

Python 中有简单的方法,但是其他语言中通常需要自己输入

  • 例如:********** 连续 10 个星号

要实现这个效果可以在 命令模式

  1. 输入 10,表示要重复 10 次
  2. 输入 i 进入 编辑模式
  3. 输入 * 也就是重复的文字
  4. 按下 ESC 返回到 命令模式,返回之后 vi 就会把第 2、3 两步的操作重复 10

提示:正常开发时,在 进入编辑模式之前,不要按数字

演练 2 —— 利用 可视块 给多行代码增加注释

  • 在开发中,可能会遇到一次性给多行代码 增加注释 的情况

Python 中,要给代码增加注释,可以在代码前增加一个 #

要实现这个效果可以在 命令模式

  1. 移动到要添加注释的 第 1 行代码,按 ^ 来到行首
  2. CTRL + v 进入 可视块 模式
  3. 使用 j 向下连续选中要添加的代码行
  4. 输入 I 进入 编辑模式,并在 行首插入,注意:一定要使用 I
  5. 输入 # 也就是注释符号
  6. 按下 ESC 返回到 命令模式,返回之后 vi 会在之前选中的每一行代码 插入 #

05. 分屏命令

  • 属于 vi 的高级命令 —— 可以 同时编辑和查看多个文件

5.1 末行命令扩展

末行命令 主要是针对文件进行操作的:保存退出保存&退出搜索&替换另存新建浏览文件

命令 英文 功能
:e . edit 会打开内置的文件浏览器,浏览要当前目录下的文件
:n 文件名 new 新建文件
:w 文件名 write 另存为,但是仍然编辑当前文件,并不会切换文件

提示:切换文件之前,必须保证当前这个文件已经被保存!

  • 已经学习过的 末行命令
命令 英文 功能
:w write 保存
:q quit 退出,如果没有保存,不允许退出
:q! quit 强行退出,不保存退出
:wq write & quit 保存并退出
:x 保存并退出
:%s///gc 确认搜索并替换

在实际开发中,可以使用 w 命令 阶段性的备份代码

5.2 分屏命令

  • 使用 分屏命令,可以 同时编辑和查看多个文件
命令 英文 功能
:sp [文件名] split 横向增加分屏
:vsp [文件名] vertical split 纵向增加分屏

1) 切换分屏窗口

分屏窗口都是基于 CTRL + W 这个快捷键的,w 对应的英文单词是 window

命令 英文 功能
w window 切换到下一个窗口
r reverse 互换窗口
c close 关闭当前窗口,但是不能关闭最后一个窗口
q quit 退出当前窗口,如果是最后一个窗口,则关闭 vi
o other 关闭其他窗口

2) 调整窗口大小

分屏窗口都是基于 CTRL + W 这个快捷键的,w 对应的英文单词是 window

命令 英文 功能
+ 增加窗口高度
- 减少窗口高度
> 增加窗口宽度
< 减少窗口宽度
= 等分窗口大小

调整窗口宽高的命令可以和数字连用,例如:5 CTRL + W + 连续 5 次增加高度

06. 常用命令速查图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VSXyQJV0-1595294183865)(media/14993340485745/vim.png)]

vimrc

  • vimrcvim 的配置文件,可以设置 vim 的配置,包括:热键配色语法高亮插件
  • Linuxvimrc 有两个位置,家目录下的配置文件优先级更高
/etc/vim/vimrc
~/.vimrc
  • 常用的插件有:
    • 代码补全
    • 代码折叠
    • 搜索
    • Git 集成
    • ……

你可能感兴趣的:(linux,command,linux,command)