linux启动
进程的命令可以�.shï¼python ï¼./æ件åãä¸é¢æ¯æå
³è¿ç¨çæä½ï¼1.æ¥è¿ç¨pså½ä»¤æ¥æ¾ä¸è¿ç¨ç¸å
³çPIDå·ï¼ps a æ¾ç¤ºç°è¡ç»ç«¯æºä¸çææç¨åºï¼å
æ¬å
¶ä»ç¨æ·çç¨åºãps -A æ¾ç¤ºææç¨åºãps c ååºç¨åºæ¶ï¼æ¾ç¤ºæ¯ä¸ªç¨åºçæ£çæ令å称ï¼èä¸å
å«è·¯å¾ï¼åæ°æ常驻æå¡çæ 示ãps -e æ¤åæ°çææåæå®"A"åæ°ç¸åãps e ååºç¨åºæ¶ï¼æ¾ç¤ºæ¯ä¸ªç¨åºæ使ç¨çç¯å¢åéãps f ç¨ASCIIå符æ¾ç¤ºæ ç¶ç»æï¼è¡¨è¾¾ç¨åºé´çç¸äºå
³ç³»ãps -H æ¾ç¤ºæ ç¶ç»æï¼è¡¨ç¤ºç¨åºé´çç¸äºå
³ç³»ãps -N æ¾ç¤ºææçç¨åºï¼é¤äºæ§è¡psæ令ç»ç«¯æºä¸çç¨åºä¹å¤ãps s éç¨ç¨åºä¿¡å·çæ ¼å¼æ¾ç¤ºç¨åºç¶åµãps S ååºç¨åºæ¶ï¼å
æ¬å·²ä¸æçåç¨åºèµæãps -t<ç»ç«¯æºç¼å·>æå®ç»ç«¯æºç¼å·ï¼å¹¶ååºå±äºè¯¥ç»ç«¯æºçç¨åºçç¶åµãps u 以ç¨æ·ä¸ºä¸»çæ ¼å¼æ¥æ¾ç¤ºç¨åºç¶åµãps x æ¾ç¤ºææç¨åºï¼ä¸ä»¥ç»ç«¯æºæ¥åºåã æ常ç¨çæ¹æ³æ¯ps aux,ç¶ååéè¿ç®¡é使ç¨grepå½ä»¤è¿æ»¤æ¥æ¾ç¹å®çè¿ç¨,ç¶åå对ç¹å®çè¿ç¨è¿è¡æä½ãps aux | grep program_filter_word,ps -ef |grep tomcatps -ef|grep java|grep -v grep æ¾ç¤ºåºææçjavaè¿ç¨ï¼å»å¤æå½åçgrepè¿ç¨ã 2.æè¿ç¨ 使ç¨killå½ä»¤ç»æè¿ç¨ï¼kill xxx 常ç¨ï¼kill ï¼9 324 Linuxä¸è¿æä¾äºä¸ä¸ªkillallå½ä»¤ï¼å¯ä»¥ç´æ¥ä½¿ç¨è¿ç¨çååèä¸æ¯è¿ç¨æ è¯å·ï¼ä¾å¦ï¼# killall -9 NAME1. æ´æ¹æ¡£æ¡æ¥æè
å½ä»¤ : chown [-cfhvR] [--help] [--version] user[:group] file... åè½ : æ´æ¹æ件æè
æ件夹çæ¥æè
åæ°æ ¼å¼ : user : æ°çæ¡£æ¡æ¥æè
ç使ç¨è
IDgroup : æ°çæ¡£æ¡æ¥æè
ç使ç¨è
群ä½(group)-c : è¥è¯¥æ¡£æ¡æ¥æè
ç¡®å®å·²ç»æ´æ¹ï¼ææ¾ç¤ºå
¶æ´æ¹å¨ä½-f : è¥è¯¥æ¡£æ¡æ¥æè
æ æ³è¢«æ´æ¹ä¹ä¸è¦æ¾ç¤ºé误讯æ¯-h : åªå¯¹äºè¿ç»(link)è¿è¡åæ´ï¼èé该 link çæ£æåçæ¡£æ¡-v : æ¾ç¤ºæ¥æè
åæ´ç详ç»èµæ ã ã-R : 对ç®åç®å½ä¸çæææ¡£æ¡ä¸åç®å½è¿è¡ç¸åçæ¥æè
åæ´(å³ä»¥éåçæ¹å¼é个åæ´) ä¾å¦ï¼chown -R oracle:oinstall /oracle/u01/app/oracleæ´æ¹ç®å½æ¥æè
为oracle 2. ä¿®æ¹æé å½ä»¤ï¼chmod (change mode) åè½ï¼æ¹åæ件ç读ååæ§è¡æéãæ符å·æ³åå
«è¿å¶æ°åæ³ã é项ï¼(1)符å·æ³ï¼ å½ä»¤æ ¼å¼ï¼chmod {u|g|o|a}{+|-|=}{r|w|x} filename u (user) 表示ç¨æ·æ¬äººã g (group) 表示åç»ç¨æ·ã o (oher) 表示å
¶ä»ç¨æ·ã a (all)表示ææç¨æ·ã + ç¨äºç»äºæå®ç¨æ·ç许å¯æéã - ç¨äºåæ¶æå®ç¨æ·ç许å¯æéã = å°æ许å¯çæéèµç»æ件ã r (read) 读许å¯ï¼è¡¨ç¤ºå¯ä»¥æ·è´è¯¥æ件æç®å½çå
容ã w (write) å许å¯ï¼è¡¨ç¤ºå¯ä»¥ä¿®æ¹è¯¥æ件æç®å½çå
容ã x (execute)æ§è¡è®¸å¯ï¼è¡¨ç¤ºå¯ä»¥æ§è¡è¯¥æ件æè¿å
¥ç®å½ã (2)å
«è¿å¶æ°åæ³ï¼ å½ä»¤æ ¼å¼ï¼chmod abc file å
¶ä¸a,b,cå为ä¸ä¸ªå
«è¿å¶æ°åï¼åå«è¡¨ç¤ºUserãGroupãåOtherçæéã 4 (100)表示å¯è¯»ã 2 (010)表示å¯åã 1 (001)表示å¯æ§è¡ã è¥è¦rwxå±æ§å4+2+1=7ï¼ è¥è¦rw-å±æ§å4+2=6ï¼ è¥è¦r-xå±æ§å4+1=5ã ä¾å¦ï¼# chmod a+rx filename 让ææç¨æ·å¯ä»¥è¯»åæ§è¡æ件filenameã # chmod go-rx filename åæ¶åç»åå
¶ä»ç¨æ·ç读åæ§è¡æ件filenameçæéã # chmod 741 filename 让æ¬äººå¯è¯»åæ§è¡ãåç»ç¨æ·å¯è¯»ãå
¶ä»ç¨æ·å¯æ§è¡æ件filenameã # chmod -R 755 /home/oracle éå½æ´æ¹ç®å½æéï¼æ¬äººå¯è¯»åæ§è¡ãåç»ç¨æ·å¯è¯»å¯æ§è¡ãå
¶ä»ç¨æ·å¯è¯»å¯æ§è¡ 3. ä¿®æ¹æ件æ¥æ å½ä»¤ï¼touch æ ¼å¼ï¼touch filenae åè½ï¼æ¹åæ件çæ¥æï¼ä¸å¯¹æ件çå
容åæ¹å¨ï¼è¥æ件ä¸åå¨å建ç«æ°æ件ã ä¾å¦ï¼% touch file 4. é¾æ¥æ件 å½ä»¤ï¼ln (link) æ ¼å¼ï¼ln [option] filename linkname ln [option] directory pathname åè½ï¼ä¸ºæ件æç®å½å»ºç«ä¸ä¸ªé¾ãå
¶ä¸ï¼filenameådirectoryæ¯æºæ件åå æºç®å½åï¼linknameåpathnameåå«è¡¨ç¤ºä¸æºæ件ææºç®å½åç¸é¾æ¥ç æ件æç®å½ã é项ï¼-s 为æ件æç®å½å»ºç«ç¬¦å·é¾æ¥ãä¸å -s表示为æ件æç®å½å»ºç«ç¡¬é¾æ¥ 注éï¼é¾æ¥çç®å°å¨äºï¼å¯¹ä¸ä¸ªæ件æç®å½èµäºä¸¤ä¸ªä»¥ä¸çååï¼ä½¿å
¶å¯ä»¥åº ç°å¨ä¸åçç®å½ä¸ï¼æ¢å¯ä»¥ä½¿æ件æç®å½å
±äº«ï¼åå¯ä»¥èçç£ç空é´ã ä¾å¦ï¼% ln -s filename linkname 5. æ¾ç¤ºæ¥æ å½ä»¤ï¼date ä¾å¦ï¼% date 6. æ¾ç¤ºæ¥å å½ä»¤ï¼cal (calendar) æ ¼å¼ï¼cal [month] year åè½ï¼æ¾ç¤ºæå¹´å
æå®çæ¥å ä¾å¦ï¼% cal 1998 7. æ¾ç¤ºæä»¶å¤´é¨ å½ä»¤ï¼head æ ¼å¼ï¼head [option] filename åè½ï¼æ¾ç¤ºæ件çå¤´é¨ é项ï¼ç¼ºç æ¾ç¤ºæ件ç头10è¡ã -iæ¾ç¤ºæ件çå¼å§ iè¡ã ä¾å¦ï¼% head filename 8. æ¾ç¤ºæä»¶å°¾é¨ å½ä»¤ï¼tail æ ¼å¼ï¼tail [option] filename åè½ï¼æ¾ç¤ºæ件çå°¾é¨ é项ï¼ç¼ºç æ¾ç¤ºæ件çæ«10è¡ã -iæ¾ç¤ºæ件æå iè¡ã +iä»æ件ç第iè¡å¼å§æ¾ç¤ºã ä¾å¦ï¼% tail filename 9. æ¾ç¤ºç¨æ·æ è¯ å½ä»¤ï¼id æ ¼å¼ï¼id [option] [user] åè½ï¼æ¾ç¤ºç¨æ·æ è¯åç¨æ·æå±çææç»ã é项ï¼-a æ¾ç¤ºç¨æ·åãç¨æ·æ è¯åç¨æ·æå±çææç» æ³¨éï¼ ä¾å¦ï¼% id username 10. æ¥çå½åç»å½çç¨æ· å½ä»¤ï¼users 11. æ¾ç¤ºé½è°ç»å½å°æºå¨ä¸ å½ä»¤ï¼who æ ¼å¼ï¼who åè½ï¼æ¾ç¤ºå½åæ£å¨ç³»ç»ä¸çææç¨æ·ååï¼ä½¿ç¨ç»ç«¯è®¾å¤å·ï¼æ³¨åæ¶é´ã ä¾å¦ï¼% who 12. æ¾ç¤ºå½åç»ç«¯ä¸çç¨æ·å å½ä»¤ï¼whoami æ ¼å¼ï¼whoami åè½ï¼æ¾ç¤ºåºå½åç»ç«¯ä¸ä½¿ç¨çç¨æ·ã ä¾å¦ï¼% whoami 13. 寻æ¾æ件 å½ä»¤ï¼find æ ¼å¼ï¼find pathname [option] expression åè½ï¼å¨æç»çè·¯ç»åä¸å¯»æ¾ç¬¦å表达å¼ç¸å¹é
çæ件ã é项ï¼-name 表示æ件å -user ç¨æ·åï¼éå该ç¨æ·æå±çæ件 -size æ大å°æ¥æ¾ï¼ä»¥block为åä½ï¼ä¸ä¸ªblockæ¯512B -mtime n ææåä¸æ¬¡ä¿®æ¹æ¶é´æ¥æ¾ï¼éån天å
被修æ¹çæ件 -perm ææéæ¥æ¾ -type ææ件类åæ¥æ¾ -atimeææåä¸æ¬¡è®¿é®æ¶é´æ¥æ¾ ä¾å¦ï¼% find ./ -name '*abc*' -print 14. æç´¢æ件ä¸å¹é
符 å½ä»¤ï¼grep æ ¼å¼ï¼grep [option] pattern filenames åè½ï¼éè¡æç´¢ææå®çæ件ææ åè¾å
¥ï¼å¹¶æ¾ç¤ºå¹é
模å¼çæ¯ä¸è¡ã é项ï¼-iå¹é
æ¶å¿½ç¥å¤§å°å -v æ¾åºæ¨¡å¼å¤±é
çè¡ ä¾å¦ï¼% grep -i 'java*' ./test/run.sh 15. ç»è®¡æ件åæ° å½ä»¤ï¼wc [option] filename åè½ï¼ç»è®¡æ件ä¸çæ件è¡æ°ãåæ°åå符æ°ã é项ï¼-l ç»è®¡æ件çè¡æ° -w ç»è®¡æ件çåè¯æ° -c ç»è®¡æ件çåç¬¦æ° æ³¨éï¼è¥ç¼ºçæ件ååææ åè¾å
¥ ä¾å¦ï¼% wc -c ./test/run.shLinux 中的每个进程都存在于“进程树”中。你可以通过运行 pstree 命令查看进程树。树的根是 init,进程号是 1。每个进程(init 除外)都有一个父进程,一个进程都可以有很多子进程。
所以,假设我要启动一个名为 ls 的进程来列出一个目录。我是不是只要发起一个进程 ls 就好了呢?不是的。
我要做的是,创建一个子进程,这个子进程是我(me)本身的一个克隆,然后这个子进程的“脑子”被吃掉了,变成 ls。
开始是这样的:
然后运行 fork(),生成一个子进程,是我(me)自己的一份克隆:
然后我让该子进程运行 exec("ls"),变成这样:
当 ls 命令结束后,我几乎又变回了我自己:
在这时 ls 其实是一个僵尸进程。这意味着它已经死了,但它还在等我,以防我需要检查它的返回值(使用 wait 系统调用)。一旦我获得了它的返回值,我将再次恢复独自一人的状态。
上文提到的“脑子被吃掉”是什么意思呢?
进程有很多属性:
当你运行 execve 并让另一个程序吃掉你的脑子的时候,实际上几乎所有东西都是相同的! 你们有相同的环境变量、信号处理程序和打开的文件等等。
唯一改变的是,内存、寄存器以及正在运行的程序,这可是件大事。
为何 fork 并非那么耗费资源(写入时复制)
你可能会问:“如果我有一个使用了 2GB 内存的进程,这是否意味着每次我启动一个子进程,所有 2 GB 的内存都要被复制一次?这听起来要耗费很多资源!”
事实上,Linux 为 fork() 调用实现了写时复制copy on write,对于新进程的 2GB 内存来说,就像是“看看旧的进程就好了,是一样的!”。然后,当如果任一进程试图写入内存,此时系统才真正地复制一个内存的副本给该进程。如果两个进程的内存是相同的,就不需要复制了
当子进程终结时,它会通知父进程,并清空自己所占据的内存,并在内核里留下自己的退出信息(exit code,如果顺利运行,为0;如果有错误或异常状况,为>0的整数)。在这个信息里,会解释该进程为什么退出。父进程在得知子进程终结时,有责任对该子进程使用wait系统调用。这个wait函数能从内核中取出子进程的退出信息,并清空该信息在内核中所占据的空间。但是,如果父进程早于子进程终结,子进程就会成为一个孤儿(orphand)进程。孤儿进程会被过继给init进程,init进程也就成了该进程的父进程。init进程负责该子进程终结时调用wait函数。
当然,一个糟糕的程序也完全可能造成子进程的退出信息滞留在内核中的状况(父进程不对子进程调用wait函数),这样的情况下,子进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。
评论列表(0条)