zoukankan      html  css  js  c++  java
  • Linux常用命令和基础知识

    查看进程

    1. ps
    查看某个时间点的进程信息

    示例一:查看自己的进程

    # ps -l
    示例二:查看系统所有进程

    # ps aux
    示例三:查看特定的进程

    # ps aux | grep threadx

    2. top
    实时显示进程信息

    示例:两秒钟刷新一次

    # top -d 2
    3. pstree
    查看进程树

    示例:查看所有进程树

    # pstree -A
    4. netstat
    查看占用端口的进程

    示例:查看特定端口的进程

    # netstat -anp | grep port

    文件操作

    ls -a ,all列出全部文件包括隐藏

    ls -l,list显示文件的全部属性

    ls -d,仅列出目录本身

    cd mkdir rmdir 常用不解释 rm -rf永久删除 cp复制 mv移动或改名

    touch,更新文件时间或者建立新文件。

    权限操作

    chmod rwx 分别对应 421

    chmod 754 .bashrc 将权限改为rwxr-xr--

    对应权限分配是对于 拥有者,所属群组,以及其他人。

    文件默认权限

    文件默认权限:文件默认没有可执行权限,因此为 666,也就是 -rw-rw-rw- 。

    目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为 777 ,也就是 drwxrwxrwx。

    目录的权限

    ps:拥有目录权限才能修改文件名,拥有文件权限是没用的

    文件名不是存储在一个文件的内容中,而是存储在一个文件所在的目录中。因此,拥有文件的 w 权限并不能对文件名进行修改。

    目录存储文件列表,一个目录的权限也就是对其文件列表的权限。因此,目录的 r 权限表示可以读取文件列表;w 权限表示可以修改文件列表,具体来说,就是添加删除文件,对文件名进行修改;x 权限可以让该目录成为工作目录,x 权限是 r 和 w 权限的基础,如果不能使一个目录成为工作目录,也就没办法读取文件列表以及对文件列表进行修改了。

    连接操作

    硬链接:使用ln建立了一个硬连接,通过ll -i获得他们的inode节点。发现他们的inode节点是相同的。符合硬连接规定。

    # ln /etc/crontab .

    # ll -i /etc/crontab crontab

    软连接:

    符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。

    当源文件被删除了或者被移动到其他位置了,链接文件就打不开了。

    可以为目录建立链接。

    # ll -i /etc/crontab /root/crontab2

    获取内容

    cat 读取内容 加上-n 按行打印

    tac是cat的反向操作

    more允许翻页查看,而不像cat一次显示全部内容

    less可以先前翻页和向后翻页,more只能向前翻页

    head 和tail 负责取得文件的前几行和后几行

    搜索和定位

    1 which负责指令搜索,并显示第一条 比如which pwd,会找到pwd对应的程序。加-a 打印全部。

    2 whereis负责搜索文件, 后面接上dirname/filename

    文件搜索。速度比较快,因为它只搜索几个特定的目录。
    比如 whereis /bin hello.c

    3 locate
    文件搜索。可以用关键字或者正则表达式进行搜索。

    locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索,它存储在内存中,并且每天更新一次,所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。

    # locate [-ir] keyword
    -r:正则表达式

    locate hello
    locate he*
    vi heeee
    updatedb
    locate he?

    4. find
    文件搜索。可以使用文件的属性和权限进行搜索。

    # find [basedir] [option]
    example: find . -name "shadow*"

    find -name "hike"
    find +属性后缀 "属性"

    (一)与时间有关的选项

    -mtime  n :列出在 n 天前的那一天修改过内容的文件

    (二)与文件拥有者和所属群组有关的选项

    -uid n
    -gid n
    -user name

    (三)与文件权限和名称有关的选项

    -name filename
    -size [+-]SIZE:搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k
    -type TYPE

    压缩

    gzip压缩和解压,还有bzip,xz等压缩

    而tar可以用打包,打包的时候也可以执行压缩

    压缩指令只能对一个文件进行压缩,而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包,也可以使用 gip、bzip2、xz 将打包文件进行压缩。

    $ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename...  ==打包压缩
    $ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件]              ==查看
    $ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录]    ==解压缩

    管道指令

    1 |

    2 cut切分数据,分成多列,last显示登陆者信息

    正则

    grep

    g/re/p(globally search a regular expression and print),使用正则表示式进行全局查找并打印。

    $ grep [-acinv] [--color=auto] 搜寻字符串 filename
    -c : 计算找到个数
    -i : 忽略大小写
    -n : 输出行号
    -v : 反向选择,亦即显示出没有 搜寻字符串 内容的那一行
    --color=auto :找到的关键字加颜色显示

    awk

    $ awk '条件类型 1 {动作 1} 条件类型 2 {动作 2} ...' filename
    示例 2:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。

    $ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 " " $3}'
    root 0
    bin 1
    daemon 2
    sed

    示例 3:输出正在处理的行号,并显示每一行有多少字段

    $ last -n 5 | awk '{print $1 " lines: " NR " columns: " NF}'
    dmtsai lines: 1 columns: 10
    dmtsai lines: 2 columns: 10
    dmtsai lines: 3 columns: 10
    dmtsai lines: 4 columns: 10
    dmtsai lines: 5 columns: 9

    sed:

    awk用于匹配每一行中的内容并打印
    而sed负责把文件内容重定向到输出,所以sed读取完文件并重定向到输出并且通过awk匹配这些内容并打印。

    他们俩经常搭配使用

    查看进程状态

    Linux进程状态(ps stat)之R、S、D、T、Z、X

    D    不可中断     Uninterruptible sleep (usually IO)
    R    正在运行,或在队列中的进程
    S    处于休眠状态
    T    停止或被追踪
    Z    僵尸进程
    W    进入内存交换(从内核2.6开始无效)
    X    死掉的进程

    <    高优先级
    N    低优先级
    L    有些页被锁进内存
    s    包含子进程
    +    位于后台的进程组;
    l    多线程,克隆线程  multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

    ps aux

    strace

    strace用于跟踪程序执行过程中的系统调用,如跟踪test进程,只需要:

    strace -p [test_pid] 或直接strace ./test

    比如,跟踪pid为12345的进程中所有线程的read和write系统调用,输出字符串的长度限制为1024:

    strace -s 1024 -f -e trace=read,write -p 12345

    tcpdump

    tcpdump是Linux上的抓包工具,如抓取eth0网卡上的包,使用:

    sudo tcpdump -i eth0

    比如,抓取80端口的HTTP报文,以文本形式展示:

    sudo tcpdump -i any port 80 -A这样你就可以清楚看到GET、POST请求的内容了。

    nc

    nc可以在Linux上开启TCP Server、TCP Client、UDP Server、UDP Client。

    如在端口号12345上开启TCP Server和Client模拟TCP通信:

    Server: nc -l 127.0.0.1 12345Client: nc 127.0.0.1 12345 在端口号12345上开启UDP Server和Client模拟TCP通信:

    Server: nc -ul 127.0.0.1 12345Client: nc -u 127.0.0.1 12345Unix Socket通信示例:

    Server: nc -Ul /tmp/1.sockClient: nc -U /tmp/1.sock

    curl

    curl用于模拟HTTP请求,在终端模拟请求时常用,如最基本的用法:

    curl http://www.baidu.com

    lsof

    lsof命令主要用法包括:

    sudo lsof -i :[port] 查看端口占用进程信息,经常用于端口绑定失败时确认端口被哪个进程占用

    sudo lsof -p [pid] 查看进程打开了哪些文件或套接字

    ss

    Linux上的ss命令可以用于替换netstat,ss直接读取解析/proc/net下的统计信息,相比netstat遍历/proc下的每个PID目录,速度快很多。

    awk/sed

    awk和sed在文本处理方面十分强大,其中,awk按列进行处理,sed按行进行处理。

    如采用冒号分隔数据,输出第一列数据(代表行全部列数据,​1代表第一列,$2代表第二列...)

    awk -F ":" '{print $1}'在awk的结果基础上,结合sort、uniq和head等命令可以轻松完成频率统计等功能

    查看文件的第100行到第200行:sed -n '100,200p' log.txt替换字符串中的特定子串echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g"替换test文件每行匹配ab的部分为cdsed -i 's/ab/cd/g' test

    vim

    打开文件并跳到第10行

    $ vim +10 filename.txt打开文件跳到第一个匹配的行

    $ vim +/search-term filename.txt以只读模式打开文件

    $ vim -R /etc/passwd

    crontab

    查看某个用户的crontab入口

    $ crontab -u john -l设置一个每十分钟执行一次的计划任务

    */10 * * * * /home/ramesh/check-disk-space更多示例:Linux Crontab: 15 Awesome Cron Job Examples

    service

    service命令用于运行System V init脚本,这些脚本一般位于/etc/init.d文件下,这个命令可以直接运行这个文件夹里面的脚本,而不用加上路径

    查看服务状态

    $ service ssh status查看所有服务状态

    $ service --status-all重启服务

    $ service ssh restart

    free

    这个命令用于显示系统当前内存的使用情况,包括已用内存、可用内存和交换内存的情况

    默认情况下free会以字节为单位输出内存的使用量

    $ free
                 total       used       free     shared    buffers     cached
    Mem:       3566408      1580220    1986188        0     203988     902960
    -/+ buffers/cache:       473272    3093136
    Swap:      4000176            0    4000176

    如果你想以其他单位输出内存的使用量,需要加一个选项,-g为GB,-m为MB,-k为KB,-b为字节

    如果你想查看所有内存的汇总,请使用-t选项,使用这个选项会在输出中加一个汇总行

    top

    top命令会显示当前系统中占用资源最多的一些进程(默认以CPU占用率排序)如果你想改变排序方式,可以在结果列表中点击O(大写字母O)会显示所有可用于排序的列,这个时候你就可以选择你想排序的列

    如果只想显示某个特定用户的进程,可以使用-u选项

    $ top -u oracle

    df

    显示文件系统的磁盘使用情况,默认情况下df -k 将以字节为单位输出磁盘的使用量

    使用-h选项可以以更符合阅读习惯的方式显示磁盘使用量

    $ df -h

    kill

    kill用于终止一个进程。一般我们会先用ps -ef查找某个进程得到它的进程号,然后再使用kill -9 进程号终止该进程。你还可以使用killall、pkill、xkill来终止进程

    $ ps -ef | grep vimramesh 7243 7222 9 22:43 pts/2 00:00:00 vim

    $ kill -9 7243

    mount

    如果要挂载一个文件系统,需要先创建一个目录,然后将这个文件系统挂载到这个目录上

    mkdir /u01mount /dev/sdb1 /u01也可以把它添加到fstab中进行自动挂载,这样任何时候系统重启的时候,文件系统都会被加载

    /dev/sdb1 /u01 ext2 defaults 0 2

    chmod

    chmod用于改变文件和目录的权限

    给指定文件的属主和属组所有权限(包括读、写、执行)

    $ chmod ug+rwx file.txt删除指定文件的属组的所有权限

    $ chmod g-rwx file.txt修改目录的权限,以及递归修改目录下面所有文件和子目录的权限

    $ chmod -R ug+rwx file.txt更多示例:7 Chmod Command Examples for Beginners

    chown

    chown用于改变文件属主和属组

    同时将某个文件的属主改为oracle,属组改为db

    $ chown oracle:dba dbora.sh使用-R选项对目录和目录下的文件进行递归修改

    $ chown -R oracle:dba /home/oracle

    ifconfig

    ifconfig用于查看和配置Linux系统的网络接口

    uname

    uname可以显示一些重要的系统信息,例如内核名称、主机名、内核版本号、处理器类型之类的信息

    实际场景问题

    1 cpu占用率

    top可以看
    ps看不了
    但是ps -aux可以看到各个线程的cpu和内存占用

    2 进程状态:

    ps -ef看不了
    ps aux可以看进程状态S R之类

    3 IO
    iostat查看io状态

    4网络
    netstat查看tcp连接状态和socket情况,

    ipconfig查看网络设备

    lsof可以查看端口使用情况

    5内存
    free

    原作者CSDN-黄小斜

    学习时的痛苦是暂时的 未学到的痛苦是终生的
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Hadoop压缩
    Hive数据倾斜总结
    DQL、DML、DDL、DCL
    HashMap/HashSet,hashCode,哈希表
    HashMap详解
    Hive分区和桶
    String不可变StringBuffer可变
    Java线程和守护进程
    Ambari安装小记
    P3
  • 原文地址:https://www.cnblogs.com/juanxincai/p/12613799.html
Copyright © 2011-2022 走看看