最近发现了一个总结得更好的: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}

参考

Linux 基础命令、文档树 和 bash的更多相关文章

  1. Linux的帮助文档命令

    Linux的帮助文档命令 1.man page man是manual(操作手册)的简写,使用方式: man [指令] man date 在显示的内容中查找内容: / + 搜索你的关键字 上下左右键来查 ...

  2. 500 多个 Linux 命令文档搜索

    500 多个 Linux 命令文档搜索 搜索界面:https://wangchujiang.com/linux-command/ 源码:https://github.com/jaywcjlove/li ...

  3. Linux基础命令小结(超全!!)

    Linux目录结构 1.bin 存放经常使用的指令比如ll,cp 2.sbin 系统管理员使用的系统管理指令 3.home 存放普通用户的住目录 4.root 系统管理员的用户主目录 5.boot 存 ...

  4. 常用的linux基础命令

    常用的linux基础命令 1.ls 显示目录属性 -l:(也可以简写成ll),列表显示权限等属性 -a:显示所有文件包括隐藏文件等 -d:只列出目录本身 2.chgrp 改变档案所属群组 eg:chg ...

  5. Linux——基础命令用法(上)

    一.Linux基础命令 1.Linux命令行的格式 命令行的格式为:用户名+主机名+当前工作目录 输入内容的命令格式为:命令 [-短选项/--长选项] [参数] [root@localhost ~]# ...

  6. 第四节,Linux基础命令

    第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令         ...

  7. 【Python之路】第一篇--Linux基础命令

    pwd 命令 查看”当前工作目录“的完整路径 pwd -P # 显示出实际路径,而非使用连接(link)路径:pwd显示的是连接路径 .   表示当前目录 ..  表示上级目录 /  表示根目录 ls ...

  8. Linux基础命令-文件与目录

    Linux基础命令-文件与目录 参考:<鸟哥linux私房菜>五-七章,17/12/5复习,18/01/15复习 文件权限 rwx421:用户,用户组,其他 umask查看默认权限:000 ...

  9. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

随机推荐

  1. js在一个div里面移动其子div

    var ChildDiv = $("#cid"); var width = 0; //鼠标点击子div的地方和子div的左边边距距离 var height = 0; //鼠标点击子 ...

  2. Angular4中常用管道

    通常我们需要使用管道实现对数据的格式化,Angular4中的管道和之前有了一些变化,下面说一些常用的管道. 一.大小写转换管道 uppercase将字符串转换为大写 lowercase将字符串转换为小 ...

  3. 2017.12.19 Java包的静态导入import static和import的区别

    import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com-..ClassName;而静态导入是这样:import static com-..ClassN ...

  4. 设置meta标签 清除页面缓存,如:<meta http-equiv="Cache-Control" content="no-cache"/>

    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" ...

  5. kubernetes-服务发现service(九)

    service •防止Pod失联    •定义一组Pod的访问策略    •支持ClusterIP,NodePort以及LoadBalancer三种类型    •Service的底层实现主要有ipta ...

  6. 踩坑日志!viser-ng的使用

    在ng-alian项目中使用viser图表库,在app.module中引用了viser-ng,然而,在具体的html项目中使用<v-chart>会报错,提示v-chart不是一个angul ...

  7. MySQL的入门与使用,sqlyog对数据库,表和数据的管理

    MySQL的入门 1.到mysql官网下载. 2.安装mysql软件(一定要放到英文路径下) 3.使用 验证是否成功 将mySQL的bin路径添加到系统环境变量Path中 打开dos命令窗口 Wind ...

  8. C#的接口基础教程之七 覆盖虚接口

    有时候我们需要表达一种抽象的东西,它是一些东西的概括,但我们又不能真正的看到它成为一个实体在我们眼前出现,为此面向对象的编程语言便有了抽象类的概念.C#作为一个面向对象的语言,必然也会引入抽象类这一概 ...

  9. 【解题报告】AtCoder ABC115 (附英文题目)

    ------------------------------迟到的AK---------------------------------- A - Christmas Eve Eve Eve Time ...

  10. 五、Shell 基本运算符

    Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令 ...