linux-常用命令

最近,常在windows上使用用SecureCRT链接Linux管理java项目,好久不操作了,简单命令也记不起来了。因此,开通了博客园,开始记录自己的点滴

1.想要知道连接的linux版本


  • cat /proc/version

  

  • cat /etc/issue

  

  • lsb_release -a

2.cd,改变目录(pwd,显示当前目录)


  • cd /:进入根目录(cd /)
  • cd ..:回到上级目录(cd ..)
  • pwd:显示当前所在的目录(pwd)

3.ls,列出文件名


 

4.touch 文件名,创建文件


 

5.less 文件名,从文件头开始分页查看文件内容,支持上下键,很神奇


之后通过 /A00021003011504210004 查找关键字

使用 ctrl + F(前进一页),ctrl + B(后退一页),g(移动到开始),G(移动到最后),n(下一个),N(上一个)

 

6.q,退出打开的文件,与less配合使用


 

7.cat,显示全部文件内容


 

8.tail,显示文件尾部内容


常用参数

-f,自动刷新读取

-n<行数>,读取<行数>行

例如:tail -n 5 log2014.log,读取最后5行

     tail -n +5 log2014.log,从第5行开始读取

 

9.文件夹


  • mkdir 文件夹名,创建文件夹
  • cp -rf 源目录 目标目录,目录复制
  • mv 源目录/文件 目标目录,剪切目录/文件
  • mv 源目录 目标目录,目录重命名
  • rm -rf /home/hadoop/*,删除hadoop下所有子目录和文件
  • rm -rf /home/hadoop,删除hadoop及子目录、文件
  • rmdir删除空目录

 

10.文件


  • touch 文件名,新建文件

 

  • vi 文件名,打开或新建文件,并将光标置于第一行首
  • vi +n 文件名 ,打开文件,并将光标置于第n行首
  • vi + 文件名,打开文件,并将光标置于最后一行首
  • vi +/pattern 文件名,打开文件,并将光标置于第一个与pattern匹配的串处
  • vi -r 文件名,在上次正用vi编辑时发生系统崩溃,恢复“文件名”
  • vi之后使用键入 i, a, o 等命令,可进入插入模式

    i 在光标之前插入
    a 在光标之后插入

    I 在光标所在行的行首插入
     在光标所在行的行末插入

     在光标所在的行的上面插入一行
     在光标所在的行的下面插入一行

    r 替换当前字符
    R 替换当前字符及其后的字符,直至按ESC键

     删除光标后的一个字符,然后进入插入模式
     删除光标所在的行,然后进入插入模式

    x 删除一个字符    

    dd 删除光标当前行           
    ndd 删除n                 
    yy 复制当前行                
    nyy 复制n                  
    p,P 粘贴                     
    u  撤消                      
    [Ctrl]+r 重做上一个动作

  • 编辑之后,"Esc"键,使用以下命令保存/退出

    :w 保存文件但不退出vi 

    :w! 强制保存,不推出vi

    :wq 保存文件并退出vi 
    :wq! 强制保存文件,并退出vi
    :q 不保存文件,退出vi
    :q!不保存文件,强制退出vi 
    :e! 放弃所有修改,从上次保存文件开始再编辑

 

  • echo 字符串 >> 文件,附加输出文字
  • echo -n 字符串 >> 文件,附件输出文字后不换行
  • echo -e 字符串 >> 文件,附加输出文字,对字符串使用转义
  • rm 删除文件
  • mv 源文件 目标文件,文件重命名/移动文件

 注:echo 字符串 > 文件,覆盖输出哦

11.rz,上传文件, 选择要传送的文件


 

12.sz 文件名,下载文件, 指定文件名,enter敲,即下载到个人目录download目录下


 

13.jps,显示java进程


 

14.nohup java -jar /home/cargo/ctas/mf-ffm-receiver/ffm-receiver.jar >/dev/null 2>&1 &,执行可执行jar包并不输出


 

由于使用java -jar /home/cargo/ctas/mf-ffm-receiver/ffm-receiver.jar,当连接关闭后,java进程会结束,所以不可用
注:linux有三种重定向:
 0 :表示标准输入
 1 :标准输出,在一般使用时,默认的是标准输出
 2 :标准错误信息输出
 “>/dev/null 2>&1”,把标准输出重定向到/dev/null,错误输出重定向到标准输出,最终就是什么也不输出
 
15.压缩文件
tar -zxvf **.tar.gz
tar -xvf **.tar
tar -jxvf ****.tar.bz(或bz2)
 参数说明:
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个
 
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
这几个参数是根据需要在压缩或解压档案时可选的
 
-f是必须的,这个参数是最后一个参数,后面只能接档案名
 
16.su - root,切换环境和用户
  • su 不加任何参数, 切换为root用户,但没有改变root登录环境
  • su - ,表示默认切换到root用户,并且改变到root用户的环境
  • su - 用户名,表示默认切换到用户名,并且改变到用户名的环境
 
17.sudo,查看、修改或者执行某些命令需要root用户的权限,如果不想直接切换到root用户,就可以使用sudo命令。sudo命令用于针对单个命令授予临时权限

使用这个命令,要先到root用户下通过visudo 来改/etc/sudoers对普通用户授权,在/etc/sudoers添加
  • cargo ALL=/bin/more,也就是cargo用户可以执行:sudo more命令了
  • cargo ALL=(ALL) ALL,cargo用户可以执行所有命令
ALL=(ALL) ALL的意思是:网络主机=(目标用户) 命令
 
18.ps,强大的命令,查进程
参数说明:

l 长格式输出;

u 按用户名和启动时间的顺序来显示进程;

j 用任务格式来显示进程;

f 用树形格式来显示进程;

a 显示所有用户的所有进程(包括其它用户);

x 显示无控制终端的进程;

r 显示运行中的进程;

ww 避免详细参数被截断

-e 显示所有进程,环境变量
-f 用树形格式来显示进程

 

经常用:ps -ef|grep mf-,查找包含mf-的进程
    ps aux,此命令显示数据说明:

      USER: 进程所有者
      PID: 进程ID

      %CPU: 占用的 CPU 使用率

      %MEM: 占用的内存使用率
      VSZ: 占用的虚拟内存大小
      RSS: 占用的内存大小

      TTY: 终端的次要装置号码 (minor device number of tty)

      STAT: 进程状态:

      START: 启动进程的时间; 
      TIME: 进程消耗CPU的时间;
      COMMAND:命令的名称和参数;

 19.chown,将指定文件的拥有者改为指定的用户或组
 chown -R cargo /opt/app,改变/opt/app目录以及其子目录下的所有文件拥有者为cargo
 
20.chmod,改变文件权限
命令格式:chmod [who]operator[permission] filename
  who包含的选项及其含义:
        u 文件属主权限
        g 属组用户权限
        o 其他用户权限
        a 所有用户(文件属主、属组用户及其他用户)

    operator包含的选项及其含义:
        + 增加权限
        - 取消权限
        = 设定权限
   
    permission包含的选项及其含义:
        r 读权限
        w 写权限
        x 执行权限
        s 文件属主和组set-ID
        t 粘性位*
        l 给文件加锁,使其他用户无法访问
        u,g,o 针对文件属主、属组用户及其他用户的操作 
例如:chmod u+w ./cargo,目录属主加写权限
     chmod -u+w ./cargo,目录及子目录、文件属主加写权限
 
21.cp,本机拷贝
cp -r ./scpfrom ./scpto,复制目录本身和子目录、文件
cp ./scpfrom ./scpto,无效果
cp ./scpfrom/* ./scpto,复制子文件
cp -r ./scpfrom/* ./scpto,复制子目录、文件
 
22.scp,远程拷贝 
scp /home/cargo/scpfrom/*.properties cargo@10.6.54.232: /home/cargo/scpto
 
23.ls,列出文件和目录,及属主、权限等
常用:ls -lih
 
24.find,查找目录/文件
常用:find  ./   -type   d   |   wc   -l ,统计目录个数
   find  ./   -type   f   |   wc   -l,统计文件个数
     find /opt/app/jboss-eap-6.3/mfoc-logs/ -name "mfoc*.log*" ,查找以mfoc开头包含.log的文件
    find /opt/app/jboss-eap-6.3/mfoc-logs/  -size   +512k  ,查大于512k的文件
 

25.查看空间大小


  •  df,以磁盘挂载点形式显示使用情况
    常用:df -hl
  • du,查看文件/目录的占用空间
    常用:du -h /opt,显示/opt子目录的目录大小和当前目录的总的大小
       du -hs /opt,仅显示/opt总的大小
         du --max-depth=1 -h,显示当前目录和第一层子目录大小
 
26.查看系统的用户和组
  • /etc/group,格式如下:组名:口令:GID:用户列表
  • /etc/passwd,格式如下:用户名:口令:UID:GID:注解:用户主目录:登陆后自动执行命令
  • /etc/shadow,格式如下:用户名:口令:上一次修改的时间(从1970.1.1的天数):口令在两次修改间的最小天数:口令修改之前向用户发出警告的天数:口令终止后账号被禁用的天数:从1970.1.1起账号被禁用的天数:保留域
常用命令:groups yh,查看yh所属的用户组
 
27.file,查看文件编码
返回类似 ./mfoc.log: UTF-8 Unicode text
知道了编码就可以转换内容了:iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt,utf-8编码转换为gb2312编码输出到bbb.txt
转换文件名:convmv -f GBK -t UTF-8 --notest *.mp3
 
28.netstat,端口占用 

常用参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令

例如:netstat –apn|grep 8080,查看8080端口占用情况

 

29. cut,对每行进行分割截取


cut -c 1-500,每行截取1-500字符

 

30. awk,对每行进行分割


基本语法为:awk [-F] "field-operator" 'comand' inputfiles,-F和field-operator一起使用,field-operator是域分隔符,如果不使用-F选项,则默认的域分隔符为空格。后面command命令一般需要用一堆“{}”括起来,然后进行必要的操作,

command栗子:command命令'{if($1~/^A/) print $1}'

翻译一下这个命令就是,如果第一列($1)里面有匹配(~)正则表达式(/^A/)的话,那么就输出(print)到标准输出。需要注意的是,条件必须要用一堆"()"括起来,正则表达式需要用“//”括起来。当然,完全可以不要条件匹配,可以直接输出指定列,如'{print $1}'

ps:如何print 单引号/双引号? 
  print "'\''",首先使用一个双引号"",然后在双引号里面加入两个单引号'',接着在两个单引号里面加入一个转义的单引号\'
  print "\"",使用""双引号把一个双引号括起来,然后使用转移字符\去对双引号进行转义
 
结合上面几个命令,在日志文件中有
 
 
许多类似数据,我想把一些参数提取出来,命令如下:
grep "dao.com.houbank.mls.core.dal.dao.DudectResultDOMapper.insertSelective - ==> Parameters:" service-2017-01-22.0.log  | cut -c 1-500 | awk -F "," '{print $2,$3,$4}' 
 
 
进一步,想要把准备的字符用单引号引起来,并且字段之间用,号分开,打印出插入数据库的格式
grep "dao.com.houbank.mls.core.dal.dao.DudectResultDOMapper.insertSelective - ==> Parameters:" service-2017-01-22.0.log  | cut -c 1-250 | awk -F ',' '{gsub(/[ ]|\(Long\)/,"",$2);gsub(/[ ]|\(Long\)/,"",$3);gsub(/[ ]|\(String\)/,"",$4);print $2",",$3",","'\''"$4"'\''"}'
 
 
 

31. top,实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器


一行一行的看,top - 后面是系统时间,up后面是系统运行时间,用户,load average后面分别是过去1分钟 5分钟 15分钟系统平均负载

下面一行,total 进程总数, running 正在运行的进程数, sleeping 睡眠的进程数, stopped 停止的进程数, zombie 僵尸进程数

下面一行,如果多个cpu会有多行,分别是 us 用户空间占用CPU百分比, sy 内核空间占用CPU百分比, ni 用户进程空间内改变过优先级的进程占用CPU百分比, id 空闲CPU百分比, wa 等待输入输出的CPU时间百分比,hi硬件CPU中断占用百分比,si:软中断占用百分比,st:虚拟机占用百分比

下面一行KiB Mem是内存,物理内存总大小,空闲,使用,内核缓存

下面一行KiB Swap是交换区,总大小,空闲,使用,数据已在内存中的交换区大小

 再下面就是进程明细了,
  • PID进程id,
  • USER 进程所有者的用户名,
  • PR 优先级,
  • NI nice值 负值表示高优先级 正值表示低优先级,
  • VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
  • RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR 共享内存大小,单位kb
  • S 进程状态,S 表示睡眠,D 表示不可中断睡眠,R 表示运行
  • %CPU 上次更新到现在的CPU时间占用百分比
  • %MEM 进程使用的物理内存百分比
  • TIME+ 进程使用的CPU时间总计,单位1/100秒
  • COMMAND 命令名/命令行
  • CODE 可执行代码占用的物理内存大小,单位kb
  • DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
PS:top命令后,可以使用1展示每个cpu的情况, 大写P按照cpu占用排序,大写M按照内存使用排序,大写R键可以将当前的排序倒转
Cpu(s)表示的是 所有用户进程占用整个cpu的平均值,比较有参考意义;%CPU显示的是进程占用一个核的百分比,不是整个cpu(比如12核)的百分比
 
32. rsync,远程(本地)同步文件,初次全量后面增量同步,传输中可压缩

rsync -r /app/ 用户名@IP:/app/
rsync -r 用户名@IP:/app/ /app/
rsync -r --delete /app/src/ /app/tar/,同步的同时删除目标目录中不在源目录的文件
 
 

 目前用到这些,以后再补充

posted @ 2015-10-26 15:55  未来的那啥  阅读(450)  评论(0编辑  收藏  举报