我们编程吧 集锦
我们编程吧 集锦
BOOK
目前共分享了** 43 ** 个技巧,详细参考: BOOK 集锦
C
目前共分享了** 126 ** 个技巧,详细参考: C 集锦
CPP
目前共分享了** 16 ** 个技巧,详细参考: CPP 集锦
GIT
目前共分享了** 113 ** 个技巧,详细参考: GIT 集锦
LINUX
目前共分享了** 457 ** 个技巧,详细参考: LINUX 集锦
MAC
目前共分享了** 6 ** 个技巧,详细参考: MAC 集锦
PGPLOT
目前共分享了** 86 ** 个技巧,详细参考: PGPLOT 集锦
PYTHON
目前共分享了** 112 ** 个技巧,详细参考: PYTHON 集锦
MATPLOTLIB
目前共分享了** 11 ** 个技巧,详细参考: MATPLOTLIB 集锦
QT
目前共分享了** 34 ** 个技巧,详细参考: QT 集锦
VIM
目前共分享了** 50 ** 个技巧,详细参考: VIM 集锦
后记
目前共分享了** 1445 个技巧,平均每天 0.23 **个。持续更新中,欢迎来访。
SMILI 安装说明
SMILI 安装说明
安装依赖
1 | $ sudo apt install x11* |
安装 OpenBLAS
1 | # Clone the current repository |
安装FFTW3
1 | $ apt install fftw* |
安装 FINUFFT
1 | # 下载源码 |
准备make.inc文件,内容如下:
1 | # Compilers |
开始编译库
1 | $ make lib |
新建finufft.pc文件,内容如下:
1 | # This is an example pkg-config file. Here is an brief instruction. |
确认是否安装完毕
1 | # 确认是否安装正确 |
安装SMILI
1 | # Clone the repository |
信佛姓佛
溪水里的小鱼
溪水里的小鱼
在所有卵中,我觉得最有意思的是鱼卵。
几乎所有鱼卵都是非常小的白色圆球,就像糖丸一样。
有些鱼卵像中等大小的玻璃珠,比如在急流中砾石滩上常见的鳟鱼或鲑鱼卵;还有许多小得能穿过织补针的针眼,比如贴着海面漂浮的海鱼卵。
不管怎样,特别令人感兴趣的是,那么多鱼卵像极了小玻璃球。
其外层薄膜非常清透,卵本身也非常透明,你完全可以用放大镜透视鱼卵,目睹里面的白色斑点从无到有,发育成真正的鱼。
它卧在卵里,身长足以环绕卵一周,尾巴几乎和嘴相连。
有些鱼卵更加清透。最清透的卵起初好似透明玻璃,在水下完全不见踪影。
不久以后,其底部开始形成模糊的小白点。
接着,你能看见卵上覆盖着相当厚的膜,膜中有一个狭窄而清澈的空间,充满了水,里面漂浮着更小的卵黄。
这个时候它才是即将变成小鱼的真正的卵。
卵黄中的白色斑点本身并不是鱼,而是鱼物质,是为逐渐发育成鱼而做的准备。
斑点越长越大,越长越厚,最终,看上去好似涂在大理石边的一圈腻子。
卵膜直径接近卵本身的一半时,中间开始变薄,边缘变厚,形成一个环。
紧接着,这个环会发生非常奇特的变化。它开始长大,并在这个过程中环绕着鱼卵越滑越远,不久便形成以卵为中心的带状物,继续向外滑行,直至卵的另一侧。
当然,它会相应变得小一些。就这样,其多余部分收进环上的某一点,形成小鱼的身体。
在经过卵中心之前,环的增厚部分已经形成鱼头,环的两端形成身体的两部分。鱼尾比较容易发育,所以很久以后才会长出来。
现在,小鱼有头和身子了,唯一不同的是头比较大。
它还没有任何器官,没有眼睛、耳朵、鼻子,或完整的嘴,也没有鳍、脊椎、胃,以及鳞片。
这些都会在以后出现,就像小鸡的发育一样——眼睛、耳朵、大脑和心脏先发育,鳍、尾巴和鳞片,以及整个身体前部需要很久以后才发育成形。
许多科学家倾尽毕生精力,研究小动物各种肢体器官形成的方式。
这是一项最奇特,也最令人着迷的课题,值得任何人耗费一生进行研究。
但是,如果要我讲述鱼体最小部位形成的全部过程,本书就没有地方讲述其他故事了。
所以,我只想讲讲眼睛,部分因为它们是有趣而重要的器官,更多的是因为它们形成的方式碰巧和所有脊椎动物眼睛形成的方式相同——无论鱼类,蛙类、鸟类、四足野兽,还是人类。
亲爱的读者,你看这本书的眼睛也是如同我亲眼所见的鳕鱼和海鲈鱼的眼睛那样发育而成。
一般来说,最早形成的身体部位是大脑,紧接着是眼睛。
刚萌生的眼睛像两个蓓蕾,从即将成为头部的大脑两侧冒芽。此时,每只眼睛都是空的,好似挂在短柄上的气泡,很像铅笔头上粘着的空心橡皮球,只是大小不同。
你会以为,这个空心球会直接变成眼球。
可是,你错了,大自然很少简单行事。相反,像你用手指推动橡皮球一样,眼芽的一侧会向内折,直到形成杯状。
这个杯就是眼球。它的边缘长出来,杯口渐渐收缩至我们称之为瞳孔的眼睛中央。
各种各样的眼部物质在其边缘生长,构成眼睛的内部组织。其他组织在外部生长,加厚外壁,形成前面透明的角膜。
此时,瞳孔依然很大,以后会成为表皮的部分物质向眼球内生长,形成眼睛的晶状体。眼芽最初内折形成杯状,随后收缩成为我们最终使用的眼球,这种反向发育的目的是为了将各种物质纳入眼睛,最终留下瞳孔透入光明。
到目前为止,像小鸡一样,小鱼的身体前部还没有发育成形。
小鱼卧在卵黄里,好似肚子疼的孩子,抱着枕头,缩成一团。
渐渐地,尾巴从卵黄中长出来,鱼头也完全抬起来,给下颚留出发育的空间。
最后,身体各部在卵黄周围发育完成,并安置在最恰当的部位。
这时,鱼已经做好孵化准备。它时不时地在卵膜中扭动一会儿,最后突破卵膜,漂浮出来。这是一个弱小无助的生命,只比半个卵黄大一点。它不会游泳,只是肚皮朝上漂浮着,嘴巴大张,还没能合拢下巴。
从这时起,小鱼以越来越小的卵黄为食,迅速成长。
起初,这个小生命依靠背部浮动,时而摆动一下。随着卵黄变得易于掌控,小鱼越来越频繁地摆动起来。
不久,它翻为侧身,然后完全侧过身来。等到卵黄全部消失,它就侧身游动起来,并且开始进食更小的水生物。
在这个阶段,如果是淡水鱼,你会在浅滩处看见它们成群地游动。
不过,这些鱼长只有6毫米左右,而且多半是眼睛。
linux中最常用的网络命令
linux中最常用的网络命令
仅个人想法,会持续不间断更新和改进。
虚虚假假,真真实实,如何快速的去伪存真,抽丝剥茧。
需要在开放的网络世界掌握一些最基础的命令,让自己知己知彼。
查看网络信息的原初 ifconfig
Linux ifconfig
命令用于显示或设置网络设备,在调试或调优的时间经常使用。
官方定义为:
ifconfig - configure a network interface
对于这个命令,一般只要掌握如何查看,如何设置IP地址基本就可以了,对于网络钻的比较深的,还需要更多一些参数。
使用方法为:
1 | # 显示 |
一些参数的含义为:
-a
:显示所有网卡的状态,即使是down的状态-s
:显示一个短列表interface mtu N
设置最大传输单元【需要管理员权限】netmask addr
:设置掩码地址【需要管理员权限】interface up
激活网卡【需要管理员权限】interface down
关闭网卡【需要管理员权限】interface hw ether xx.xx.xx.xx.xx.xx
设置MAC地址【需要管理员权限】
默认无参数使用
如果不指定任何参数,直接显示当前活动的接口,如下:
1 | $ ifconfig |
其中一般希望看到的信息包括:
- inet:为IP地址
- ether:为MAC地址
- MTU:最大传输单元
不加任何参数只会显示已经配置并且活跃的网卡信息,如果使用ifconfig -a
就可以显示全部的网卡状态了,即使有些网卡是down的状态。
亦或者指定一个interface,比如上面的eth1,则只输出这个网卡的信息,如下:
1 | $ ifconfig eth1 |
-s显示短列表
如果只想看到MTU以及数据包的状态,可以用该参数,如下:
1 | $ ifconfig -s |
输出信息主要包含了MTU值,发送及接收的数据情况。
配置IP地址
如下对eth0网卡配置IP地址、掩码以及广播地址,当然可以分布操作
1 | # 给eth0配置IP地址 |
修改MTU
在某些情况下可能需要修改MTU值,比如增到到MTU为9000,如下:
1 | $ ifconfig eth1 |
已经看到输出的信息已经把mtu更新为了9000.
这个值对网络传输影响很大。
启动关闭网卡
启动关闭主要的应用场景为重新设置了IP地址,或者暂时对某个网卡进行操作。
1 | # 关闭eth0 |
不过需要注意的是
- 很多的设置操作都需要管理员权限;
- 很多操作在重启后设置都会还原,如果需要永久设置,需要更改network的一些配置文件;
- 这个程序基本被淘汰了,已经不在更新,所有的操作或者用法均可以通过
ip
来搞定。等明天~。
网络中不中,先看ping行不行
在linux系统里面如果想判断网络的好坏,脑海中蹦出的第一个命令就是ping
了。
官方定义为:
ping - send ICMP ECHO_REQUEST to network hosts
ping
命令基本是最常用的网络命令,它可以用来测试与目标主机的连通性。
ping
使用ICMP传输协议,通过发送ICMP ECHO_REQUEST数据包到网络主机,并显示返回的相应情况,根据这些信息就可以判断目标主机是否可以访问,在发送的过程中还会有一个时间戳用来计算网络的状态。
不过有些服务器为了防止通过ping
探测到,可能会在防火墙或者内核参数中禁止ping
命令,这样的话,可能虽然目标主机可以访问,但是无法ping
通,所以并不能说ping
不通的网络就是不能访问的。
需要注意linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按ctrl+c终止或者用参数-c指定要求完成的回应次数。
语法
ping
的使用说实话挺复杂,挺多的,不过常用的这篇短文基本就够了。
详细如下:
1 | # ALL |
参数说明:
-c
<完成次数> 设置完成要求回应的次数。-i interval
指定收发信息的间隔时间。
不加任何参数
如果不加任何参数,查看是否ping
通
1 | $ ping www.baidu.com |
可以看到可以ping
通www.baidu.com,时延还算比较OK,几个毫秒量级。
这里看一下几个字段的含义,其中:
56(84) bytes of data:表示默认的数据包长度为56字节;
time=5.56ms:表示响应的时间,值越小,证明连接越快;
TTL=52:TTL是Time To Live的缩写,表示DNS记录在DNS服务器上存在的时间,是IP协议包的一个值,告诉路由器啥时候抛弃这个数据包,(大体上可以通过这个值来判断目标类型的操作系统。)
发送指定数目
可以通过 参数-c
来发送指定数目的包后停止
1 | $ ping www.baidu.com -c 5 |
此时将在发送5次数据包以后自动停止,在Linux里面,如果不加这个参数,是会一直发送运行的。
设定发送时间间隔
可以通过 参数 -i N
指定每个N秒发送一次信息,如下将每隔3秒发送一次ping
信息。
1 | $ ping www.baidu.com -i 3 |
如上,每隔3秒会发送一次,对于需要持续检测或者记录的可以考虑适当加大这个时间间隔。
注意,只有管理员可以设置小于0.2秒的时间间隔。所以这个数值可以是浮点数~
组合使用
上面的几个例子是可以配合使用的,比如
1 | $ ping www.baidu.com -c 4 -i 5 |
这个例子为:每个5秒查询一次,一共查询4次,然后退出。
Linux ip命令
Linux ip
命令与 ifconfig
命令类似,但比 ifconfig
命令更加强大,主要用于显示或设置网络设备。
已经在Linux 2.2 加入到了内核。所以ip
是加强版的网络配置工具,用来替代ifconfig
并强化其他功能。
官方定义为:
ip - show / manipulate routing, devices, policy routing and tunnels
对于这个命令,命令集是相当的多。先说一些基础的,其他就要自己摸索了。
使用方法为:
1 | $ ip [ OPTIONS ] OBJECT { COMMAND | help } |
COMMAND的值主要取决于OBJECT,可能有所不同,一般可以使用add
,delete
和show
(或者list
),均可以输入help
来进行查询。
OBJECT中常用的为:
link
网络设备address
设备上的协议地址-s, -stats, -statistics
统计化输出
显示网络设备
1 | # 显示网络设备 |
命令中的show为默认,也可以直接使用ip link
或者ip address
,结果一致。
设置IP地址
可以通过ip addr add/del xxx.xxx.xxx.xxx dev interface
来设置或者删除IP地址。
如下设置or删除eth0的IP地址。
1 | # 设置IP地址 |
启动关闭网卡
与ifconfig类似,也使用up与down来进行启动和关闭,具体如下:
1 | # 开启网卡 |
统计方便阅读
选项-s可以统计一些信息方便我们阅读,如下看看网络的情况:
1 | $ ip -s link |
可以看到对输出进行了一些格式化,看起来更直观。
探索网络连接的netstat
在Linux系统中,网络是至关重要的部分,而netstat
命令是管理和监视网络连接的强大工具之一。
它提供了关于网络接口和路由表的详细信息,有助于了解网络连接状态、统计信息以及网络协议的使用情况。
也更方便我们对网络的管理、故障排除以及安全监控等等。
基本概述
netstat
命令比较简单,通过简单的参数组合,可以获得各种网络相关的信息。
以下是一些常用的参数及其功能:
-a
:显示所有连接和监听端口。-t
:仅显示TCP连接。-u
:仅显示UDP连接。-n
:以数字形式显示地址和端口号。-p
:显示进程标识符和程序名称。-r
:显示路由表。-s
:显示统计信息。
非交互的下载工具 wget
Linux
系统中的wget
是一个下载文件📀的命令行工具,特别普遍 。
对于Linux
用户是必不可少的工具,对于经常要下载一些软件或从远程服务器恢复备份到本地服务器,这个命令尤为重要。
wget
支持很多协议,比如HTTP
,HTTPS
和FTP
协议,还可以使用HTTP
代理。
wget
的有诸多特点,比如
- 自动下载
wget
支持自动下载,即wget
可以在用户退出系统的之后在后台执行。这意味着你可以登录系统,启动一个wget
下载任务,然后退出系统,wget
将在后台执行直到任务完成,这是个牛气冲天的功能。 - 完全重建
wget
可以跟踪HTML
页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候,wget
遵循Robot Exclusion标准(/robots.txt).wget
可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。 - 高稳定
wget
非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget
会不断地尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
命令格式
1 | $ wget [参数] [URL地址] |
用于从网络上下载资源,没有指定目录,下载资源会默认为当前目录。wget
虽然功能强大,但是使用起来还是比较简单:
使用范例
wget
的命令参数很多,不过常用的为下面几个,详细的可以看进阶。
使用wget下载单个文件
比如,我们下载个Ubuntu的最新版本,试下效果如何
1 | $ wget http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.iso |
在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。
使用wget -O下载并以不同的文件名保存
这个对于动态链接的下载比较有用,特别是有些文件的名字实在是太……………….长了
1 | $ wget -O wordpress.zip http://www.ubuntu.com/download.aspx?id=1234 |
使用wget -c断点续传
1 | $ wget -c http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.iso |
使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。
使用wget -o把下载信息存入日志文件
1 | $ wget -o download.log URL |
不希望下载信息直接显示在终端而是在一个日志文件,可以使用,特别注意需要与-O
来区分开~
linux中最常用的用户信息命令
- groups - show group memberships
- finger - shows information about users
- last - displays most recent user logins
linux中最常用的用户信息命令
仅个人想法,会持续不间断更新和改进。
用户信息,重中之重。
虽然21世纪最重要的是人才。
但对于我们个人而言,用户信息也是极其重要并特别需要留意的。
还有谁 last
Linux last
命令用于显示用户最近的登录信息。
官方定义为:
last, lastb - show listing of last logged in users
通过读取/var/log/wtmp文件来获取这些信息。
语法
1 | $ last [-R] [-num] [ -n num ] [-adFiowx] [ -f file ] [ -t YYYYMMDDHHMMSS] [name...] [tty...] |
参数:
-R
省略 hostname 的栏位-n
展示前 num 个username
展示 username 的登入讯息tty
限制登入讯息包含终端机代号
一般使用方法
1 | $ last |
查看最近登陆的三个用户
1 | $ last -3 |
省略hostname
1 | $ last -3 -R |
显示最后一列显示主机IP地址
1 | $ last -n 5 -a -i |
我是谁 whoami
我知道你是谁,但我不知道我是谁,此时whoami
可以帮助你,哈哈。
whoami
将打印当前用户的名字。与id -un
类似。
官方定义为:
whoami - print effective userid
用法为:
1 | $ whoami [option] .. |
这命令,基本没有参数。
我暂时。。也没有想到为什么会有这个命令。
唯一的可能使你找管理员来配置个啥,然后他需要知道你是谁,不,我是谁。
我看了一下源码,果然简洁:
1 | #include <config.h> |
其中使用的即为uid = geteuid ();
。
谁?who
.. note::
物是人非事事休,欲语泪先流。
李清照《武陵春·春晚》
知道了我是谁,接下来就要知道谁是谁了。
who
将显示谁在登录,显示的内容可能包括用户名、终端登录口,登录的时间等等信息。
官方定义为:
who - show who is logged on
用法为:
1 | $ who [OPTION]... [ FILE | ARG1 ARG2 ] |
常用的参数为:
-q , --count
:只显示登入系统的帐号名称和总人数;-s
:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;-a, --all
:效果为加上-b -d --login -p -r -t -T -u
-b, --boot
:上一次系统的重启时间-d, --dead
:打印dead进程-H, --heading
:打印每一列的表头-q, --count
:所有登录的用户名以及用户登录的数量-s, --short
:打印USER/LINE/WHEN(默认为这个参数)
默认使用
显示当前登录系统的用户
1 | $ who |
系统的运行时间
这个信息显示系统自上一次重启后的运行时间。
1 | $ who -b |
显示表头信息
使用-H
或者--heading
可以看到表头信息
1 | $ who -H |
显示登录的人员及总数
1 | $ who -q |
什么?谁?w (who & what)
w
可以认为是加强版的who
,果然越简洁越强大,就比如less
比more
是功能更多的。
w
不仅可以显示谁在登录,还可以打印他们在做什么。w
显示的信息如下:
- 登录的用户;
- 运行的程序;
- 第一行显示的信息:当前时间、系统运行的时间、多少用户登录、系统的负载(分贝为1,5,15分钟)
官方定义为:
w - Show who is logged on and what they are doing.
用法为:
1 | $ w [options] user [...] |
常用的两个选项为:
-h
不显示各栏位的标题信息列。-s
简洁格式列表,不显示用户登入时间,JCPU或者PCPU的时间
默认的显示
显示当前用户的登录信息及执行的命令
1 | $ w |
不显示标题行
1 | $ w -h |
简洁模式显示
1 | $ w -s |
不要告诉别人的passwd
passwd
用于创建或者更新用户密码,是管理员必备的命令之一。
这个命令最终的实现是通过调用Linux-PAM 和Libuser API来实现的。
官方的定义为:
passwd - update user’s authentication tokens
使用的方法为:
1 | $ passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username] |
其中很常用的options为:
-S, --status
:显示密码的状态信息-d, --delete
:删除用户密码,此时该用户将处于无密码状态
不太常用的options为:
--stdin
:可以通过标准输入,亦可以为一个pipe-l, --lock
:锁定账号,不过也不是完全锁定,因为用户可以通过ssh key来继续访问-u, --unlock
:与上面的-l
选项相反,属于解锁用户-w, --warning DAYS
:口令到期前通知用户,具备password lifetime的才支持
修改或更新密码
这个是最常用的用法,用于设置或者修改更新用户密码
1 | $ sudo passwd user #设置用户user的密码 |
删除用户密码
1 | $ sudo passwd -d user |
此时用户处于无密码的状态,很类似最近说的,没有密码就是最安全的密码。
查看密码的状态
1 | $ sudo passwd -S user |
说到密码,有两个比较重要的原则:
- 保护好你的密码,不写下来而是记在脑海里,定时修改;
- 选择一个很难猜的密码,而不是最容易被攻破的top密码;
linux中最常用的搜索命令
Linux中最常用的搜索命令
仅个人想法,会持续不间断更新和改进。
在Linux的庞大世界中,搜索犹如明灯,可以拨开云雾见青天,照亮我们前行大道路。
无论你是在浩瀚的代码库中搜索一个特定的函数,还是在庞大的文件系统中寻找一个文件,搜索命令着实是不可或缺尤为重要的工具。
而其中最绕不开的当属以下几个。
一切皆可查的 find
find
命令用来在指定目录下查找文件,功能相当之强大。
官方定义为:
find - search for files in a directory hierarchy
Linux的哲学是一切皆文件,那么find的使命就是一切皆可查。
语法
使用语法为:
1 | $ find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] |
比较常用的几个参数为:
-exec <执行指令>
:假设find指令的回传值为True,就执行该指令;-size <文件大小>
:查找符合指定的文件大小的文件;-mtime <24小时>
:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;-name<范本样式>
:指定字符串作为寻找文件或目录的范本样式;-type <文件类型>
:只寻找符合指定的文件类型的文件;
无参数
如果使用该命令时,不设置任何参数,则find
命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
1 | $ ls -l |
查找小于,等于和大于100MB的文件
通过-size大小来查找文件
1 | $ find . -size -100M |
查找多长时间修改过
可以通过参数-mtime来查找文件的修改时间,比如如下可以查找当前目录下最近60天没有被修改的文件。
1 | $ find . -mtime +60 |
稍微复杂但是很有用的命令
我经常把 find
命令和他的选项 exec
一起使用,比如我想查找一个目录中的所有文件并将其更改其权限。可以通过以下简单命令完成:
1 | $ find /path/ -type f -exec chmod 644 {} \; |
这个命令会递归搜索指定目录内/path/下的所有文件,并对找到的文件执行 chmod
命令。
精准快速定位的locate
.. note::
众里寻他千百度,蓦然回首,那人却在灯火阑珊处
-李煜
Linux locate
命令用于查找符合条件的文档、程序、目录等等。这个命令会在数据库中查找符合条件的各种信息。
一般情况我们只需要输入 locate name
即可查找。
官方定义为:
locate
- list files in databases that match a pattern
使用方法为:
1 | $ locate [-d path | --database=path] [-e | -E | --[non-]existing] [-i | --ignore-case] [-0 | --null] [-c | |
看着很复杂,不过常用的参数倒是不多,基本为:
-n
: 至多显示 n个输出。-i, --ignore-case
: 忽略大小写
默认无参数
默认情况下,locate
直接跟上需要查找的信息就可以了,如下所示:
1 | $ locate set_vis.cpp |
太多需要简单化
如果输出的信息很多,仅仅希望看到前面的几个,使用-n
参数既可
1 | # 仅仅查看前的3个 |
不区分大小写
部分情况下,可能有大小写混淆的情况,此时使用-i
参数既可
1 | $ $ locate -i set_vis.cpp |
说明
不过刚按照的系统,这个命令并不一定有输出,主要是因为locate
与 find
不同, find
直接在硬盘找,而locate
只在数据库中查找。
这个数据库在CentOS系统默认的为 /var/lib/mlocate/mlocate.db 中,所以 locate
的查找会比较快,但并一定是实时的,而是以数据库的更新为准。
可以通过下面的命令手工升级数据库 ,命令为:
1 | $ updatedb |
然后就可以使用了。
文件内容搜索利器 - grep
Linux grep
命令用于查找文件里符合条件的字符串。
官方定义为:
grep
,egrep
,fgrep
- print lines matching a pattern
grep支持正则表达式,是一个强大的文本搜索工具。
语法
语法也挺复杂,因为功能确实很强大。
1 | $ grep [OPTION...] PATTERNS [FILE...] |
常用的参数为:
- -r 或 –recursive : 此参数的效果和指定”-d recurse”参数相同
- -v 或 –invert-match : 显示不包含匹配文本的所有行
- -i 或 –ignore-case : 忽略字符大小写的差别
- -n 或 –line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
假定有如下3个文件,1个文件夹,内容如下:
1 | a |
默认无参数
在当前目录搜索包含is字符串,可以看到**a/b/c**三个文件均有输出,而d因为是目录,暂时无输出。
1 | $ grep is * |
增加文件夹
与其他命令类似,增加-r
参数,递归搜索
1 | $ grep -r is * |
反向查找
在某些情况下,或许正想找到不包含某些字符串的内容,如下:
1 | $ grep -rv is * |
此时可以看到,不包含is的内容显示了出来。
不区分大小写
而某些情况下,或许我们希望找到不区分大小写的内容,比如对于This/this而言:
1 | $ grep -r This * |
可以看到此时有可能笔误,或者其他原因的b文件已经被找到了。
显示行数,精准定位
如果文件内容比较多,此时显示内容在哪一行,是很重要的,加上-n
参数既可解决。
1 | $ grep -rn This * |
linux中最常用的目录导航命令
Linux中最常用的目录导航命令
仅个人想法,会持续不间断更新和改进。
在Linux世界中,为了更加高效地浏览和定位文件,需要一些常用的目录导航命令。
探索未知世界的cd
.. note::
月桥花院,琐窗朱户,只有春知处。
宋 辛弃疾《青玉案·元夕》
cd
命令应该是除了 ls
命令外用的最多的命令了。除非你大门不出二门不迈,做个大家闺秀。
cd
命令的含义为
cd - change directory
可以让我们访问不同的文件夹。
最简单的用法为:
1 | $ cd /the/path/you/want/to/go/ |
接下来说一些技巧,让效率加倍。
让cd命令对参数大小写不敏感
如果你需要同时显示大写和小写的目录名(即便是你给的参数只是小写的),执行下面的bind
命令,此时就可以避免Linux
和linux
的尴尬。
1 | $ bind "set completion-ignore-case on" |
进入刚才的目录
想要进入刚才进入的地方(目测没有很多人再用,但是真的很好用)运行:
1 | $ cd – |
快速返回家目录
需要快速地回到你的家目录,输入cd
即可,这里其实不用一级一级的进入
1 | $ cd |
进入某用户的家目录
这个需要你有root权限
1 | cd ~username |
进入username的家目录。
这些是一些比较基础和入门的,还有一些高级一点的,这些技巧可能用的比较少,不过也是很有帮助的。
结合CDPATH的妙用
变量CDPATH定义了目录的搜索路径:
1 | $ export CDPATH=/the/path/you/add/:/another/path/ |
现在,不用输入cd /the/path/you/add/hello/
这样长了,我可以直接输入下面的命令进入 /the/path/you/add/hello/
:
1 | $ cd html |
!$
这个命令目测,用的人不多,其实比较有用,且有效。
1 | $ cd !$ |
表明的意思是将上一个命令的参数作为cd的参数来使用。
用shopt –s cdspell自动纠正cd命令的目录名输入错误
使用shopt -s cdspell
可以自动修正cd
时拼写错误的目录名。
如果你在输入时经常犯些错误,这个命令是很有用的。详见以下示例:
1 | # cd /etc/mall |
注: 当我错误的把mail敲成了mall,用这个命令mall就自动被换成了mail
最常用的且没有之一的 ls
.. note::
寻寻觅觅,冷冷清清,凄凄惨惨戚戚。
宋 李清照《声声慢·寻寻觅觅》
如果linux
命令来个排名,ls
命令应该是最常用的命令,除非你像黄蓉的母亲,有过目不忘的本领,惹得黄药师抱憾终身。
ls
命令是list
的缩写,通过ls命令,我们可以查看目录的内容,确定各种重要文件和目录的属性。
命令格式
1 | ls [参数] [路径] |
不加任何参数
如果不加任何参数,默认列出当前目录的内容。
1 | $ ls /etc/sysconfig/network-scripts |
使用-l显示更多细节
-l 就是使用long listing format长格式,来显示更多的内容信息。
1 | $ ls -l /etc/sysconfig/network-scripts |
使用-t按照时间排序
如果希望看到最近创建的文件,就需要用到-t参数了。
1 | $ ls -lt /etc/sysconfig/network-scripts/ |
使用-r按照时间逆序
如果希望删除很早以前的文件,看到最早创建的文件,就需要用到-r参数了。
1 | $ ls -ltr /etc/sysconfig/network-scripts/ |
使用-S根据文件大小排序
1 | $ ls -lS /etc/sysconfig/network-scripts/ |
查看目录命令pwd
pwd
命令的作用是查看当前目录,没有参数,输入后回车即可显示当前绝对路径。
官方定义为:
pwd - print name of current/working directory
所以pwd
是Print Working Directory第一个字的缩写。
唯二需要了解的参数如下:
-L
,--logical
:打印逻辑路径,与pwd
一致-P
,--physical
:打印物理路径,这里可以从超级链接直达原处
实例展示
此时比如我们进入一个目录,然后在打印出来,如下:
1 | $ cd /etc/sysconfig/network-scripts/ |
可以看到pwd将输出完全路径
逻辑与物理路径
比如如下:
1 | $ pwd |
可以看到此时的路径在/opt/test/里面有两个目录source和dir,其中dir链接到source里面的dir。
接下来对比一下-L和-P的区别。
1 | $ cd dir |
从上面的输出可以发现,-P
参数会显示文件最原始的路径;而-L
则是逻辑上的路径。
Linux tree命令
Linux tree
命令以树状图列出目录的内容。
执行tree
指令,它会列出指定目录下的所有文件,包括子目录里的文件。
官方定义为:
tree
- list contents of directories in a tree-like format.
使用方法为:
1 | $ tree [-acdfghilnpqrstuvxACDFQNSUX] [-L level [-R]] [-H baseHREF] [-T title] [-o filename] [--nolinks] [-P pattern] [-I pat‐ |
参数比较多,也比较复杂。其中常用的选项为:
-d
显示目录名称而非内容。-D
列出文件或目录的更改时间。
实例 默认显示
默认显示当前目录的信息,比如tree和tree .的含义一样。命令有如下输出结果:
1 | $ tree |
只显示目录
1 | $ tree -d |
显示具体的修改时间
1 | $ tree -D |
默认情况下tree可能没有安装,可以通过
apt
/yum
install tree来安装。
linux中最常用的文件操作命令
Linux中最常用的文件操作命令
仅个人想法,会持续不间断更新和改进。
在Linux的庞大世界中,搜索犹如明灯,可以拨开云雾见青天,照亮我们前行大道路。
无论你是在浩瀚的代码库中搜索一个特定的函数,还是在庞大的文件系统中寻找一个文件,搜索命令着实是不可或缺尤为重要的工具。
而其中最绕不开的当属以下几个。
一切皆可查的 find
find
命令用来在指定目录下查找文件,功能相当之强大。
官方定义为:
find - search for files in a directory hierarchy
Linux的哲学是一切皆文件,那么find的使命就是一切皆可查。
语法
使用语法为:
1 | $ find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] |
比较常用的几个参数为:
-exec <执行指令>
:假设find指令的回传值为True,就执行该指令;-size <文件大小>
:查找符合指定的文件大小的文件;-mtime <24小时>
:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;-type <文件类型>
:只寻找符合指定的文件类型的文件;
无参数
如果使用该命令时,不设置任何参数,则find
命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
1 | $ ls -l |
查找小于,等于和大于100MB的文件
通过-size大小来查找文件
1 | $ find . -size -100M |
查找多长时间修改过
可以通过参数-mtime来查找文件的修改时间,比如如下可以查找当前目录下最近60天没有被修改的文件。
1 | $ find . -mtime +60 |
稍微复杂但是很有用的命令
我经常把 find
命令和他的选项 exec
一起使用,比如我想查找一个目录中的所有文件并将其更改其权限。可以通过以下简单命令完成:
1 | $ find /path/ -type f -exec chmod 644 {} \; |
这个命令会递归搜索指定目录内/path/下的所有文件,并对找到的文件执行 chmod
命令。
精准快速定位的locate
.. note::
众里寻他千百度,蓦然回首,那人却在灯火阑珊处
-李煜
Linux locate
命令用于查找符合条件的文档、程序、目录等等。这个命令会在数据库中查找符合条件的各种信息。
一般情况我们只需要输入 locate name
即可查找。
官方定义为:
locate
- list files in databases that match a pattern
使用方法为:
1 | $ locate [-d path | --database=path] [-e | -E | --[non-]existing] [-i | --ignore-case] [-0 | --null] [-c | |
看着很复杂,不过常用的参数倒是不多,基本为:
-n
: 至多显示 n个输出。-i, --ignore-case
: 忽略大小写
默认无参数
默认情况下,locate
直接跟上需要查找的信息就可以了,如下所示:
1 | $ locate set_vis.cpp |
太多需要简单化
如果输出的信息很多,仅仅希望看到前面的几个,使用-n
参数既可
1 | # 仅仅查看前的3个 |
不区分大小写
部分情况下,可能有大小写混淆的情况,此时使用-i
参数既可
1 | $ $ locate -i set_vis.cpp |
说明
不过刚按照的系统,这个命令并不一定有输出,主要是因为locate
与 find
不同, find
直接在硬盘找,而locate
只在数据库中查找。
这个数据库在CentOS系统默认的为 /var/lib/mlocate/mlocate.db 中,所以 locate
的查找会比较快,但并一定是实时的,而是以数据库的更新为准。
可以通过下面的命令手工升级数据库 ,命令为:
1 | $ updatedb |
然后就可以使用了。
文件内容搜索利器 - grep
Linux grep
命令用于查找文件里符合条件的字符串。
官方定义为:
grep
,egrep
,fgrep
- print lines matching a pattern
grep支持正则表达式,是一个强大的文本搜索工具。
语法
语法也挺复杂,因为功能确实很强大。
1 | $ grep [OPTION...] PATTERNS [FILE...] |
常用的参数为:
- -r 或 –recursive : 此参数的效果和指定”-d recurse”参数相同
- -v 或 –invert-match : 显示不包含匹配文本的所有行
- -i 或 –ignore-case : 忽略字符大小写的差别
- -n 或 –line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
假定有如下3个文件,1个文件夹,内容如下:
1 | a |
默认无参数
在当前目录搜索包含is字符串,可以看到**a/b/c**三个文件均有输出,而d因为是目录,暂时无输出。
1 | $ grep is * |
增加文件夹
与其他命令类似,增加-r
参数,递归搜索
1 | $ grep -r is * |
反向查找
在某些情况下,或许正想找到不包含某些字符串的内容,如下:
1 | $ grep -rv is * |
此时可以看到,不包含is的内容显示了出来。
不区分大小写
而某些情况下,或许我们希望找到不区分大小写的内容,比如对于This/this而言:
1 | $ grep -r This * |
可以看到此时有可能笔误,或者其他原因的b文件已经被找到了。
显示行数,精准定位
如果文件内容比较多,此时显示内容在哪一行,是很重要的,加上-n
参数既可解决。
1 | $ grep -rn This * |