日期:2014-05-16  浏览次数:20747 次

[linux]常用linux命令

man,info

首先介绍最重要的man和info命令;

linux的使用文档的强大;我们所有的命令以及使用方法都可以通过:man xxx; info xxx 的方式查看;

所以linux的命令意会即可,不必全部记忆;经常使用man 或info 命令查看命令,也是一种学习方式;

cat , more , vi ,less ,head ,tail

都是查看文件的命令;

我经常用的less 命令,tail 命令,vim命令;

less 可以向上(k快捷键),也可以向下( j 快捷键)浏览;

tail -f file.name

vim file.name? ( i,o; gg; G; ctrl+f ; ctrl +b; :wq: q! )? :s/aaa/bbb/g(全文替换aaa为bbb); 等等

ps 命令

查看进程数,ps aux | grep java或者 ps aux | httpd

  • a表示所有
  • u表示以用户分组的格式
  • x显示所有程序

chmod 命令

?修改文件权限的命令;

大家都知道linux文件的权限分三部分:

所属用户权限: 文件所属用户(user); 用户所属组(group); 其他用户(other);?

权限分为 : 可读(r) ; 可写(w) ,可执行 ;

添加权限可以通过以下方式:

  • u+x可执行
  • u+w可写
  • u+r可读

也可以通过二进制形式:

rwx-x-x(从左到右,三位代表一个权限组:user,group,other) ; 每一位用二进制运算后的权限 111001001;

所以给一个文件加上所有权限的命令: chmod 777 fineName;

ssh命令

连接远程客户端, ssh levit@10.20.56.22

find命令

查询文件, find . -name fileName (当前目录下查询文件fileName)

查询出文件后,作为参数输出到下一个命令去执行: find . -name fileName | xargs cmd 比如: find . -name?webx.log | xargs grep 'Error'

locate命令

?查找文件,比find命令快,这个命令会从updatedb数据库中查找文件;updatedb会后台定时将文件系统索引到updatedb库里,方便用户查找;locate filename

?awk '\{print $1\}' access_log | sort |uniq -c |sort -r |head 命令

?查询apache日志,得到访问最多前是十个ip,以及访问次数;

?注: awk作为一个脚本语言,很强大; 也是以行为单位的过滤器;

ps , pstree , ?pidstat

ps -ef | grep xxx? (显示xxx进程的信息)

ps -elFL | grep xxx (显示xxx进程的所有线程详细信息)

pidstat 能从cpu,I/O,等各个层面显示进程信息,一个很有用的性能诊断命令

netstat命令

netstat 经常使用,查看本机网络连接情况: netstat -antuw (显示所有tcp;udp连接情况)

netstat -an | grep ESTABLISHED | awk '\{print $5\}' | awk -F: '\{print $1\}' | sort | uniq -c | sort? -rn | head (显示已经连接状态的连接最多的前10个foreign address)

?mount ,umount

linux中一切皆为文件,linux中有:普通文本文件,块设备文件(硬盘);字符设备文件(键盘,鼠标等);管道(也以文件的形式存在);?等等;

挂载和卸载设备的命令; 我们的所有设备文件都在/dev/目录下;?如第一块硬盘?的一个分区sda , 第二块分区sda1; 第二块硬盘为:sdb.... (我们的硬盘设备都是scsi的所以以s开头)

比如挂载一个u盘: mount -t fat?/dev/sdb /mnt/upart (将设备/devsdb 挂载在目录/mnt/upart/) : 注意要跟所挂设备的格式

卸载一个盘:umount /mnt/upart

如果要开机自动挂载一个设备: 需要在次文件里增加要挂载的设备喽 sudo vi /etc/fstab ;

kill 命令

进程是作为计算机发展中最伟大的发明之一,是多道程序计算机的基石;?

linux操作系统的中的进程有2个概念:进程和轻量级进程;轻量级进程就是我们所说的线程;一个进程中的线程之间共享内存;基于线程的cpu调度和上下文切换代价比进程小多了。

?而且linux创建子进程的算法是基于:写时复制的策略; 也就是在创建一个子进程时要将父进程的所有东西都要复制到子进程中的,但linux创建时并不复制,只有在程序子进程需要修改他自己的数据时,才将父进程的数据复制到子进程空间。因为大部分子进程只是读操作,这样有效加速进程创建时间和有效利用内存;

linux的进程主要结构体为:task_struct 这种包含了进程的基本信息,指向内存区域描述符的指针,当前目录,指向文件描述符的指针,所接受的信号等等;

进程的状态:可运行状态(TASK_RUNNING);可中断的等待状态(TASK_INTERRUPTIBLE);不可中断的等待状态(TASK_UNINTERRUPTIBLE);暂停状态(TASK_STOPPED);跟踪状态(TASK_TRACED);

进程间通信手段:信号量,管道,共享内存;

比如我们通常用的kill命令就是给进程发送一个信号,让进程立即响应这个信号:kill -9 pid ; 我们可以通过命令:kill -l 命令查看所有的信号;我们通常在控制台上按Ctrl+c就等于kill -9;Ctrl+z等于kill -1 (挂起到后台) ;我们也可以自定义某个信号的处理程序;

常用的命令也有:bg(后台运行一个进程) ,fg(将后台运行的进程放到前台),jobs(查看后台进程); 注:非常有用的。我们可以灵活的将当前java进程通过Ctrl+z;bg xxx放到后台去;

nohup命令可以将这个进程设置为不接受一些信号量,就是忽略调挂起的信号量;nohup command &

标准输出命令

我们经常写的脚本最后边有 1>path1 2>path2 ;这个是什么意思呢?

我们知道linux每个进程默认都包含三个标准输出:标准输入,标准正确输出,标准错误输出;分别用0,1,2,表示;


?