显示文件的头部内容,如果不指定参数默认显示 10 行
# 显示前 10 行内容head README.md# 或者显示多个文件head README.md package.json# -n 指定显示行数head -n 100 README.md
显示文件的末尾部分
# 默认显示末尾10行tail README.md# -n 指定显示末尾20行tail -n 20 README.md
# 显示当前目录列表ls# 显示目录列表的详细信息ls -l# 显示指定目录ls ./src# 可读性地显示目录列表详细信息, h means human-readablels -lh# 列出所有文件包括隐藏文件ls -a# -F 可以显示类型,用以区分是文件还是目录ls -F # 后缀为 ”/“ 代表是目录,”*“ 为可执行文件,没有则为文件# -i 查看 inode 编号, 每一个文件或目录都有一个唯一的编号,这个数字由内核分配给文件系统中的每一个对象ls -i# 过滤文件列表, * 代表 0 个或多个字符, ? 代表一个字符ls READ*
显示当前路径
# pwd means pathname of the current working directorypwd
统计文件的行数、字数、字节数, 常见用于统计代码行数
# 统计行数wc -l README.md# 统计字数wc -w README.md# 统计字符数, 中文占两个字符, 英文占一个字符wc -m README.md
指定某个目录下查找文件
# 在当前目录递归搜索文件名为 README.md 文件find . -name README.md# 通过通配符进行查找, 必须用引号括着, 这里查找所有后缀为 .md 文件find . -name "*.md"find . -iname "*.md" # 忽略文件大小写# 排除文件,只要加 ! , 排除掉所有 .md 后缀的文件find . ! -name "*.md"# 根据类型进行过滤搜索# f 普通文件 d 目录find . -type f# 限定目录递归深度find . -maxdepth 3 # 最大为3个目录find . -mindepth 3 # 最小为3个目录# 查找文件大小大于 25k 文件find . -size +25k# 查找 10 天前文件 -mtime 修改时间、 -ctime 创建时间、 -atime 访问时间find . -mtime +10
# 在当前目录下创建 temp 目录mkdir temp# 创建多层目录, p means parentmkdir -p temp/temp2/temp3# 基于权限创建, m means modemkdir -m 777 temp
more README.md# 从第 10 行开始显示more +10 README.md
合并 N 个文件的列
。
并不是纵向合并, 而是横向合并。
# 1.txt 和 2.txt 合并输出paste 1.txt 2.txt# 1.txt 2.txt 合并后保存为 3.txtpaste 1.txt 2.txt > 3.txt
用于显示文件或目录的状态信息
16777220 8702541224 -rw-r--r-- 1 mac staff 0 15857 "Nov 1 13:02:02 2020" "Nov 1 13:02:02 2020" "Nov 1 13:02:02 2020" "Oct 25 18:48:15 2020" 4096 32 0 README.md
强大的文本搜索工具, 被称为 Linux 命令三剑客。
# 从 README.md 文件中搜索 linux 关键字grep "linux" README.mdgrep "linux" README.md README2.md # 多个文件搜索# 输出时高亮显示grep "linux" README.md --color# -o 只输出匹配部分grep -o "linux" README.md --color# -n 输出到匹配的行数grep -n "linux" README.md# -c 输出到匹配次数grep -c "linux" README.md# -r 递归目录文件搜索grep -r "linux" ./src# 使用 glob 风格表达式搜索egrep "[0-9]" # 等价于 grep -E "[0-9]" README.md
创建一个空文件, 如果文件存在只会修改文件的创建时间
touch README.md
sed 是一种功能强大的流式文本编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
替换操作: s 命令
替换文本中的字符串:
sed 's/book/books/' file
进入指定目录
# 进入当前 src 目录cd src# 回到上一次目录cd -# 返回上一级目录cd ..cd ../../.. # 返回多级# 进入 /root 目录cd ~cd # 或者不带任何参数# 将上一个命令的参数作为cd参数使用cd !$# 模糊匹配目录,有时目录名很长一个一个敲效率就很低# * 代表0个或多个字符, ? 代表一个字符cd READ*
删除指定目录或文件
使用此命令需要非常小心, 一但删除无法恢复
# 删除当前 1.txt 文件rm 1.txt# -i 删除前询问是否真的要删除,因为一旦删除无法恢复rm -i README.md# 这条命令比较常用, 强制删除目录或文件# -r 如果是目录递归删除, -f 强制删除 不发出任何警告rm -rf ./src
拷贝文件或目录
# 将当前 README.md 文件拷贝到上一层cp ./README.md ../README.md# -a 将原文件属性一同拷贝, 修改时间、创建时间等cp -a ./README.md ../README.md# -r 用于递归拷贝目录cp -r home ../home# -i 如果目标文件存在会询问用户是否需要覆盖cp -i README.md README.md
查看指定整个文件内容
# 查看 README.md 文件所有内容cat README.mdcat README.md README2.md # 或者一次性显示多个文件# -n 每一行显示行号cat -n README.md# -b 只给有内容的行显示行号cat -b README.md
mv 有 2 个用途:
# 将 README.md 重命名为 README-2.md, 如果 README-2.md 存在会直接覆盖。mv README.md README-2.md# 将 README.md 移动到上一层目录mv README.md ../README.md# -i 交互式操作,如果目标文件存在则进行询问是否覆盖mv -i README.md ../README.md# -f 如果出现同名直接覆盖$ mv -f 1.txt 2.txt
open 命令可在 linux / mac 具有可视化界面下进行文本编辑、打开应用程序等功能。
# 在mac下用Finder打开当前目录open .# 用默认应用程序打开文件open README.md# 用默认编辑器打开文件open -e README.md# 如果是一个URL用默认浏览器打开页面open https://github.com/MuYunyun/blog.git# 指定某个应用程序打开某个文件, 如果不指定文件默认直接打开程序open -a /Applications/Google\ Chrome.app README.md
在当前 Shell 环境中从指定文件读取和执行命令, 通常用于重新执行环境。
它有个别名 . 点操作符号。
# 等价 . ~/.bash_profilesource ~/.bash_profile
可以把它理解为编程语言中的 import
, java/python/js 都有这个,就是用来导入文件。
下面演示 source 用于 shell 脚本中
util.sh
#!/bin/bashgetName() {echo "Linux"}
main.sh
#!/bin/bash# 加载文件source ./util.sh# 这样就可以调用 util 文件中的函数了echo $(getName)
生成目录树结构, 通常用于描述项目结构。
# 递归当前目录下所有文件并生成目录树tree# 只显示目录tree -d# -I 忽略某些目录tree -I "node_modules"# 指定要递归的目录层级tree -L 3
小建议:可以使用
tree -L 3 -I "node_modules"
来输出当前项目目录结构。
将某一个文件在另外一个位置建立并产生同步的链接。当不同的 2 个目录需要同时引用某一个文件时此命令就派上用场了。
这个命令的应用场景: 比如 yarn link
理解: 文件系统博主理解: 比如在 mac 系统中装了个虚拟机, 虚拟机里面跑了另外一个 window 系统, 那此时 mac 和虚拟机里面的系统就是两个不同的文件系统。
# 默认创建硬链接,修改 README.md 内容, a.md 也会同步修改, 修改 a.md, README.md 也会同步修改ln README.md a.md# -s 创建软链接ln -s README.md a.md # 如果删除了 README.md a.md 将失效# -f 强制执行ln -f README.md ./src/a.md
查看文件类型, 比如文件、目录、二进制、符号链接等。
file README.mdREADME.md: HTML document text, UTF-8 Unicode text
全称: tape archive
选项与参数:
测试目标地址是否可连接、延迟度
# 测试 github.com 连通性, 按 ctrl + C 停止ping github.com# ping 5 次后断开ping -c 5 github.com# 每 5 秒 ping 一次ping -i 5 github.com
查找某个命令存储在哪个位置, 输出绝对路径, which 会在环境变量 $PATH 设置的目录里去查找。
注: 可以通过 echo $PATH 查看设置的目录.
which top # /usr/bin/top# 打印多个命令which ping top
将系统关机或重启操作。
# 什么参数都不加,默认会在 1 分钟后关机$ shutdown# 在将系统的服务停掉之后就重新开机$ shutdown -r now# 关闭系统并切断电源$ shutdown -h now # 立即关机, 实际上调用 init 0# 把前一个关机或重启取消掉$ shutdown -c# 设定一个时间关机,"&" 符号表示后台模式,让出 CLI$ shutdown -h 05:33 &$ shutdown +5 "5分钟后关机" # 5 分钟后关机,同时送出警告信息给登入用户:
# 当前系统运行的天数,小时,分钟 (从上次开机起计算), 当前系统登录用户数。一分钟、5分钟、15分钟平均负载, 这 3 个值不能大于 CPU 个数,如果大于了说明系统负载高,性能低。uptime # 13:25 up 2 days, 18:57, 7 users, load averages: 2.06 2.06 2.15
打印系统信息
# 不带任何参数打印当前操作系统内核名称uname # Darwin , 等价于 uname -s# 打印系统所有信息, cloud-2.local: 网络节点主机名称, x86_64: 主机的硬件架构名称uname -a # Darwin cloud-2.local 19.4.0 Darwin Kernel Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64 x86_64# 打印主机的硬件架构名称uname -m # x86_64
配置或显示系统网卡的网络参数。
# 显示所有网络参数信息ifconfig
修改文件或目录权限。
列出当前系统打开文件的工具
## 打印所有打开文件的的列表lsof# 查看指定端口被占用情况,(i means IP)lsof -i:8080
使用命令 lsof -i:8080 显示查询结果如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
使用 lsof 命令后,常常配合 kill 命令一起使用来杀死占用端口。
比如杀死占用端口的进程(PID 为 [1] 命令查看到的占用端口)命令为:
kill -9 PID
设置命令别名,用于简化较长的命令。
# 列出所有已设置的别名alias# 删除所有别名unalias -a# 设置别名alias ll='ls -l'
ps 命令涵盖命令参数三大风格
前面加单破折线
前面不加破折线
前面加双破折线
# 配合 grep 查询指定进程, -a means all, -f means fullps -af | grep nginx
结束程序,kill 命令只支持进程 id 杀死,不支持进程名称。
进程信号
信号 | 名称 | 描述 |
---|---|---|
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
15 | TERM | 尽可能终止 |
# 杀死 pid 为88 进程,不带参数默认等价 kill -15$ kill 88# 无条件终止进程,以下是等价,可以用进程名称信号$ kill -KILL 88$ kill -9 88
chsh 命令用于修改默认用户登录 shell。
修改后重新启动 Shell 即可生效(exit/logout)。
# 必须使用完整路径,不能使用shell名chsh -s /bin/zsh
查看当前 Shell
echo $SHELL # /bin/zsh
列出当前所有已安装的Shell
cat /etc/shells# /bin/bash# /bin/csh# /bin/dash# /bin/ksh# /bin/sh# /bin/tcsh# /bin/zsh
显示当前登录系统的所有用户的用户列表。
ubuntu@ubuntu:~$ usersubuntu
显示用户最近登录信息。
last# 指定显示条目数last -n 1
切换到其他用户。
# 切换到 root 身份sudo su
显示自身的用户名称
ubuntu@ubuntu:~$ whoamiubunturoot@ubuntu:/home/ubuntu# whoamiroot
curl 是一个非常强大的网络传输工具,利用 URL 规则在命令行下工作。
参数 | 描述 |
---|---|
-H | 设置请求头 |
-X | 设置 HTTP 请求方法 |
--cookie | 指定发送 cookie |
--retry | 请求重试 |
curl --help 查询 curl 后可跟随的参数信息。
apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。
# 安装一个docker软件$ apt-get install docker# 卸载软件,保留配置文件$ apt-get remove docker# 卸载软件并删除配置文件$ apt-get –purge remove docker# 更新所有已安装的软件包$ apt-get upgrade# 删除软件备份,主要用来释放空间$ apt-get clean
用于清除当前终端所有信息,本质上只是向后翻了一页,往上滚动还能看到之前的操作信息
注:效果等用于
command + K
可以完全清除终端所有操作信息。
clear