Linux知识点记录

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

在命令行中输入$man 2 syscalls能够查看全部的系统调用。能够经过$man 2 read来查看系统调用read()的说明。在这两个命令中的2都表示咱们要在2类(系统调用类)中查询(具体各个类是什么能够经过$man man看到)。shell

>表示从新定向,|表示管道多线程

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

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

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

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

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

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

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

$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相相似。因为多进程任务具备并发性,因此在共享资源的时候也必须解决同步的问题。

相关文章
相关标签/搜索