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)
- cut(从每一行中,仅取出需要的部分)
- grep -[vniwc] 'pattern' file(从所有行中,仅取出需要的行,pattern 部分使用正则表达式)
- grep --color=auto 'pattern' filename
- v 反匹配,列出不被匹配的行
- n 显示行号
- i 忽略大小写
- w 单词完全匹配
- c 计数匹配到的行
- 全文搜索:
grep ‘string-pattern' [path-pattern] -r
,在匹配到的所有文档内搜索string-pattern
- sed 按行进行的修改替换命令(行是基本单位)
- awk 针对每行的一部分进行的修改替换命令(行的一部分是基本单位)
- uniq 重复的行只列出一个
- wc 字符计数
- tee 单入口、双出口的管道,在需要检视中间流时很有用
- sort 按行排序
- 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为stdin,2为stderr)
>
覆盖方式的流重定向,将标准输出输出为某文档>>
添加方式的重定向,将内容添加到某文档尾部
- 输入重定向
<
以某文档作为程序的标准输入,覆盖方式。<<
添加方式的输入重定向
Linux 的目录结构(仅较重要的部分)
- /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 管理员额外安装的软件的源码
- /opt 即 optional softwares (类似于 win 的 D://Programm Files)
- /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 | 守护进程启动和停止相关的日志消息 |
- /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 时,通常有两种做法:
- 一种就是将该软体的 bin 目录添加进PATH中(这会使该 bin 目录中的所有可执行文件都被加入到 PATH,如果你不想这样,请考虑第二种方法),也就是将相关命令写入 shell 配置文件中。至于应该添加到哪里,看了上面的说明,你应该已经懂了。
举例来说,安装一个软件时,如果该软件大家都要用,就应该写入系统配置里,然后如果你基本只用 bash,写 bashrc 里更方便(修改可立即生效),否则选profile。
而若只有你个人需要该软件,肯定要放用户配置里,再考虑你是不是用其他 shell。一般来说放 bashrc 里总没问题,而放 profile 里,有时会需要手动source /etc/profile
一下才能用。 - 第二种呢,就是向PATH默认就会包含的那些目录中(例如 /usr/local/bin),添加启动脚本。(使用 python 或 shell 编写)Jetbrains 家的软件在检测到该软件的 bin 目录未添加进 PATH 时,就会提示你这么干。(idea 会向 /usr/local/bin 添加名为 idea 的 python 启动脚本)
bash 的特殊符号表
符号 | 内容 |
# | 注解符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行 |
\ | 跳脱符号:将『特殊字符或通配符』还原成一般字符 |
| | 管线 (pipe):分隔两个管线命令的界定(后两节介绍); |
; | 连续指令下达分隔符号:连续性命令的界定 (注意!与管线命令并不相同) |
~ | 用户的家目录 |
$ | 取用变量前置字符:亦即是变量之前需要加的变量取代值 |
& | 工作控制 (job control):将指令变成后台工作 |
! | 逻辑运算意义上的『非』 not 的意思! |
/ | 目录符号:路径分隔的符号 |
>, >> | 数据流重导向:输出导向,分别是『取代』与『累加』 |
<, << | 数据流重导向:输入导向 (这两个留待下节介绍) |
' ' | 单引号,不具有变量置换的功能 ($ 变为纯文本) |
" " | 具有变量置换的功能! ($ 可保留相关功能) |
` ` | 两个『 ` 』中间为可以先运行的指令,亦可使用 $( ) |
( ) | 在中间为子 shell 的起始与结束 |
{ } | 在中间为命令区块的组合! |
系统监控常用命令:
- htop — 系统进程监控(需要安装,此外 linux 自带 top 命令)
- iotop — 磁盘IO监控,有总的IO统计,和分进程的IO统计,风格类似 top
- nmon — CPU/Disk IO/Network IO 多功能监控工具
- at(atd), crontab(crond) —定时任务
线程管理
- job: ctrl +z, jobs, fg, bg, kill (job 是所在bash的子任务,不一定正在运行)
- process: ps [aux, axjf, -lA]
- top/htop, pstree
- kill, killall (整个相关程序组)
零碎
- default terminal:tty1/tty6 (ctrl+)alt+f[1-6]
- parted 分区工具
- alias/unalias
脱离当前的 shell,在后台工作。(简便的“服务”)
nohup python xxx.py &
上面的命令使 xxx.py
在后台运行,即使当前 shell 被关闭,该程序仍然不会被影响。而 std 被定向到运行目录下的 nohup.out
文件(默认行为)。
查看系统信息
uname --all
:查看 linux 内核信息cat /etc/system-release
和cat /etc/os-release
:查看系统的发行版信息- df -h:查看系统中文件的使用情况
- du -sh *:查看当前目录下各个文件及目录占用空间大小
- 全文搜索:
grep ‘string-pattern' [path-pattern] -r
,在匹配到的所有文档内搜索string-pattern
- 全文搜索并替换:sed -i "s/pattern_str/replace_str/g" `grep "key_pattern" 'path_pattern' -r`
- 文件名搜索并替换:sed -i "s/pattern_str/replace_str/g" `find . -name "pattern"`
- 批量转换大小写: 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的更多相关文章
- Linux的帮助文档命令
Linux的帮助文档命令 1.man page man是manual(操作手册)的简写,使用方式: man [指令] man date 在显示的内容中查找内容: / + 搜索你的关键字 上下左右键来查 ...
- 500 多个 Linux 命令文档搜索
500 多个 Linux 命令文档搜索 搜索界面:https://wangchujiang.com/linux-command/ 源码:https://github.com/jaywcjlove/li ...
- Linux基础命令小结(超全!!)
Linux目录结构 1.bin 存放经常使用的指令比如ll,cp 2.sbin 系统管理员使用的系统管理指令 3.home 存放普通用户的住目录 4.root 系统管理员的用户主目录 5.boot 存 ...
- 常用的linux基础命令
常用的linux基础命令 1.ls 显示目录属性 -l:(也可以简写成ll),列表显示权限等属性 -a:显示所有文件包括隐藏文件等 -d:只列出目录本身 2.chgrp 改变档案所属群组 eg:chg ...
- Linux——基础命令用法(上)
一.Linux基础命令 1.Linux命令行的格式 命令行的格式为:用户名+主机名+当前工作目录 输入内容的命令格式为:命令 [-短选项/--长选项] [参数] [root@localhost ~]# ...
- 第四节,Linux基础命令
第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令 ...
- 【Python之路】第一篇--Linux基础命令
pwd 命令 查看”当前工作目录“的完整路径 pwd -P # 显示出实际路径,而非使用连接(link)路径:pwd显示的是连接路径 . 表示当前目录 .. 表示上级目录 / 表示根目录 ls ...
- Linux基础命令-文件与目录
Linux基础命令-文件与目录 参考:<鸟哥linux私房菜>五-七章,17/12/5复习,18/01/15复习 文件权限 rwx421:用户,用户组,其他 umask查看默认权限:000 ...
- [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...
随机推荐
- js在一个div里面移动其子div
var ChildDiv = $("#cid"); var width = 0; //鼠标点击子div的地方和子div的左边边距距离 var height = 0; //鼠标点击子 ...
- Angular4中常用管道
通常我们需要使用管道实现对数据的格式化,Angular4中的管道和之前有了一些变化,下面说一些常用的管道. 一.大小写转换管道 uppercase将字符串转换为大写 lowercase将字符串转换为小 ...
- 2017.12.19 Java包的静态导入import static和import的区别
import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com-..ClassName;而静态导入是这样:import static com-..ClassN ...
- 设置meta标签 清除页面缓存,如:<meta http-equiv="Cache-Control" content="no-cache"/>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" ...
- kubernetes-服务发现service(九)
service •防止Pod失联 •定义一组Pod的访问策略 •支持ClusterIP,NodePort以及LoadBalancer三种类型 •Service的底层实现主要有ipta ...
- 踩坑日志!viser-ng的使用
在ng-alian项目中使用viser图表库,在app.module中引用了viser-ng,然而,在具体的html项目中使用<v-chart>会报错,提示v-chart不是一个angul ...
- MySQL的入门与使用,sqlyog对数据库,表和数据的管理
MySQL的入门 1.到mysql官网下载. 2.安装mysql软件(一定要放到英文路径下) 3.使用 验证是否成功 将mySQL的bin路径添加到系统环境变量Path中 打开dos命令窗口 Wind ...
- C#的接口基础教程之七 覆盖虚接口
有时候我们需要表达一种抽象的东西,它是一些东西的概括,但我们又不能真正的看到它成为一个实体在我们眼前出现,为此面向对象的编程语言便有了抽象类的概念.C#作为一个面向对象的语言,必然也会引入抽象类这一概 ...
- 【解题报告】AtCoder ABC115 (附英文题目)
------------------------------迟到的AK---------------------------------- A - Christmas Eve Eve Eve Time ...
- 五、Shell 基本运算符
Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令 ...