## 什么是 Shell Shell 是一种命令行解释器,用于接收用户输入的命令并将其传递给操作系统内核执行,在 Linux 系统中,Shell 是一个基本组件,用于与内核交互。虽然 Linux 内核负责管理硬件资源和系统核心功能,但用户通常通过 Shell 来与系统互动。 ## Shell 有哪些类型 - **Bash(Bourne Again Shell)**:最流行的 Shell,几乎是所有 Linux 发行版的默认 Shell。 - **Zsh(Z Shell)**:功能强大且可定制性高,许多人认为它比 Bash 更好用。 - **Fish(Friendly Interactive Shell)**:强调用户友好和易用性。 - **Csh(C Shell)和 Tcsh**:类似于 C 语言的语法,Tcsh 是 Csh 的增强版本。 - **Ksh(Korn Shell)**:兼具 Bash 和 Csh 的特性。 ### Bash Bash 是大多数 Linux 发行版的默认 Shell,包括 Ubuntu。用户在 Ubuntu 中打开终端时,默认就是进入了 Bash 环境。 #### 编写 bash 代码 1. 创建 `myscript.sh` 文件,保存如下内容 ```Bash #!/bin/bash VAR="world" echo "Hello $VAR!" # => Hello world! ``` 2. 修改为可执行权限 ```Shell $ chmod +x myscript.sh ``` 3. 执行脚本 ```Shell $ bash myscript.sh ``` ### Zsh Zsh(Z Shell)是一个类似于 Bash 的命令行解释器,用于 Unix 和类 Unix 操作系统。它提供了许多改进的特性,包括主题和插件支持,使得用户能够高度定制自己的工作环境。Zsh 包含了 Bash 的许多命令和功能,同时引入了新的改进和扩展,比如更强大的命令行补全、拼写检查、历史记录管理和高级脚本编写功能。因其提供的高级功能和易用性,Zsh 被许多高级用户和开发者作为首选的 shell 使用。 #### 安装 Zsh ```Shell $ apt install zsh -y $ zsh --version $ chsh -s $(which zsh) $ exit # 退出并重新登录shell $ # 重新登录服务器,查看默认shell是否已使用zsh $ echo $SHELL $ $SHELL --version # 查看zsh版本 ``` #### 安装 Oh My Zsh Oh My Zsh 用于管理 Zsh(Z Shell)的配置,提供大量的主题和插件,让用户可以轻松地定制和增强他们的 Zsh 环境。 ```Shell $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # 修改主题 $ vim ~/.zshrc # >>> ZSH_THEME="afowler" ``` ## 常用命令 ### chmod 可以用来修改文件或目录的权限,`-R` 选项表示递归(recursive) ```Shell $ chmod -R 700 filename ``` 700这三个数字分别对应三个权限位,也可以用符号表示,常见的权限有: - rw------- (600) 只有拥有者有读写权限。 - rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。 - rwx------ (700) 只有拥有者有读、写、执行权限。 - rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。 - rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。 - rw-rw-rw- (666) 所有用户都有文件读、写权限。 所有用户都有读、写、执行权限。 ### chown 用于修改文件或目录的所有者和所属组 ```Shell $ chown -R user2:group2 dir1 ``` ### systemctl ```Shell $ systemctl status docker # 查看状态 $ systemctl start docker # 启动 $ systemctl stop docker # 停止 $ systemctl restart docker # 重启 $ systemctl enable docker # 开机自启 $ systemctl disable docker # 禁止开机自启 ``` ### find #### 查找大文件 ```shell $ find . -type f -size +800M | xargs du -hm | sort -nr ``` ### du #### 查找大目录 ```shell $ du -hm --max-depth=1 | sort -nr | head -10 ``` ### scp #### 上传 ```Shell $ scp -P <port> ./apps.tar.gz root@<ip>:~/apps.tar.gz ``` #### 下载 ```Shell $ scp -P <port> root@<ip>:~/apps.tar.gz ./apps.tar.gz ``` ### tar #### 压缩 ```Shell $ tar czvf filename.tar.gz filename ``` #### 解压 ```Shell $ tar xzvf filename.tar.gz ``` ### 使用代理 ```Shell export https_proxy="你的代理" \ export http_proxy="你的代理" ``` ## SSH SSH(Secure Shell)是一种用于在不安全的网络上安全登录和其他安全网络服务的协议。它主要用于远程登录到其他计算机和传输文件,同时保护通信安全。以下是关于 SSH 的详细介绍: ### 生成 SSH 密钥对 在生成过程中,系统会提示你输入保存密钥的位置和一个可选的密码。你可以按回车键使用默认位置(通常是 `~/.ssh/id_rsa`)并选择是否设置密码。 ```shell $ ssh-keygen -t rsa -b 4096 -C "[email protected]" ``` ### 设置 `id_rsa` 和 `id_rsa.pub` 文件权限 ```shell $ chmod 600 ~/.ssh/id_rsa $ chmod 644 ~/.ssh/id_rsa.pub $ chmod 700 ~/.ssh ``` ### SSH公钥认证登录 实现无密码登录的方法有多种,以下是常见的几种方法: #### 1. 将公钥复制到远程服务器 ```Shell $ ssh-copy-id -p <port> root@<ip> ``` #### 2. 远程服务器手动配置 ```Shell $ mkdir ~/.ssh $ vi ~/.ssh/authorized_keys $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys ``` ### 代理转发登录 ```Shell $ ssh-add ~/.ssh/id_rsa $ ssh-add -l $ ssh -A user@remote-server ``` ## UFW UFW (Uncomplicated Firewall) 是 Ubuntu 提供的一个简单易用的防火墙工具,它的命令用来管理和配置防火墙规则,基于 `iptables` 进行操作。 ```shell $ sudo ufw enable # 启用 UFW $ sudo ufw disable # 禁用 UFW $ sudo ufw status # 检查 UFW 状态 $ sudo ufw allow 22/tcp # 允许特定协议和端口的流量 $ sudo ufw delete allow 22/tcp #删除规则 $ sudo ufw reset # 重置 UFW $ sudo ufw reload # 重载 UFW 配置 $ sudo ufw allow from 192.168.1.100 # 允许某个 IP 地址的所有入站流量 $ sudo ufw allow from 192.168.1.100 to any port 22 # 允许某个 IP 地址的特定端口流量 ``` ## 参考 - https://github.com/ohmyzsh/ohmyzsh - https://github.com/ohmyzsh/ohmy`sudo ufw status verbose`zsh/ohmyzsh/wiki/Themes