文档章节

Linux知识点记录

卓尔
 卓尔
发布于 2014/10/30 16:58
字数 1975
阅读 23
收藏 0

----------------------------------------------一切关于Linux的知识点都记录在这里-------------------------------------------------------

在命令行中输入$man 2 syscalls可以查看所有的系统调用。可以通过$man 2 read来查看系统调用read()的说明。在这两个命令中的2都表示我们要在2类(系统调用类)中查询(具体各个类是什么可以通过$man man看到)。

>表示重新定向,|表示管道

Linux老鸟鼓励新手多用shell,少用图形化界面。一个shell对应一个终端(terminal)。

Linux利用内核实现软硬件的对话。通过系统调用这个接口,Linux将上层的应用与下层的内核分离,隐藏了底层的复杂性,也提高了上层应用的可移植性。

如何了解一个陌生的命令?

$which ls 在默认路径中搜索命令,返回该命令的绝对路径。

$whereis ls 在相对比较大的范围搜索命令,返回该命令的绝对路径。

$whatis ls 用很简短的一句话来介绍命令。

$man ls 查询简明的帮助手册。

$info ls 查询更详细的帮助信息。

文件操作相关:

$touch a.txt

$cp a.txt a.txt 在工作目录下,将a.txt复制到文件b.txt

$mv a.txt c.txt 将a.txt移动成为c.txt(相当于重命名rename)

$rm a.txt 删除a.txt

$rm -r /home/vamei 删除从/home/vamei向下的整个子文件系统。-r表示recursive,是指重复删除的操作,/home/vamei文件夹为空,然后删除/home/vamei文件夹本身。

$rm -rf /home/kevin/temp/  f的目的是告诉rm放心干,不用再确认了。

$mkdir /home/vamei/good 创建一个新的目录

$rmdir /home/vamei/good 删除一个空的目录

$chmod 755 a.txt

(你必须是文件a.txt的拥有者才能运行此命令。或者以$sudo chmod 755 a.txt的方式,以超级用户的身份运行该命令。)

change mode 改变a.txt的读、写以及执行权限。还记得每个文件都有九位的读写执行权限(参看 Linux文件管理背景知识),分为三组,分别对应拥有者(owner),拥有组(owner group)中的用户和所有其他用户(other)。在这里,我们也有三个数字,755,对应三个组。7被分配给拥有者,5被分配给拥有组,最后一个5分配给其它用户。Linux规定: 4为有读取的权利,2为有写入的权利,1为有执行的权利。我们看到的7实际上是4 + 2 + 1,表示拥有者有读、写、执行三项权利。(想想5 意味着什么)

这时,运行$ls -l a.txt, 你应该看到九位的权限变成了rwxr-xr-x。根据自己的需要,你可以用比如444, 744代替755,来让文件有不同的权限。

当Linux执行一个程序的时候,会自动打开三个流,标准输入,标准输出,标准错误。比如说你打开命令行的时候,默认情况下,命令行的标准输入连接到键盘,标准输出和标准错误都连接到屏幕。对于一个程序来说,尽管它总会打开者三个流,但它会根据需要使用,并不是一定要使用。

$ls > a.txt 重新定向

$ls >> a.txt 这里>>的作用也是重新定向标准输出。如果a.txt已经存在的话,ls产生的文本流会附加在a.txt的结尾,而不会像>那样每次都新建a.txt。

echo的作用是将文本流导向标准输出。

$echo hello > a.txt

我们将cat标准输入指向a.txt,文本会从文件流到cat,然后再输出到屏幕上。当然,我们还可以同时重新定向标准输出:$cat < a.txt > b.txt 这样,a.txt的内容就复制到了b.txt中。

我们还可以使用>&来同时重新定向标准输出和标准错误。假设我们并没有一个目录void。那么$cd void > a.txt会在屏幕上返回错误信息。因为此时标准错误依然指向屏幕。当我们使用:$cd void >& a.txt 错误信息被导向a.txt。

$cat eee &>> a.txt 附加到最后

如果只是想重新定向标准错误,可以使用2>:$cd void 2> a.txt > b.txt 标准错误对应的总是2号,所以有以上写法。标准错误输出到a.txt,标准输出输出到b.txt。

-------------------------------------------------------------------------------------

管道(pipe):理解了以上内容之后,管道的概念就易如反掌。管道可以将一个命令的输出导向另一个命令的输入,从而让两个(或者更多命令)像流水线一样连续工作,不断地处理文本流。在命令行中,我们用|表示管道:

$cat < a.txt | wc

wc命令代表word count,用于统计文本中的行,词以及字符总数。a.txt中的文本先流到cat,然后从cat的标准输出流到wc的标准输入,从而让wc知道自己要处理的是a.txt这个字符串。

$echo abcd | wc

Linux的各个命令实际上高度商业化,并尽量相互独立。对每一个都只专注于一个小的功能。但通过pipe,我们可以将这些功能合在一起,实现一些复杂的目的。

-------------------------------------------------------------------------------

如何创建一个新进程?

实际上,当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux kernel并不提供直接建立新进程的系统调用剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 (address space)。当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。

老进程成为新进程的父进程(parent process),而相应的,新进程就是老的进程的子进程(child process)。一个进程除了有一个PID之外,还会有一个PPID(parent PID)来存储的父进程PID。如果我们循着PPID不断向上追溯的话,总会发现其源头是init进程。所以说,所有的进程也构成一个以init为根的树状结构。

还可以用$pstree命令来显示整个进程树。

进程与线程(Thread)

尽管在UNIX中,进程与线程是有联系但不同的两个东西,但在Linux中,线程只是一种特殊的进程。多线程之间可以共享内存空间和IO接口。所以,进程是Linux程序的唯一的实现方式。

Linux进程间通信

信号可以看作一种粗糙的进程间通信(IPC,interprocess communication)的方式,用以向进程封闭的内存空间传递信息。为了让进程间传递更多的信息量,我们需要其他的进程间通信方式。这些进程间通信方式可以分为两种:

管道机制。我们可以使用管道将一个进程的输出和另一个进程的输入连接起来,从而使用文件操作API来管理进程间通信。在shell中,我们经常利用管道将多个进程连接在一起,从而让各个进程协作,实现复杂的功能。

传统IPC。我们主要是指消息队列,信号量,共享内存。这些IPC的特点是允许多进程之间共享资源,这与多线程共享heap和global data相类似。由于多进程任务具有并发性,所以在共享资源的时候也必须解决同步的问题。




© 著作权归作者所有

卓尔

卓尔

粉丝 23
博文 283
码字总数 129742
作品 1
杭州
私信 提问
【转载】 禁止国外IP访问你的网站

在网站的运维过程中,我们通过网站记录的IP列表记录有时候会发现很多国外的IP的访问,如美国的IP等,而很多的服务器攻击行为的发起点很有可能在国外,此时为了服务器安全的考虑,我们可以考虑...

江湖逍遥
02/27
0
0
CSDN日报190226——漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/blogdevteam/article/details/87938964 漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼? 作者:码...

CSDN官方博客
02/26
0
0
介绍Linux硬盘系统建立分区步骤

本人很喜欢Linux硬盘系统,在工作中也很喜欢总结关于Linux的经验教训。Linux硬盘系统的知识里面介绍了些一般常用的挂载点,用户们学会就完全可以操作Linux系统。 Linux硬盘系统下,硬盘光驱等...

learningloong
2010/09/24
0
0
Linux : Vim 使用与配置

由于经常使用 vim 编辑配置文件,有时候也会进行使用vim 编写一些脚本和c/c++ 程序,所以配置一个常用的 vim 是很是必要的。这篇博文主要是记录vim使用和配置相关的一些知识点。 关于vim :  ...

xuyaowen
2018/08/10
0
0
快速get到学习Linux操作系统的点

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件、网络协议和应用程序。它支持32位...

Linux就该这么学
2018/10/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

状态模式

//相当把一个State对象存到Context对象中,然后通过Context实例化对象调用保存的state对象去调用state的相应的方法 https://blog.csdn.net/syc434432458/article/details/51210361...

南桥北木
13分钟前
0
0
基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

本文首发于:Jenkins 中文社区 使用 JaCoCo 统计功能测试代码覆盖率? 对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当...

Jenkins中文社区
20分钟前
2
0
聊聊Elasticsearch的OsProbe

序 本文主要研究一下Elasticsearch的OsProbe OsProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/os/OsProbe.java public class OsProbe { private static f......

go4it
20分钟前
0
0
谈谈lucene的DocValues特性之NumericDocValuesField

在默认实现的DocValuesCosumer中,数值有可能分块存储也有可能放在一个数据块中存储。 分块的大小默认是16384,并且通过预先计算如果按一个块存储最大值与最小值的差所占用的比特数和分块存储...

FAT_mt
39分钟前
0
0
【BATJ】面试必问MySQL索引实现原理

BATJ面试题剖析 1、为什么需要使用索引? 2、数据结构Hash、平衡二叉树、B树、B+树区别? 3、机械硬盘、固态硬盘区别? 4、Myisam与Innodb B+树的区别? 5、MySQL中的索引什么数据结构? 6、...

须臾之余
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部