• Linux常用命令及shell技巧


    这里列出一些个人在工作中常使用的各种linux命令,每一个不详细讲参数,只写经常用的参数。希望快速获得在linux命令行工作的能力的朋友可以看看。本人一直觉的,不使用linux 图形界面,以xshell等ssh客户端使用基础版linux才是学习linux命令的正确姿势。如果想深入每一个命令学习,可以使用man手册,或者推荐一个博客:每天一个linux指令系列https://www.cnblogs.com/peida/category/309012.html。

    文件


    scp
    远程文件复制命令,一般用法
    scp -P port -r src_file remote_user2@remotehost1:dest1  remote_user2@remotehost2:dest2
    其中
    -P 指定端口
    -r  表示递归cp整个目录
    后面的多个远程主机地址表示可以向多台机器复制
    例如
    scp -P 360 -r /data/release/movesun.com root@10.135.25.177:/data/release/movesun.com 

    rsync
    文件差异化同步,只复制修改过的文件,效率高。一般用法
    rsync -avz src dest
    其中
    -a 表示打包压缩传输
    -v 详细输出过程
    -z 对备份的文件传输时进行压缩
    src  源文件 ,可以是远程主机文件
    dest 目标文件,可以是远程主机文件
    例如
    rsync -az /data/init_dirs/cd_root  root@10.135.25.177:/data/cd_root

    tar
    文件压缩打包,准确说tar包只是打包工具,并不压缩,结合gzip等程序对tar包进一步压缩。一般用法
    tar zcvf dest.tar.gz srcfiles
    其中
    z 表示 使用gip压缩或解压,还有别的格式如biz 则用字母b
    c 表示压缩
    x 表示解压
    v 输出过程
    f 指定压缩文件名
    -C 指定解压目录
    例如
    tar zcvf movesun.tar.gz movesun.com
    tar zxvf movesun.tar.gz -C /data/release/movesun.com

    ln
    建立文件链接,分软链接和硬链接,软链接类似windows快捷方式,软链接本身占inode和空间,而硬链接并不新增inode。一般用法
    ln -s -b src_file dest_link
    其中
    -s 表示软链接
    -b 表示覆盖
    例如
    ln -s -b /data/docker /var/lib/docker

    du
    查看文件占用空间,常用来定位大文件,大目录,清理磁盘空间。在windows上如果安装过cygwin或者git bash的可以用du程序查看C盘空间。一般格式
    du -sh * 
    其中
    -s 表示只显示统计
    -h 表示存储单位K,M,G自适应显示
    * 表示当前目录下所有文件或者目录
    例如在windows 查看C盘空间占用

    chmod

    修改文件权限。linux中文件权限以9位字符表示,例如

    -rw-r--r--

    其中第一个-不是权限,表示文件类型,后面9个字符表示权限
    前三位表示文件所属用户具有的权限
    中三位表示文件所属用户组具有的权限
    后三位表示其他用户具有的权限
    其中每三位分别是rwx ,r表示读,权值4,w表示写,权值为2,x表示执行权,权值为1。chmod可以以权值的形式修改文件权限,例如
    chmod -R 777 /data/release/movesun.com/app/storage
    其中
    -R表示递归处理目录
    777 表示rwxrwxrwx,也就是任意用户都具有读、写、执行权限

    chown/chgrp
    修改文件所属用户和用户组,在master worker类型的多进程程序,如nginx,php-fpm等,worker一般不是以root用户运行,这时去访问一些没有权限的目录,常常会有异常,比如http 403错误。这时就可以考虑提高目录权限,或者将目录所有者修改为进程所属用户。
    比如
    修改文件所属用户
    chown -R nginx /data/release/movesun.com
    修改文件所属用户组
    chgrp -R nginx /data/release/movesun.com
    其中  -R表示递归处理

    进程

    killall/kill
    用来停止进程
    killall按进程名称查杀进程,进程名并非我们常用ps命令看到的最后那列COMMAND那一列,而应该通过/proc/pid/status 中的Name字段查看。killall按照这里的进程名取得进程id查杀。如果父进程名与子进程名是一样的,则会一并停止掉进程。不难发现,nginx,php-fpm的master进程和worker进程都是同样的名字,所以可以通过killall nginx查杀所有nginx master和worker进程。在c或c++中进程名可以通过修改argv[0]进行修改
    而kill通常用来停止指定进程,或者向其发送各种信号,参数为进程ID,一般用9(KILL)信号杀掉进程,如kill -9 5162。可以结合ps grep awk等获取到要查杀的进程id。

    lsof
    用来查看系统打开的文件。常用来定位进程的文件位置、查看进程打开的文件句柄。因为网络连接实际也是占用文件句柄,所以也可以通过lsof看进程打开的网络连接。一般使用如下
    lsof -p 4304 
    其中4304是进程id。此命令查看该进程打开的文件。
    lsof -i:80 
    其中80为网络端口。此命令用来查看哪些进程占用80端口
    lsof /usr/lib64/libstdc++.so.6.0.19
    查看哪些进程打开了/usr/lib64/libstdc++.so.6.0.19文件

    ps
    用来显示瞬时的进程状态,或者是进程快照。常用来定位进程是否存在、获取进程id、获取父进程id或者进程树、查看进程创建的线程等。因为ps支持多种形式的参数风格,所以带-与不带-会有很大区别,甚至不能执行。一般使用如下:
    ps axu
    显示所有进程,并包含进程所属用户,CPU,MEM,耗费的CPU时间等列
    ps -ef
    显示所有进程,显示的列要比axu少
    ps -axjf
    显示进程树,类似于pstree

    top
    用来查看进程资源占用。linux top有点类似于windows任务管理器。常用来查看哪些进程占CPU、内存较高,负载,多核状态等。一般用法如下
    按内存占比排序
    运行top之后,按shift+m以内存占用排序,再按字母e,切换存储单位显示
    查看多核心状态
    运行top之后按1
    查看所有java进程
    top $(jps | awk '{print $1}' | sed 's/^/-p/')

    strace
    用来跟踪一个进程发出的系统调用。经常用来定位程序bug,定位系统卡慢原因,比如当系统磁盘IO过高时,由strace可以很容易发现进程会卡在io操作的系统调用上。一般使用方法如下。
    starce command
    strace ./get_example,会打印出运行此程序产生的每一个系统调用

    pstack
    用来查看一个运行中进程的堆栈。此工具实际是一个shell脚本,可以看到其使用gdb查看进程堆栈。一般使用方法如下
    pstack 23560  其中23560是进程id

    网络

    netstat
    用来显示网络信息。常用来查看机器监听的端口,建立的网络连接,显示路由信息等等。一般用法如下
    netstat -ntlp 
    查看所有监听的tcp端口及其进程,其中
    n表示尽量显示数字
    t表示只显示tcp
    l表示只显示处于监听状态的
    p表示显示哪个程序在监听
    netstat -lt
    显示监听状态的tcp连接
    nestat -n 
    显示所有打开的网络连接

    ss
    用来查看socket统计信息。可以实现跟netstat一样的功能,而且更强大。一般用法
    ss -t -a
    显示所有tcp连接
    ss -l
    显示打开的所有端口,包括本地与外部通信的源端口。

    telnet
    telnet客户端是基于应用层telnet协议的远程登录程序。本人一般用来检测端口是否畅通。其实也就是判断能否建立tcp连接,至于连接后的应用层通信协议不一致,是不用考虑的问题,因此也可以用别的网络命令来检测端口是否畅通,不过已经用惯了telnet。使用如
    telnet 10.135.25.177 3306
    而用别的网络客户端程序也可以测试
    端口畅通
    ssh 127.0.0.1 -p 3306
    ssh_exchange_identification: Connection closed by remote host
    端口不通
    ssh 127.0.0.1 -p 12 
    ssh: connect to host 127.0.0.1 port 12: Connection refused

     
     
    未完待续......
     
  • 相关阅读:
    SqlLite
    C# Sqlite 序列
    C#生成条形码 Code128算法
    【Ogre Beginner Guide】第二章 OGRE场景绘图
    【Ogre Beginner Guider】第一章 配置OGRE
    用户操作体验设计——小感触
    rails 调试
    mac下安装和使用brew
    如何使用 CCache 进行 Cocos2d-x 编译加速
    AndroidStudio使用和问题记录
  • 原文地址:https://www.cnblogs.com/lvyahui/p/7219647.html
Copyright © 2020-2023  润新知