sed -e '4 a newline' testfile:4 行之后添加一行
sed -n '5,7p':仅列出 /etc/passwd 文件内的第 5-7 行
如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎么办?就利用 sed !
sed -i '$a # This is a test' regular_express.txt
利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test
操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。
线程,是操作系统调度(CPU调度)执行的最小单位。
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;
协程,是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行。直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
线程上下文是独有的,thread context。我们也说过操作系统调度线程需要随时中断线程的运行并且需要线程被暂停后可以继续运行,操作系统之所以能实现这一点,依靠的就是线程上下文信息。
比如:由于操作系统随时可以暂停线程的运行,因此我们保存以及恢复程序计数器中的值就能知道线程是从哪里暂停的以及该从哪里继续运行了。由于线程运行的本质就是函数运行,函数运行时信息是保存在栈帧中的,因此每个线程都有自己独立的、私有的栈区。
再比如:函数运行时需要额外的寄存器来保存一些信息,像部分局部变量之类,这些寄存器也是线程私有的,一个线程不可能访问到另一个线程的这类寄存器信息。
共享的:堆区,数据区和代码区。堆区是程序员比较熟悉的,我们在C/C++中用malloc或者new出来的数据就存放在这个区域。
进程打开的文件也可以被所有的线程使用,这也属于线程间的共享资源。
操作系统内存管理——分区、页式、段式管理
分区式存储管理:把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。分区式存储管理虽然可以支持并发
连续内存分配:连续内存分配算法有首次适配,最佳适配,最差适配。
非连续内存分配
进程调度方式,linux用的哪种???
进程是一个程序的一次执行过程。
管道,相当于开辟的内存缓冲区,起数据传递的作用
信号量 一个计数器
消息队列:消息的链表
信号,用于通知进程发生了哪些系统事件
共享内存,多个进程可以直接读写同一块内存空间
嵌套字
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作;
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。
top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了
Iostat: 用于输出CPU和磁盘I/O相关的统计信息
虚拟内存是windows管理所有可用内存的方式,对于32位Windows系统,每个进程所用到的虚拟内存地址从0到2^32-1,总容量4Gb,其中2Gb是与操作系统以及其他所有进程所共享,另外2GB分派给进程独占(这就是常说的32位Windows系统中一个进程最多能用2G内存的由来)
正则表达式
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky
cat ./aaa.data |grep abc| wc -l
cat ./aaa.data |grep abc
sort file |uniq
sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。
find . -name “*.png” | xargs rm -rf
cat temp.txt |awk ‘BEGIN{ORS=”,”} {print $3}’