开发必会的 linux & MacOS命令及命令行快捷键

文章目录


linux 和 macOS(也是就 OSX)的命令非常相似,在开发过程中会经常用到,常用获取命令帮助的方法

# 命令[command]的帮助信息,显示在当前命令行内
[command] --help

# 显示命令[command] man 帮助
man [command]

linux 风格命令行工具操作快捷键

# Ctrl + c - 取消操作

# Ctrl + d - 退出内嵌终端

# Ctrl + l - 清屏

# Ctrl + R - 历史命令,可以查找近期的命令,重复近期的命令

# Ctrl + A - 光标移到行首

# Ctrl + E - 光标移到行尾

# Ctrl + W - 清除光标之前一个单词

# Ctrl + K - 清除光标到行尾的字符

# Ctrl + T - 交换光标前两个字符

# Ctrl + V - 输入控制字符 如Ctrl+v ,会输入^M

# Ctrl + F - 光标后移一个字符

# Ctrl + B - 光标前移一个字符

# Ctrl + H - 删除光标前一个字符

# Ctrl + C - 撤消当前命令行的编辑, 另起一行

# Ctrl + S - 暂时冻结当前shell的输入

# Ctrl + Q - 解冻结当前shell的输入

# Esc+f - 光标后移一个单词

# Esc+b - 光标前移个单词

# Esc+N+[单词] - 光标输入N个单词[单词],N为不可省略

# Esc-c - 使下一个单词首字母大写, 同时光标前进一个单词, 如光标停留在单词的某个字母上则为这个光标位置

# Esc-u - 使下一个单词所有字母变大写, 同时光标前进一个单词, 同上

# Esc-l 同 Esc-u, 但使之全变为小写

命令行复制粘贴快捷键

  • 在控制台下(也就是本台电脑的图形化界面下的,那个命令行)

复制命令:Ctrl + Shift + C 组合键.
粘贴命令:Ctrl + Shift + V 组合键.

  • 在终端下 :(这个是远程登陆的命令行,也就是你要操作的电脑在远程)

一般用的是这个但是这个insert键,如果是笔记本的话必须借助功能件组合才能打出来,我电脑是联想的功能键是Fn + key

复制命令:Ctrl + Insert 组合键 或 用鼠标选中即是复制
粘贴命令:Shift + Insert 组合键 或 单击鼠标滚轮即为粘贴

使用超级管理员身份

# 使用超级管理员身份执行命令 [command]
sudo [command]

# 更改shell环境参量为目标用户,而你没指名目标所以默认了root,并且把环境参量也换成root的了,和root登录shell一样
sudo -i

命令行窗口

交互式窗口操作

比如上文提到的 man 命令就是一个交互式窗口,常用操作

  • q 退出交互式窗口
  • gg 到文档头部
  • G 到文档尾部
  • ctrl + e 向下翻页
  • ctrl + y 向上翻页
  • / 搜索

其实就是 vi 的 窗口操作

清空历史信息

clear
# 快捷键 ctrl + l

字符串和换行

linux 风格中,命令行是以字符串方式进行组织的,那么就有特殊的规则

  • \ 为转义符,对于 \ 等符号,有转义效果,当然如果需要元素值来区分,可以直接使用 man ascii 中查询到的原始值,比如 \044\x24 都是 $
  • "" 为普通字符串,符号中间的内容会以字符串形式组织,并且支持 ${} 的占位符
  • '' 为原始字符串,符号中间的内容会以字符串原始形式组织,也就是说不支持占位符,转义符

系统类

查看负载

查看CPU的负载

Load Average是指CPU的Load, 在一段时间内CPU正在处理及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息

平均负载是指上一分钟同时处于就绪状态的平均进程数。

在CPU中可以理解为CPU可以并行处理的任务数量,就是CPU个数X核数

  • 如果 CPU Load等于CPU个数乘以核数 ,那么就说CPU正好满负载,再多一点,可能就要出问题
  • 那要保证性能的话,最好要 小于 CPU个数 * 核数 * 0.7

Load Average会有3个状态平均值,分别是1分钟、5分钟和15分钟平均Load

  • 如果1分钟平均出现大于CPU个数X核数的情况,还不需要担心
  • 如果5分钟的平均也是这样,那就要警惕
  • 15分钟的平均也是这样,就要分析哪里出现问题,防范未然

使用 top 命令 查看

top -16:22:45 up 15 days, 18:46, 2 users, load average: 0.14, 0.15, 0.07

观察 load average 为平均负载

内存负载

使用命令 free -h

total used free shared buffers cached

注意 free 的数量,不够将导致主机卡死

查看磁盘负载

一般使用 df -h

Filesystem Size Used Avail Use% Mounted on

注意 Use% 百分比

当前时间、系统启动时间、当前在线⼈数、系统平均负载

uptime

命令显示统计cpu和设备IO信息

iostat

查看内存占用

free -h

# 如果是mac,可以编写自定义命令来达到类似效果
alias free='top -l 1 | head -n 10 | grep PhysMem'

以(-/+ buffers/cache)的free和used为主

显示当前系统虚拟内存的统计情况

vmstat

查看磁盘

# 磁盘信息
fdisk -l

# 磁盘占用
df -h

# 磁盘性能
iostat -x 10

查看内核/操作系统/CPU信息

uname -a
# or
cat /proc/version

查看操作系统版本

head -n 1 /etc/issue

# macOS 查看 OS 版本
sw_vers

查看CPU信息

cat /proc/cpuinfo

# 总核数 = 物理CPU个数 * 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
# 查看逻辑CPU的个数 影响程序运行

cat /proc/cpuinfo| grep "processor"| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

文件类

文件目录

  • ~ 表示为 用户的 home 目录,也就是 echo ${HOME}

查找文件

快速查找


# 根据名称查找/目录下的[file full name]文件
find / -name [file full name]

# 递归查找 [.] 也就是所有 后缀为 [suffix] 的文件
find . -name "*.[suffix]"

# 查找当前目录中的所有 [jar]文件
ls -l | grep '[jar]'

递归查找

# 递归查找所有文件内容中,前提这是一个可以被读取并识别的,包含[search key]的 xml 文件
find . -name "*.xml" |xargs grep "[search key]"

内容查找

# 查找所有的包含 [context] 后缀为 [suffix] 的文件
grep -H '[context]' *.[suffix]

# 显示所有以 [head] 开头的文件中包含 [test]的行
grep '[test]' [head]*

# 显示在aa,bb,cc文件中匹配[context]的行
grep '[context]' aa bb cc

# 显示aa中所有包含每个字符串至少有[number]个连续小写字符的字符串的行
grep '[a-z]\{[number]\}' aa

查看文件头[number]行

日志查看很好记忆,linux的日志工具是一只猫 cat ,cat 命令可以直接显示内容

当你需要知道日志头部时,就使用命令猫头 head, 那么日志末尾就是 猫尾 tail

# [filename] 文件名
head -n [number] [filename]

查看文件尾[number]行

# [filename] 文件名
tail -n [number] [filename]

查看日志类型文件

# 日志文件 [logfile.log]
tail -f [logfile.log]

# 这个命令会自动显示新增内容,屏幕只显示10行内容的(可设置)[linenumber]
tail -f -n [linenumber] [logfile.log]

# 滚动观察显示显示日志 watch 还可以观察其它进程的 stdout stderr 输出
watch -d -n [linenumber] cat [logfile.log]

文件操作

显示当前目录

pwd

显示当前目录文件占用空间

# -h 标识为人类好看的结果 -d 标识递归层数
du -h -d 1

# -c 最终还会返回统计的所有文件的数量
du -h -c

# 找出当前目录下面的文件多少个
find . -type f | wc -l

以树状图列出目录的内容

# 以树状图显示目录 [folder] 内容,如果没有请安装 tree 工具
tree [folder]

# macOS 请安装 tree 或者使用下面的命令
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

# 递归变量文件夹内的结构,忽略 [build] 的子文件夹,并输出到文件 FileTree.md
tree -d -I [build] > FileTree.md

# 如果想忽略更多文件夹这样写
tree -d -I "build|gradle|output"

文件权限

# [file]的权限进行 options 操作
chmod [options] [file]

# 第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限
# 4,执行时设置用户ID
# 2,执行时设置用户组ID
# 1,设置粘着位

# 如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限
# -rwxrwxrwx,r表示读、w表示写、x表示可执行 options 为777
  • Option
optionFull optionDesc
-c–changes只输出被改变文件的信息
-f–silent --quiet当chmod不能改变文件模式时,不通知文件的用户
-R–recursive可递归遍历子目录,把修改应到目录下所有文件和子目录
-v–verbose无论修改是否成功,输出每个文件的信息
–reference=filename参照filename的权限来设置权限
  • Option Code
codeDesc
+增加权限
-删除权限
=重新分配权限
  • Who
whoDesc
u用户
g
o其它
a所有用户(默认)
  • permission
PermisonDesc
r
w
x执行
s设置用户(或组)的ID号
t设置粘着位(sticky bit),防止文件或目录被非属主删除
u用户的当前权限
g组的当前权限
o其他用户的当前权限
  • 实例
DomeDesc
chmod 751 file给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
chmod u=rwx,g=rx,o=x file上例的另一种形式
chmod u+x file给file的属主增加执行权限
chmod 4755设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限
chmod =r file为所有用户分配读权限
chmod 444 file同上
chmod a-wx,a+r file同上
chmod -R u+r directory递归地给directory目录下所有文件和子目录的属主分配读的权限

显示当前文件夹详情

ls -al

复制文件

# 复制文件 [source] 到 [dest]
cp [source] [dest]

# 递归复制整个文件夹 [sourceFolder] 到 [targetFolder]
cp -R [sourceFolder] [targetFolder]
# 这里不常用 -r 因为 -r 复制目的不同,覆盖范围不同,也不识别文件后缀

# 远程拷贝 [sourecFile] 到 [romoteUserName@remoteIp:remotePath]
scp [sourecFile] [romoteUserName@remoteIp:remotePath]
# 远程拷贝目录 [sourecDir] 到 [romoteUserName@remoteIp:remotePath]
scp -r [sourecDir] [romoteUserName@remoteIp:remotePath]

# 排除文件的当前文件拷贝,比如 ssh 文件夹只拷贝配置文件
ls . | grep -v -E 'authorized_keys|known_hosts' | xargs -t -I{} cp {} ~/.ssh/
# xargs -t 打印内容,去掉\n之后的字符串
# xargs -I : 后面定义占位符,上例子是{} ,后面命令行中可以多次使用占位符

移动文件

# 移动文件 [movefile] 到 [targetFolder]
mv [movefile] [targetFolder]

重命名


# rename [oldNameFile] 重命名为 [newNameFile]
rename [oldNameFile] [newNameFile]

# rename 正则表达式做批量命令
# 先man rename 在手册页的最后一行看正则的版本,然后使用对应的正则表达式,如Perl版本
rename 's/^oldName/newName/' oldName.xx

# 或者 C 的正则版本
rename 'oldNmae' 'newName' oldName.xx

# 将 [oldNameFile] 重命名为 [newNameFile] 不建议使用,会导致误操作
mv [oldNameFile] [newNameFile]

压缩文件

# 保存为 [tarFileName.tar] , 从[fromFolder]压缩到[targetFolder]
tar -czf [tarFileName.tar] [fromFolder] [targetFolder]

# 更常用的是指定目录,打包称一个 gz 的压缩包
tar -zcvf [tarFileName.tar.gz] -C [sourceFolder] "."

# 列出压缩文件 [tarFileName] 的内容文件列表
tar -tzf [tarFileName.tar.gz]

# 压缩 文件
zip [zipOutName] [File]
# 压缩文件夹
zip -r [zipOutName] [Folder]

解压文件

# 解压 [tarFileName.tar.gz] 的文件
tar -xvzf [tarFileName.tar.gz]

# zip解压
unzip [zipFile] -d [outFolder]

对于.rar

要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux 不是免费的;

可从 http://www.rarsoft.com/download.htm 下载 RARfor Linux 3.2.0,然后安装:

tar -xzpvf rarlinux-3.2.0.tar.gz
cd rar
make

这样就安装好了,安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar 是解压程序

删除文件大小为零的文件

find ./ -size 0 | xargs rm -f &

目录操作

创建目录

# 创建 [newfolder] 目录
mkdir [newfolder]

删除目录

# 删除空目录 [emptyFolder]
rmdir [emptyFolder]

# 安全删除目录 [folder] 中所有内容
rm -r [folder]

# 强制递归删除目录 [folder] 中所有内容 这样容易误删除
rm -rf [folder]

网络类

查看端口占用情况

# 查看端口号 [port] 的使用情况
netstat -tln | grep [port]

查看端口属于哪个程序

# 查看端口号 [port] 属于哪个程序
lsof -i :[port]

网络检测

# ping 命令没有需要安装
sudo apt install -y net-tools

# 检查网卡工作状态,网卡回环必须可以通
ping 127.0.0.1

# 检查网络 [host or ip address]
ping [host or ip address]

# 路由跟踪 到 [host] 的路由
traceroute [host]

# 检查目标 tcp 端口是否开启
nc -zv [host or ip] [port]

# 检查目标 udp 端口是否开启
nc -zuv [host or ip] [port]

进程类

查看进程

# 查看所有有关[progress name]的进程
ps –ef | grep [progress name]

# 查看所有进程
ps aux
# 查看 [progress] 进程

ps aux |grep [progress]

命令显⽰⼀个进程pid的内存映射

pmap -x [pid]

查询指定用户或UID所运行的所有京城的pid和进程名

pgrep -lu [username]

查看Java运行进程

# 查看java进程
jps

# 查看java进程号
jps -q

# java 应用程序main class的完整package名或者应用程序的jar文件完整路径名
jps -l

# 查看java进程号 输出传递给main 方法的参数
jps -m

# 查看java进程传递给JVM的参数
jps -v

终止 进程

# 终止线程号为 [pid] 的进程 这个方式是通过 SIGTERM 的信号 优雅的退出
# 大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后在停止
# 如果程序正在等待IO,可能就不会立马做出相应,或者等待其他项目的响应
kill -15 [pid]

# 终止线程号为 [pid] 的进程 这个方式是通过 SIGKILL 的信号 暴力退出
# 程序要求接收到 SIGKILL 信号立即结束运行,不能被阻塞或者忽略
# 这个方式会带来一些副作用,数据丢失或者终端无法恢复到正常状态
kill -9 [pid]

用户类

显示用户

# 显示当前用户
whoami

切换用户

# 切换到 username
su -username

配置 信息类

配置 shell

查看当前 shell

echo $SHELL

查看当前可用 shell

cat /etc/shells

设置 zsh 作为 shell,设置后在新的 session 生效

chsh -s $(which zsh)
  • 切换某个用户使用的shell
sudo usermod -s /bin/bash [userName]

查看系统版本

more /proc/version

打印信息


# 打印java home环境变量的值
echo $JAVA_HOME
# 读取环境变量更你使用的 shell 有关
# 如果是 bash 是读取 ~/.bashrc 中
# 如果是 zsh 是读取 ~/.zshrc 中

# 读取当前 ${PATH} 的环境变量 并替换分隔符 : 为 换行 \n
echo -e ${PATH//:/'\n'}

远程管理

远程登录

# 使用ssh登录 [user] [HostName]
ssh [user]@[HostName]

# ssh 可以配置在 $HOME/.ssh/config 中,使用 Host 别名来访问
# 另外配置在 $HOME/.ssh/config 中,可以使用 密钥来访问,增加安全性
# 为了安全,很多服务器都禁止用户密码方式访问,只允许 密钥来访问

维护类

磁盘信息

# 查看当前文件和磁盘的大小包括子文件夹
du -sh

# 查看指定文件夹下所有文件大小
du -h [folder]

# 查看磁盘空间大小
df -h

# linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息
df -hl

日志维护

# 完全删除日志
sudo /dev/null > /var/log/**.log

# 30天之前的旧日志
sudo find /var/log/ -type f -mtime +30 -exec rm -f {} \;

设置系统日志大小

长期运行,通过 systemd 日志系统记录的日志 会产生非常多,导致磁盘满而停止服务,可以全局设置日志的大小

# 最大 500M
sudo journalctl --vacuum-size=500M
# keep one week
sudo journalctl --vacuum-time=1w

运行服务

systemctl 常驻运行

新建文件 /lib/systemd/system/[severName].service 内容

[Unit]
Description=fraps client
After=network-online.target network.target syslog.target
Wants=network.target

[Service]
Type=simple
# start path need change
ExecStart=/path/exec -c /path/exec.ini

[Install]
WantedBy=multi-user.target

After 通过命令 sudo systemctl list-unit-files --type=target | grep net 获取
查看依赖使用命令 sudo systemctl list-dependencies [target]

# 启动测试
sudo systemctl start [severName]
# 停止
sudo systemctl stop [severName]
# 测试通过打开自启动
sudo systemctl enable [severName]

# 查看应用日志
sudo systemctl status [severName]
# 修改配置后需要 这样生效
sudo systemctl daemon-reload
sudo systemctl restart [severName]

运行程序查看并保存日志

既想把程序输出保存到文件中,又想在屏幕上看到输出内容
tee 的作用是将一份标准输入多重定向,一份重定向到标准输出 /dev/stdout ,然后还将标准输入重定向到每个文件 FILE 中

# [command] 为完整执行命令
# [file.log] 为保存的输出
[command] | tee [file.log]
# 默认是覆盖写入 可以使用 -a 选项来追加写入
[command] | tee -a [file.log]
# 写入多个文件
[command] | tee [file.log] [file.log.1]

运行不挂断驻守服务

不建议使用 nohup 方式,这个方式有比较麻烦的维护成本

nohup 函数在运行的命令前面即可

# [command] 为完整执行命令
# 行末的 & 为在在后台运行
nohup [command] &

# 如果需要把 [command] 命令的输出到 文件 [log] 需要
nohup [command] >> [log] 2>&1 &
# 2>&1 是让 标准输出 2 也到 标准输出 1

停止需要获取运行的pid, 使用kill -15 [pid]

交互式使用 shell 脚本

在非常复杂的 shell 脚本使用时,如果想知道更多信息,需要用到 script 命令

# [shell] 调试的目标脚本
# [log] 调试的会话日志
script -c [shell] [log]

终端会话录制

# shell.time 对时间线的记录
# shell.his 对操作命令等内容的记录
script -t 2>shell.time -a shell.his
# ctrl+d 或者 exit 结束

回放录制

scriptreplay shell.time shell.his

记录用户的操作

script -t -f -q 2>$USER.time -a $USER.his

终端演示执行过程

  • 需要演示的终端 demo
# 执行
script -f demo
# 后面的执行过程都会演示在 scriptreplay 的终端中
  • 演示的终端执行
scriptreplay -f demo
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MacOS中,窗口最小化的快捷键是Command M。使用这个快捷键可以快速将当前窗口最小化。如果想最小化当前应用程序的所有窗口,可以使用快捷键Command Option M。另外,还可以通过在系统偏好设置中勾选"连按窗口的标题栏以将窗口最小化",然后双击窗口标题栏来最小化当前窗口。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【MacOS】最小化当前窗口的快捷键](https://blog.csdn.net/weixin_44413191/article/details/108315307)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [macOS 常用键盘快捷键大全](https://blog.csdn.net/Guzarish/article/details/124507706)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值