首页 > 代码库 > linux 常用 掌握要点

linux 常用 掌握要点

 

1、查看正在执行的进程(Process) 

ps命令 Process Status 进程状态

语法: ps  [option]  [--help]

  • -A    列出所有的行程
  • -w   显示加宽可以显示较多的资讯
  • -au  显示较详细的资讯
  • -aux   显示所有包含其他使用者的行程
  • au(x)  输出格式 :
  • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  • 名词解释:

  • USER: 行程拥有者
  • PID: pid
  • %CPU: 占用的 CPU 使用率
  • %MEM: 占用的记忆体使用率
  • VSZ: 占用的虚拟记忆体大小
  • RSS: 占用的记忆体大小
  • TTY: 终端的次要装置号码 (minor device number of tty)
  • STAT: 该行程的状态:START: 行程开始时间
    •   D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
    •   R: 正在执行中
    •   S: 静止状态
    •   T: 暂停执行
    •   Z: 不存在但暂时无法消除
    •   W: 没有足够的记忆体分页可分配
    •   <: 高优先序的行程
    •   N: 低优先序的行程
    •   L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
  • TIME: 执行的时间
  • COMMAND:所执行的指令

# ps -A 显示进程信息


# ps -u root //显示root进程用户信息

# ps -ef //显示所有命令,连带命令行 

2、查询指定的进程ID(PID) 打开的文件 

查看pid:pidof programe-name

方法 1)

  cd /proc/$PID/fd(会看见文件描述符)

  ls -l
       得到文件描述符指向的实际文件,即当前进程打开的文件 

方法 2)

  安装lsof (lsof(list open files)是一个列出当前系统打开文件的工具)

  lsof -g gid 显示归属gid的进程情况 

3、杀死指定PID的进程(PID为Process ID) 

kill -s 9 pid  

9代表强制终止


4、计算文件的行数、字数或字符数 

wc  [option]文件… (Word Count)

-c          统计字节数。 
-l         统计行数。 
-m       统计字符数。这个标志不能与 -c 标志一起使用。 
-w         统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。 
-L          打印最长行的长度。 
-help      显示帮助信息 
–version 显示版本信息


5、显示进程信息,并实时更新 

top

   -d 设置刷屏的时间         

   -p 指定需要监控的进程id 

   -u 指定需要监控的用户名称  

   -b 指定之后不能使用交互式的方式,如果不指定的话可以动态调整,一般用于输出到文件的时候使用  

   -H 指定这个可以显示每个线程的情况,否则就是进程的总的状态

   -i  不显示闲置和僵死的进程
   -c 显示全部命令参数

按q退出,按h进入帮助。


6、调用top命令的"-H"选项,该选项会列出所有Linux线程(Thread)

top -H:-H 指定这个可以显示每个线程的情况,否则就是进程的总的状态


7、查看用户username的进程所打开的文件 

# ps -u username 

# ps -u root //显示root进程用户信息

8、在ps命令中,"-T"选项可以开启线程(Thread)查看,下面的命令列出了由进程号为pid的进程创建的所有线程 

ps -T

ps -T -p <pid>

 

方法二: Top

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。

1.$ top -H

要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:

2.$ top -H -p <pid>

 

方法三: Htop

一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。

要在htop中启用线程查看,请开启htop,然后按<F2>来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按<F10>退出设置。


9、比较两个文件 

diff [options] file1 file2

该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。

如果用”-”表示file1或file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。

[options]主要参数

-a:将所有文件当作文本文件来处理。

-b–ignore-space-change    忽略空格造成的不同。

-B–ignore-blank-lines    忽略空行造成的不同。

-c 使用纲要输出格式。

-H   利用试探法加速对大文件的搜索。

-I    忽略大小写的变化。

-n –rcs  输出RCS格式。

-N–new-file  在比较目录时,若文件A仅出现在某个目录中,会显示:Only in目录;文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

-r–recursive  比较子目录中的文件。

-u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。

 


10、后台执行,通过shell中输入exit来推出终端 

exit


11、查看正在执行的任务 

 

# ps aux | less 查看所有运行中的进程

 


12、多线程执行 

Linux系统内核只提供了轻量级进程的支持,并未实现线程模型。

Linux是一种“多进程单线程”的操作系统,Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。

使用‘&‘+wait 实现“多进程”实现

待更新


13、查看进程和线程的树形结构关系 

pstree 命令,查看进程和线程的树形结构关系。

 

14、ps命令-L参数显示进程,并尽量显示其LWP(轻量级进程)(线程ID)和NMWP(线程的个数) 

ps -L


15、ps命令查看线程在哪个CPU上运行 

# ps -eo pid,args,psr

参数的含义:
pid   进程ID
args   该进程执行时传入的命令行参数
psr   分配给进程的CPU


16、取出文件的前面几行 

 查看 前 head -100  filename

 查看 后 tail -100  filename 或 tail -n 100  filename

 查看 中 sed -n ‘100,200p‘ filename 

 重定向 到文件中去  head -100  filename >a.txt
 

17、动态查看文件变化 

tail -f  filename


18、退出tail -f 

Ctrl + c (Mac Os : control + c)


19、tail程序放到后台去(Ctrl+z)等处理完其他事情,再用fg命令将tail命令转到前台来 


20、查看文件夹和子目录的大小 

du  Disk Usage 硬盘使用率
常用的选项:
  -h:以人类可读的方式显示
  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
  --apparent-size:显示目录或文件自身的大小
  -l :统计硬链接占用磁盘空间的大小
  -L:统计符号链接所指向的文件占用的磁盘空间大小


21、设置定时任务   

  启动crontab服务 

      一般启动服务用  /sbin/service crond start 若是根用户的cron服务可以用 sudo service crond start, 这里还是要注意  下 不同版本linux系统启动的服务的命令也不同 ,像我的虚拟机里只需用 sudo service cron restart 即可,若是在根用下直接键入service cron start就能启动服务

  查看服务是否已经运行用 

  ps -ax | grep cron 

 

  crontab -u    //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数  
  crontab -l    //列出某个用户cron服务的详细内容
  crontab -r   //删除没个用户的cron服务
  crontab -e  //编辑某个用户的cron服务

  vi  /etc/crontab

    minute    - 从0到59的整数 
    hour       - 从0到23的整数 
    day        - 从1到31的整数 (必须是指定月份的有效日期)
    month    - 从1到12的整数 (或如Jan或Feb简写的月份)
    dayofweek  - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
    command   - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)

  可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
     具体格式如下 例

     Minute Hour Day Month Dayofweek   command
     分钟    小时   天     月       天每星期       命令

      5       *       *        *           *          ls             指定每小时的第5分钟执行一次ls命令
      30     5       *        *           *          ls             指定每天的 5:30 执行ls命令
      30     7       8        *           *        ls             指定每月8号的7:30分执行ls命令
      30     5       8        6          *         ls             指定每年的6月8日5:30执行ls命令
      30     6       *        *          0           ls             指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,

  

     30     3     10,20     *       *          ls        每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

     25     8-11   *         *       *          ls          每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

     */15   *       *         *       *          ls            每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

     30     6     */10       *       *        ls            每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

    每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

     50   7       *             *     *     root     run-parts     /etc/cron.daily   [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

    新增调度任务可用两种方法:
    1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
    2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。

 查看调度任务
    crontab -l //列出当前的所有调度任务
    crontab -l -u jp   //列出用户jp的所有调度任务

 删除任务调度工作
    crontab -r   //删除所有任务调度工作


22、重命名文件和文件夹 

mv 和剪切是一个命令

将目录A重命名为B : mv A B

将/a目录移动到/b下,并重命名为c :mv /a /b/c


23、复制、剪切、清空和删除 

创建文件夹 :mkdir  (Make directory  建立目录)

文件夹复制:cp (Copy file  复制文件)

1.把/home/file1里面的文件和文件夹等复制到home/file2目录下

cp -rf /home/file1/* /home/file2

2.把/home/file1目录复制到/home/file2目录下,即把file1复制变成file2的子目录,变成/home/file2/file1的路径

cp -rf /home/file1 /home/file2

剪切:  mv (Move file  移动文件)

1.使用mv命令剪切文件。

如需要将/home/file1/目录下的1.txt文件剪切到/home/file2目录下,执行下面的命令即可:

# mv /home/file1/1.txt /home/file2

2.使用mv命令剪切文件夹。

把/home/file/soft文件夹剪切到/home/file/abc目录下

# mv /home/file/soft /home/file/abc

3.使用mv命令剪切文件夹和文件

把/home/file/下的文件夹和文件剪切到/home/file2目录下

# mv /home/file/* /home/file2

清空 

清空文件夹实例:

rm -rf /home/file/*

将会强制删除/home/file目录下所有文件、文件夹,保留/home/file目录

删除 rm( Remove file  删除文件)

rm -rf   目录名字

-r 就是向下递归,不管有多少级目录,一并删除

-f 就是直接强行删除,不作任何提示的意思 


24、Linux通信

Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量(semaphore),信号(signal),套接字(Socket)
    (1) 管道(pipe):管道允许一个进程和另一个与它有共同祖先的进程之间进行通信;
    (2) 命名管道(FIFO):类似于管道,但是它可以用于任何两个进程之间的通信,命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建;
    (3) 信号(signal):信号是比较复杂的通信方式,用于通知接收进程有某种事情发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持UNIX早期信号语义函数signal外,还支持语义符合POSIX.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD即能实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数的功能);
    (4) 内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它;
    (5) 消息队列(message queue):消息队列是消息的连接表,包括POSIX消息对和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能成该无格式字节流以及缓冲区大小受限等缺点;
    (6) 信号量(semaphore):信号量主要作为进程间以及同进程不同线程之间的同步手段;
    (7) 共享内存 (shared memory):它使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。这是针对其他通信机制运行效率较低而设计的。它往往与其他通信机制,如信号量结合使用,以达到进程间的同步及互斥;
    (8) 套接字(Socket):它是更为通用的进程间通信机制,可用于不同机器之间的进程间通信。起初是由UNIX系统的BSD分支开发出来的,但现在一般可以移植到其他类UNIX系统上:Linux和System V的变种都支持套接字。

linux 常用 掌握要点