Linux Command

3 minute read

Published:

This is my personal notes for using linux command.

常用命令

  • 基本命令
    cd / 跳转到根目录 cd .. 返回上一级目录 pwd 显示当前工作目录 ls 显示当前文件夹下的文件 ll 显示当前文件夹下文件的详细信息
    mkdir 新建文件夹
    rz 上传文件 rm -f 静默删除 rm -i 交互式删除 rm -rf 静默删除文件夹 rm -ir 交互式删除文件夹
    touch 新建文件
    ifconfig 查看linux机器的ip地址
    whereis redis.conf 查找文件所在位置
    cp 拷贝
    scp 跨机远程拷贝 scp -r 拷贝文件夹 使用: scp [参数] [原路径] [目标路径]
    示例: scp ./Query_and_Write_* 10.51.4.189:/data/mbd-rec-statistics/
    crontab -l 查看定时任务 crontab -e 编辑定时任务
    sudo 相当于以管理员身份运行

  • 权限相关
    chmod 777 <file/dir> 修改文件(夹)权限
    等价于 chmod a=rwx <file/dir>
    三个数字分别表示User、Group、及Other的权限(u,g,o, a代表全部)
    rwx分别表示可读, 可写, 可执行, r=4,w=2,x=1 (rwx=7,rw=6, rx=5)

  • mv命令
    mv aaa bbb 修改文件名
    mv info/ logs 移动文件(夹)到某文件夹, 如果目标文件夹不存在则变为改名

  • 文件查看
    cat 获取文件内容, tac 和cat相反, 从最后一行往前打印 more 一页一页获取文件内容, less 多了支持向前翻页 head 获取文件前几行, tail 获取文件后几行

  • 搜索相关

    find [basedir] [option] 文件搜索
    eg: find . -name “sklearn.*” 从当前目录为根目录搜索名称匹配sklearn.的文件

    grep 正则匹配

    $ grep [-acinv] 搜寻字符串 filename
    -c : 统计匹配到行的个数
    -i : 忽略大小写
    -n : 输出行号
    -v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行
    
  • 文件压缩与打包
    gzip可以将单个文件进行压缩
    gzip [-cdtv#] filename
    -c :将压缩的数据输出到屏幕上
    -d :解压缩
    -t :检验压缩文件是否出错
    -v :显示压缩比等信息
    -# : # 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6
    

    tar可以将多个文件进行打包并压缩

    $ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename...  ==打包压缩
    $ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件]              ==查看
    $ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录]    ==解压缩
    -z :使用 zip;
    -j :使用 bzip2;
    -J :使用 xz;
    -c :新建打包文件;
    -t :查看打包文件里面有哪些文件;
    -x :解打包或解压缩的功能;
    -v :在压缩/解压缩的过程中,显示正在处理的文件名;
    -f : filename:要处理的文件;
    -C 目录 : 在特定目录解压缩。
    

    如 $ tar -zcvf new.tar.gz test/ 表示将test下的所有文件压缩并打包为new.tar.gz
    $ tar -ztvf new.tar.gz 表示查看刚打包的tar文件
    $ tar -zxvf new.tar.gz 表示在”当前路径”解压刚打包的tar文件, 也可以通过-C指定解压路径

  • vim
    编辑文件: vim redis.conf

    读写: i:进入插入模式, ESC: 返回normal模式, :w+Enter保存不退出, :wq+Enter保存并退出, :q+Enter没有任何修改时退出, :q!+Enter放弃修改强制退出

    搜索: /xxx, n向下搜索, N向上搜索

  • 进程管理

    (1) 查看自己的进程: ps -l
    (2) 查看系统所有进程: ps aux
    (3) 查看特定的进程: ps aux | grep threadx

    ps aux:

    USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
    root               319   9.4  0.1  4388060   5484   ??  Ss   19Apr20  15:08.50 /opt/cisco/anyconnect/bin
    luolingwei       60712   9.1  2.1  9116324 177064   ??  S     9:27PM   0:32.91 /Applications/Google Chro
    luolingwei         399   6.2  0.5  5087660  45584   ??  S    19Apr20   2:03.47 /System/Applications/Util
    luolingwei       19185   5.1  0.0  4339732   1932   ??  Ss   20Apr20 194:49.98 adb -L tcp:5037 fork-serv
    _windowserver      244   4.4  0.8  7074072  64352   ??  Ss   19Apr20 454:45.18 /System/Library/PrivateFr
    luolingwei       61006   4.0  1.5  9066656 121732   ??  S     9:42PM   0:03.01 /Applications/Google Chro
    
    USER: 进程拥有者 
    PID: pid 
    %CPU: 占用的 CPU 使用率 
    %MEM: 占用的内存使用率 
    VSZ: 占用的虚拟内存大小,申请内存值
    RSS: 占用的内存大小 ,实际使用的物理内存
    TTY: 终端的次要装置号码 (minor device number of tty) 
    STAT: 该行程的状态: 
    D: 不可中断的静止 (通悸□□缜b进行 I/O 动作) 
    R: 正在执行中 
    S: 静止状态 
    T: 暂停执行 
    Z: 不存在但暂时无法消除 
    W: 没有足够的内存分页可分配 
    <: 高优先序的行程 
    N: 低优先序的行程 
    L: 有内存分页分配并锁在内存内 (实时系统或捱A I/O) 
    START: 进程开始时间 
    TIME: 执行的时间 
    COMMAND:所执行的指令
    

    (4) 查看cpu状态(查看最消耗cpu的进程): top

    (5) 查看某进程下的线程情况: top -H -p [pid]

    (6) 查看占用某个端口号的进程:
    netstat -anp | grep [port]
    lsof -i [tcp/udp]:[port]

ctrl+z(挂起)、ctrl+c(中断)、ctrl+\(退出)和ctrl+d(EOF)的区别

1、四种操作的表现

ctrl+c强行中断当前程序的执行。

ctrl+z将任务中断,但是此任务并没有结束,他仍然在进程中,只是放到后台并维持挂起的状态。如需其在后台继续运行,需用“bg 进程号”使其继续运行;再用”fg 进程号”可将后台进程前台化。

ctrl+\表示退出。

ctrl+d表示结束当前输入(即用户不再给当前程序发出指令),那么Linux通常将结束当前程序。

2、ctrl+c,ctrl+d,ctrl+z在linux中意义。

linux下:
ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。
ctrl-\ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件。
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。

Key Function
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output
Ctrl-l Clear screen

fork命令

由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。

  • 1 在父进程中,fork返回新创建子进程的进程ID;

  • 2 在子进程中,fork返回0;

  • 3 如果出现错误,fork返回一个负值;

对父进程来说,之所以fork返回子进程id给它, 是因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。
对子进程来说,之所以fork返回0给它,是因为它随时可以调用getpid()来获取自己的pid;也可以调用getppid()来获取父进程的id。

fork之后,操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,子进程拥有父进程当前运行到的位置。

python相关命令

安装python包: pip install packagename | yum install python-packagename
显示当前安装包: pip list
运行python脚本:python ./xxxx.py (在当前目录执行) python xxxx.py (在坏境变量目录下执行)