二、Linux系统安装和基本使用

news/2024/11/15 11:30:36/文章来源:https://www.cnblogs.com/zhywyt/p/18353571

Linux系统安装和基本使用

这里我想记录自己在学习中遇到的有趣的、让自己觉得学到了的点。

Vim的使用

文章中举出的两个git power的例子非常有意思,我们来分析一下:

宏录制

The first example is to generate the following file:

1
2
3
.....
98
99
100

This file contains 100 lines, and each line contains a number. What will you do? In vim, this is a piece of cake. First change vim into normal state (when vim is just opened, it is in normal state), then press the following keys sequentially:
i1<ESC>q1yyp<C-a>q98@1
where means the ESC key, and means "Ctrl + a" here. You only press no more than 15 keys to generate this file. Is it amazing? What about a file with 1000 lines? What you do is just to press one more key:

这个例子用到了我自己并不清楚的一些操作,但是我希望通过查阅资料理解他们。i1<ESC>q1,我都能看懂。首先通过插入模式输入一个1,然后退出插入模式,使用q1开始录制宏1
image
此时可以看到下方的状态栏中出现了recording @1,也就是正在录制。然后yyp,这里分为两段,yy可以复制当前行,p可以粘贴当前行。得到的结果就是:
image
下一个指令是<C-a>,在我的STFW下,发现这个操作的作用是使整数数据+1,运行之后,第二行应该变成2,事实如此:
image
到这里之后的操作就很清晰了,q停止录制,98@1运行宏98次。最后得到:
image
第一个例子就给出了非常有意思的操作,这里给出一些宏操作的简单实例:

命令 功能
qa 录制宏 a
q 停止录制
@a 执行宏 a
@@ 重新执行上一次的宏

列交换

第二个例子是批量列交换的例子

The second example is to modify a file. Suppose you have such a file:

aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccddddddddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffff
ggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjj

You want to modify it into:

bbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaa
dddddddddddddddddddddddddccccccccccccccccccccccccc
fffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeee
hhhhhhhhhhhhhhhhhhhhhhhhhggggggggggggggggggggggggg
jjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiiiiiii

What will you do? In vim, this is a piece of cake, too. First locate the cursor to first "a" in the first line. And change vim into normal state, then press the following keys sequentially:

<C-v>24l4jd$p

where means "Ctrl + v" here. What about a file with 100 such lines? What you do is just to press one more key:

l右移光标
24l向右移动24格
4j向下移动4格
d剪切
$来到行末尾
p粘贴

如果你不理解这些操作而是直接运行的话,很可能发现无法达到预期效果,那是因为你的光标起始位置并不在文本起始位置。
我们可以使用(移动光标直到达文本起点。这里给出vim速查表:
Vim速查表

vim配置文件

在ubuntu中,vim的配置文件默认在/etc/vimrc中,我们可以修改其中的内容以让vim看起来不一样。其中有意思的有:

	syntax onset showmatch           " Show matching brackets.set ignorecase          " Do case insensitive matchingset smartcase           " Do smart case matchingset incsearch           " Incremental searchset hidden              " Hide buffers when they are abandonedset number              " Enable line of numberset hlsearch            " Enable hightlight search resultset smartindent         " auto head line format

Linux 基础

这里是Linux入门教程中的一些有趣的知识的记录。

输出一个目录下的指定文件行数

第一个让我感兴趣的是 统计当前目录的代码行数的任务,这里使用了这么一条命令实现:

find . | grep '\.c$\|\.h$\'| xargs wc -l

前面两个指令自然是非常熟悉了,但是第三条指令还是能让我学到很多。其中xargs可以将输入转化为参数一命令的参数,比如前面管道来的文件,xargs会进行分词,然后作为wc -l 命令的参数运行,而wc -l 可以统计文件的行数。这里我统计了anaconda3中的\.c$\|\.h$
这个正则表达式也可以解释一下,首先\.是为了转义.符号,因为.在正则表达式中默认是匹配任意的一个字符,转义后是.文件类型区分标志的开头,而尾部的$表示从尾部匹配。'|'与前面的转义类似,是用于给|转义,在正则中|是或者的含义。所以我们就能得到我们想要的结果:
image

统计磁盘使用情况

du -sc /usr/share/* | sort -nr | more

同样的,对于前两条命令依旧是相当熟悉了,最后一个more我却是第一次见,在输出非常长的情况,可以使用more/less来让输出可以翻页,more使用空格后翻,而less可以前后翻页。

编译一个hello world程序(或许不止于编译它?)

这些命令这里不留注释了,希望自己再再次看到他们的时候只会觉得非常熟悉,而不是需要查阅资料才能理解含义。

vim test.c
gcc -o test test.c
./test
./test > out.txt
./test | tee out.txt
objdump -d test | tee output.txt
time ./test < data | tee output.txt

可以记录的是一个将输出过滤掉的操作,只保留最后一条命令中的time输出time ./test < data > /dev/null/dev/null这个文件我也用过,但是一直只是把它当一个垃圾桶,没有深入理解过它,今天把它也搞明白。

/dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同样,/dev/null 在命令行和脚本中都非常有用。具体参考:shell脚本中 /dev/null 的用途

使用Makefile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781580.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习笔记2--JDK的安装和配置

一.进入oracle官网,下载jdk oracle官网:Oracle | Cloud Applications and Cloud Platform ps:不同的浏览器,可能进入oracle官网,会只显示部分内容,所以建议使用google Chrome浏览器在下载之前,首先需要去查看本机电脑的配置型号,如下图,右键---此电脑---选择点击属性,…

Markdown指定图片比例

编写Markdown文档时,有时候直接插入的文档,并没有按照预想的比例出现,这个时候可以手动调整其比例,具体参考: <img src="C:\Users\admin\Pictures\your_pic.png" alt="pic_name" style="zoom:30%" >

Blazor开发框架Known-V2.0.7

V2.0.7 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。官网:http://known.pumantech.com Gitee: https://gitee.com/known/Known Github:https://github.com/known/Known概述基于C#和Blazor的快速开发框架,开箱即用,跨平台。 模…

当 Spring 循环依赖碰上 Aysnc,调试过程中出现 BeanCurrentlyInCreationException,有点意思

开心一刻 前两天有个女生加我,我同意了 第一天,她和我聊文学,聊理想,聊篮球,聊小猫小狗 第二天,她和我说要看我腹肌 吓我一跳,我反手就删除拉黑,我特喵一肚子的肥肉,哪来的腹肌!循环依赖 关于 Spring 的循环依赖,我已经写了 4 篇Spring 的循环依赖,源码详细分析 →…

RAG知识库之构建知识库图谱

前面几篇文章谈了多种针对RAG的优化如多表示索引(Multi-representation indexing)、Raptor等但其都是存储在向量库中的,这里将介绍一种新的存储模式,图数据库,适合存储数据高度相关的数据。其存储实体与实体间的关系,存储着丰富的关系类型数据,能给RAG知识库带来更精准的…

《花100块做个摸鱼小网站! 》第二篇—后端应用搭建和完成第一个爬虫

一、前言 大家好呀,我是summo,前面已经教会大家怎么去阿里云买服务器(链接在这,需要自取),以及怎么搭建JDK、Redis、MySQL这些环境或者数据库。从这篇文章开始就进入正式的编码阶段了,我们从后端开始,先把热搜数据获取到,然后再开始前端部分。 本来我想把后端应用搭建…

《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(3)-Wireshark在MacOS系统上安装部署

1.简介 上一篇中介绍和讲解、分享了Wireshark在Windows系统上安装部署,今天就介绍和讲解、分享Wireshark在MacOS系统上安装部署。Wireshark不仅是Windows系统网络协议分析软件也是一款mac网络协议分析软件,任何负责的网络分析人员都对这个软件情有独钟。如今,几乎没有哪种产…

下一代浏览器和移动自动化测试框架:WebdriverIO

1、介绍 今天给大家推荐一款基于Node.js编写且号称下一代浏览器和移动自动化测试框架:WebdriverIO 简单来讲:WebdriverIO 是一个开源的自动化测试框架,它允许测试人员使用 Node.js 编写自动化测试脚本,用于测试Web应用、移动应用和桌面应用程序。能够执行端到端(e2e)、单…

七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)

教程简介 EasySQLite是一个七天.NET 8操作SQLite入门到实战详细教程(包含选型、开发、发布、部署)! 什么是SQLite?SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不…

【Mac】Termius for mac(终端模拟器/SSH/SFTP客户端)

今天给大家介绍一款软件叫Termius,这是一款终端模拟器/SSH/SFTP客户端。软件介绍 Termius for Mac是一款功能强大的跨平台SSH客户端,专为开发人员、系统管理员和网络工程师设计。它支持SSH、Telnet、Mosh等多种协议,能够安全地连接和管理各种远程服务器和设备。Termius for …

基于概率判断矩阵A*B是否等于C

如果是\(O(n^3)\)的暴力肯定会T,那么我们想有没有一种方法可以不用直接让 \(A*B\) 而是间接得到, 我们可以随一个n*1的矩阵 D 出来,矩阵乘法是满足交换律的: \(A*B=C\) \(A*B*D=C*D\) \(A*(B*D)=C*D\) 这样我们就可以在\(O(n^2)\)的复杂度完成判断, 根据不知道是啥的秩_零化…

pyCharm 设置 签名,时间

#!python3.8 # -*- coding: utf-8 -*- # --- # @File: ${NAME}.py # @Author: ${USER} # @Time: ${MONTH_NAME_SHORT} ${DAY}, ${YEAR} # ---