zoukankan      html  css  js  c++  java
  • Linux 基础命令、文档树 和 bash

    最近发现了一个总结得更好的:bash cheatsheet


    本文只是我对 linux 基础学习的一个总结,可能仅适用于复习用。算是我的 Linux 备忘录。

    最基础

    • tab 补全
    • * 通配符
    • ctrl-c 中断当前进程 (以下几个快捷键可使用 stty -a 查看)
    • ctrl-d EOF或者exit
    • ctrl-r 反向查找命令历史
    • history 查看命令历史
    • reset 通过重启完全清空窗口(慢)
    • clear 通过翻页实现窗口清空(快)
    • shift+page down/up 窗口翻页

    命令行编辑-快捷键(M 表示 Meta, 指 ALT 键)

    • commands for moving
      • ctrl-a 光标移到行首
      • ctrl-e 光标移到行末
      • meta-f 光标前进一个单词
      • meta-b 光标后退一个单词
      • ctrl-l 等同于clear
    • commands for killing
      • ctrl-w 从当前光标,向前删除到空格
      • meta-d 从当前光标,向后删除到空格
      • ctrl-k 删除光标后面的所有内容
      • ctrl-u 清空当前命令行

    指令/档案帮助:

    • man page(manual 说明文档)(man的说明见man man)
    • 程序说明文档 usr/share/doc

    系统状态:

    • who 当前在线用户
    • netstat 网络状态
    • ps -aux 正在活动的进程
    • ls 即list,列出当前目录下的文档/目录
    • ls -l 列出文档的同时,还列出其权限等信息
    • ls -a 列出所有文档,包括隐藏文档和 . ..

    文件搜索:

    • which 只搜索 PATH 下的所有程序
    • whereis 只查询特定目录下的文档(使用完全匹配),主要是/usr/share/man /usr/src等,可用-l选项查看被查询的目录。
    • locate 关键字匹配,并且使用预建索引,索引可使用updatedb手动更新。
    • find PATH option action 在指定目录中递归查找能匹配的 文件/目录。
      • find . -name '*.png' 查找当前目录下的所有png图片。
      • 经常和 xargs 一起用于批量操作:find 目录 -name 名称|xargs rm -rf,批量删除名字内带有特定字符的文件。

    文档抓取(通常是针对行的操作,复杂的操作建议用 python)

    1. cut(从每一行中,仅取出需要的部分)
    2. grep -[vniwc] 'pattern' file(从所有行中,仅取出需要的行,pattern 部分使用正则表达式)
      • grep --color=auto 'pattern' filename
      • v 反匹配,列出不被匹配的行
      • n 显示行号
      • i 忽略大小写
      • w 单词完全匹配
      • c 计数匹配到的行
      • 全文搜索:grep ‘string-pattern' [path-pattern] -r,在匹配到的所有文档内搜索 string-pattern
    3. sed 按行进行的修改替换命令(行是基本单位)
    4. awk 针对每行的一部分进行的修改替换命令(行的一部分是基本单位)
    5. uniq 重复的行只列出一个
    6. wc 字符计数
    7. tee 单入口、双出口的管道,在需要检视中间流时很有用
    8. sort 按行排序
    9. diff 档案对比工具
      • -y选项:side-by-side显示,特别实用

    系统控制:

    • shutdown -h now 正常关机(poweroff)
    • shutdown -r now 正常重启(reboot)
    • systemctl 管理命令
    • tty-x切换:ctrl+alt+f-x
    • 字符集:locale 或 echo $LANG
    • time 指令: 输出指令执行所用的时间

    目录操作

    • cd (change directory)
    • pwd (print work directory)
    • mkdir -[mp] (make directory)
      • m选项 设定权限rwx...
      • p选项 自动创建多层目录
    • rmdir -[p] dir_name 删除空目录
      • p选项 删除多层空目录
    • 环境变量
      • PATH变量(一个对 shell 很有用的环境变量):所有的命令,都只会从该变量指定的目录查找。(不同的路径之间用「:」分隔)如果要运行不在$PATH中的程序,需要使用绝对路径或相对路径明确指定。
      • export variable: 将 自定义变量 var 导入到环境变量(仅当前环境有效,JAVA_HOME 之类的变量就需要使用它来导入)
      • env 查看当前环境变量
      • set /unset 设定自用变量

    文档与目录

    • cp -[aipr] source destination (不同身份的用户,执行这条指令,结果会有明显的差别)
      • a选项 递归复制所有文件、对link文件复制其本身(不加a的话,默认是复制源文件的,而不是该link文件)
      • i选项 交互模式,执行不可逆操作(覆盖)时,先行提示
      • p选项 同时复制该文件的所有属性(权限、所有者、时间)
      • r选项 递归复制,用于目录复制
      • u选项 在目标文档与源文档有差异时才复制,常用于备份。
      • cp file1 file2 directory 复制多个文件到一个目录
    • rm -[fir] file_or_dir
      • f 强制删除,忽略不存在的档案,没有任何提示
      • i 交互模式
      • r 递归移除(rmdir的加强版,危险操作)
    • mv -[fiu] source destination
      • f 强制移动,直接覆盖已有文档,无提示
      • i 交互模式
      • u 更新模式update,只当 source 比目标文档更新时才覆盖。
      • 可一次移动多个文件到某目录
      • 也用于目录或文档的更名
    • touch 新建空文档/更新已存在文档的时间
    • ln 新建链接

    文档内容查阅

    • cat -n 正序查阅(n表示带行号)
    • tac 倒叙(cat的反写)
    • nl 显示行号
    • more 一页页查阅
    • less 滚动查阅,前后都可滚动、还有几个跳转查找指令可用
    • head [-n num] file 查看前num行,默认10
    • tail 查看最后num行,用法同上
    • hd 查看binary文档,默认16进制
    • file 查询指定文件/目录的属性,text or directory, text or binary, excutable or not, etc. (deepin 默认没有安装,需要sudo apt-get install file

    账号管理

    • /etc /passwd
    • 账号变更: useradd, passwd, chage, usermod, userdel
    • 群组变更: groupadd, groupmod,  groupdel, gpasswd
    • id,  finger,   chfn(change finger),   chsh (changer shell)
    • sudo(super do),   su
    • ACL
    • lastlog,     who

    文档与目录的权限管理

    • r:read w:write x:execute
      • 文档
        • 文档的 rwx 控制文档的可读写/执行,但不包括增删。
      • 目录的 rwx
        • r 表示可查看目录内的结构(至于目录内的内容是否可读,就是它自己的rwx的事了)
        • w表示可增删这个目录内的结构
        • x 表示能以该目录为当前工作目录(可 cd 到该目录)
    • chmod 755 file.sh
      • 仅拥有者可写,其他人可读可执行。(创建 shell 脚本时常用 r w x : 4 2 1)
      • 另一种方法是使用 u g o,可读性更好,但是书写会麻烦一点点。
      • 第三种方法是使用 a 和 +-= 来设定
    • chown ryan:ryan filename
      • 修改文件拥有者、群组。不同用户之间交换文件时常用。(例如root要发一个文件给普通用户)
    • chgrp 仅修改群组时使用
    • umask 档案预设需要减掉的(掩码)权限(未理解)
    • chattr [+-=][ai] file 设置隐藏属性,常用于安全相关的设置
      • a 只能增加内容,不能被删除、修改
      • i 不可变对象,不能被删除、修改、改名、创建链接、增加内容。
    • lsattr 显示隐藏属性

    重定向、管道

    1. 输出重定向(可使用数字做为前缀,1为stdin,2为stderr)
      1. > 覆盖方式的流重定向,将标准输出输出为某文档
      2. >> 添加方式的重定向,将内容添加到某文档尾部
    2. 输入重定向
      1. < 以某文档作为程序的标准输入,覆盖方式。
      2. << 添加方式的输入重定向

    Linux 的目录结构(仅较重要的部分)

    1. /usr (unix software resources) 主要的系统软件
      • usr/bin 一般用户能够使用的命令,基本都在这里
      • usr/sbin 即 super binaries,与系统管理相关的,需要root权限的指令会存放在这里。(类似于 win 的 C://Windows)
      • usr/local 管理员额外安装的系统软件,应安装在此。(类似于 win 的 C://Programm Files)
      • usr/share 基本都是只读文档,man doc 都在这
      • usr/include c/c++的头文件
      • usr/src 系统软件的源代码,可放置于此。
      • usr/local/src 管理员额外安装的软件的源码
    2. /opt 即 optional softwares (类似于 win 的 D://Programm Files)
    3. /var variable,可变目录,随着使用增大。
      • var/cache 缓存
      • var/lock 资源锁
      • var/log 日志文件
    日 志 文 件 说 明
    /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
    /var/log/secure 与安全相关的日志信息
    /var/log/maillog 与邮件相关的日志信息
    /var/log/cron 与定时任务相关的日志信息
    /var/log/spooler 与UUCP和news设备相关的日志信息
    /var/log/boot.log 守护进程启动和停止相关的日志消息
    1. /etc 配置文件,建议备份 (名字来自于 etcetera,原用于存放 “其他文件”,演化至今,便成了配置文件夹。)
      • 全局环境
        • /etc/profile 系统的 shell 环境配置文件(仅每个用户登录时加载一次,不建议修改)
        • /etc/bash.bashrc 系统的 bash shell 环境配置文件(每次开启一个新 bash,都会加载。如果需要对所有用户都生效的 bash 环境,就修改这个)
      • 用户环境
        • ~/.profile [也可能是 ~/.bash_profile] 用户个人的 shell 环境配置文件,相当于 /etc/profile 的个人 patch。一般来说它设定一些用户个人的环境变量,然后执行 ~/.bashrc。
        • ~/.bashrc 用户个人的 bash shell 配置文件(同样每次开新 bash 都会加载)
      • source :在当前 shell 中执行指定的 shell 脚本。常用于环境设定档。(这样做,运行后的变量会存在于当前shell,也就完成了所谓的环境设定。而如果是普通的直接运行的话,会启用新shell来运行该脚本,运行结束环境就销毁了。)

    由上述配置文件引申,用户安装二进制 tarball 时,通常有两种做法

    1. 一种就是将该软体的 bin 目录添加进PATH中(这会使该 bin 目录中的所有可执行文件都被加入到 PATH,如果你不想这样,请考虑第二种方法),也就是将相关命令写入 shell 配置文件中。至于应该添加到哪里,看了上面的说明,你应该已经懂了。

      举例来说,安装一个软件时,如果该软件大家都要用,就应该写入系统配置里,然后如果你基本只用 bash,写 bashrc 里更方便(修改可立即生效),否则选profile。
      而若只有你个人需要该软件,肯定要放用户配置里,再考虑你是不是用其他 shell。一般来说放 bashrc 里总没问题,而放 profile 里,有时会需要手动 source /etc/profile 一下才能用。

    2. 第二种呢,就是向PATH默认就会包含的那些目录中(例如 /usr/local/bin),添加启动脚本。(使用 python 或 shell 编写)Jetbrains 家的软件在检测到该软件的 bin 目录未添加进 PATH 时,就会提示你这么干。(idea 会向 /usr/local/bin 添加名为 idea 的 python 启动脚本)

    bash 的特殊符号表

    符号内容
    #注解符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行
    跳脱符号:将『特殊字符或通配符』还原成一般字符
    |管线 (pipe):分隔两个管线命令的界定(后两节介绍);
    ;连续指令下达分隔符号:连续性命令的界定 (注意!与管线命令并不相同)
    ~用户的家目录
    $取用变量前置字符:亦即是变量之前需要加的变量取代值
    &工作控制 (job control):将指令变成后台工作
    !逻辑运算意义上的『非』 not 的意思!
    /目录符号:路径分隔的符号
    >, >>数据流重导向:输出导向,分别是『取代』与『累加』
    <, <<数据流重导向:输入导向 (这两个留待下节介绍)
    ' '单引号,不具有变量置换的功能 ($ 变为纯文本)
    " "具有变量置换的功能! ($ 可保留相关功能)
    ` `两个『 ` 』中间为可以先运行的指令,亦可使用 $( )
    ( )在中间为子 shell 的起始与结束
    { }在中间为命令区块的组合!

    系统监控常用命令:

    1. htop — 系统进程监控(需要安装,此外 linux 自带 top 命令)
    2. iotop — 磁盘IO监控,有总的IO统计,和分进程的IO统计,风格类似 top
    3. nmon — CPU/Disk IO/Network IO 多功能监控工具
    4. at(atd),   crontab(crond) —定时任务

    线程管理

    1. job:  ctrl +z,  jobs, fg, bg, kill  (job 是所在bash的子任务,不一定正在运行)
    2. process: ps [aux,  axjf, -lA]
      1. top/htop,     pstree
      2. kill,    killall (整个相关程序组)

    零碎

    1. default terminal:tty1/tty6    (ctrl+)alt+f[1-6]
    2. parted 分区工具
    3. alias/unalias

    脱离当前的 shell,在后台工作。(简便的“服务”)

    nohup python xxx.py &
    

    上面的命令使 xxx.py 在后台运行,即使当前 shell 被关闭,该程序仍然不会被影响。而 std 被定向到运行目录下的 nohup.out 文件(默认行为)。

    查看系统信息

    1. uname --all:查看 linux 内核信息
    2. cat /etc/system-releasecat /etc/os-release:查看系统的发行版信息
    3. df -h:查看系统中文件的使用情况
    4. du -sh *:查看当前目录下各个文件及目录占用空间大小
    5. 全文搜索:grep ‘string-pattern' [path-pattern] -r,在匹配到的所有文档内搜索 string-pattern
    6. 全文搜索并替换:sed -i "s/pattern_str/replace_str/g" `grep "key_pattern" 'path_pattern' -r`
    7. 文件名搜索并替换:sed -i "s/pattern_str/replace_str/g" `find . -name "pattern"`
    8. 批量转换大小写: sed -i 's@http://gitlab.xxx.*.git@L&@g' find . -name pubspec*
      • L 表示转换成小写,U 表示转换成大写
    #只在目录中所有的.php和.html文件中递归搜索字符"main()"
    grep "main()" . -r --include *.{php,html}
    

    参考

  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/kirito-c/p/8955474.html
Copyright © 2011-2022 走看看