《Linux命令行与shell脚本编程大全》读书小结,熟悉一下常用的命令行操作。书籍比较基础,对熟悉Linux命令行的人来说参考意义不大。主要记录下书中提到的、没提到的常用的命令。
基础操作
- . 代表当前目录
- .. 代表父级目录
- ~ 代表根目录 表名当前工作目录位于用户home目录之下
- man <directive> 可查看指令可使用的参数手册
tab
键自动补全文件名- cd 切换目录
- linux 中的文件路径全部采用正斜线
/
,windows中的路径都是反斜线\
而且带盘符 - ls 列出当前路径下的所有文件
- -F 在显示子目录的时候在它的文件名之后加上一个斜线(“/”)字符
- -F -R 遍历(递归)出当前目录下的子文件夹的所有内容(可以缩写成 ls -FR )
- -a 列出所有文件,包括隐藏文件
- -l 列出文件的所有信息
- pwd 查看当前所在位置的全路径
- sudo 以 root 用户身份运行命令
文件基础操作
- open <fileName> 用默认程序打开文件
- open
–args <参数> 用默认参数打开某个App
- open
- touch <fileName> 创建一个文件 (不可在不存在的目录下新建文件)
- mkdir <directory> 创建一个文件夹
- -p 创建多个层级的文件夹
- rmdir <directory> 只删除空目录
- 在非空目录下使用 rm -r 命令
- cp <fileName> <targetDirectory/fileName> 复制文件到目标文件夹/文件名
- -i 强制 shell 询问是否覆盖同名文件
- scp <fileName> <root@targetPath> 远程拷贝文件 可以跨服务器
- mv <fileName> <directory/fileName> 用来 移动/重命名 文件
- -i 强制 shell 询问是否覆盖同名文件
- rm <fileName> 删除文件/文件夹中的所有内容
- -i 强制 shell 询问是否删除文件
- -f 强制删除,没有警告信息也没有声音提示
- -r 递归删除目录及目录内所有文件
- 注意:Linux 中没有回收站或垃圾箱,文件一旦删除,就无法再找回
- ls -l <fileName> 查看文件权限
- chmod value <fileName> 更改文件权限
- 权限描述顺序依次是:Owner(User)、Group、Other
- r=读取属性 //值=4
- w=写入属性 //值=2
- x=执行属性 //值=1
- chown(选项)(参数) 更改文件夹所有者和所属组
- chown -R user:group .git 将.git文件夹的权限设置为 group 下的 user
- 获取文件路径:直接将文件拖入命令行即可
文件内容操作
- file <fileName/directoryName> 查看文件类型信息
- du <fileName/directoryName> 用来查看文件或目录所占用的磁盘空间的大小
- -h 以易于阅读的方式展示
- -a 显示目录及其下子目录和文件占用的磁盘空间大小
- -s 只展示当前目录占用磁盘空间大小
- cat/more/less <fileName> 查看整个文件内容
- cat 一次性加载完所有文件内容
- more 一次显示一屏文本
- less 一次显示一屏文本 可以上下页翻建
- tail/head <fileName> 查看部分文件内容
- tail 默认展示文件最后10行的效果
- -n 2 只显示文件最后两行
- -f 允许其他进程使用该文件时查看该文件的内容,tail会保持活跃状态,并不断显示添加到文件中的内容。(可用来实时监测系统日志)
- head 默认展示文件前10行内容
- 不支持 -f 属性
- tail 默认展示文件最后10行的效果
- grep match_pattern <fileName> 强大的文本搜索工具,可以使用正则表达式搜索文本,并显示出匹配的行数
- sed -i ‘s/被替换的内容/要替换的内容/g’ file -i 表示直接修改并保存
- 使用 sed 命令,报错
invalid command code
,是因为 -i 原地替换是危险行为,需要指明一个备份的扩展名才可以,若给了空的扩展名,则不会备份源文件。 - 如 sed -i ‘’ ‘s/被替换的内容/要替换的内容/g’ file
- 使用 sed 命令,报错
- ls -> xxx.txt 将命令输出的内容保存为文件
监控进程
- ps 显示进程信息(瞬间占用情况)
- top 显示进程信息(实时占用情况)
- lsof 查看进程打开的文件
- lsof -i:4000 查看4000端口占用情况
- kill [PID] 杀死对应进程
网络情况
- ping <ip> 测试主机之间的连通性(不会自动结束,需要手动 ctrl + c 强制退出)
- dig <url> 域名查询工具,可以用来测试域名系统工作是否正常
- nsloopup <url> 域名查询工具,查询 DNS 相关信息
变量
环境变量
- printenv/env 默认输出所有环境变量(全局)
- printenv JAVA_HOME 输出全局设置的JAVA SDK位置
- env $JAVA_HOME
- echo $JAVA_HOME
- echo $variableName 输出变量 ($用来表名它是个变量)
- set 输出所有环境变量(全局和局部)
- $HOME 表示的用户的主目录,与波浪线
~
作用一样
普通变量
声明时直接声明即可使用 variable=XXX
,变量名区分大小写,但需要注意的是 赋值时,变量名、等号和值之间没有空格 否则会报错 command not found
。
常用的书写习惯是 所有的环境变量名均使用大写字母,若是自己创建的局部变量或是shell脚本,则用小写字母,变量名区分大小写。
vim 操作
- vim <fileName> 以 vim 编辑器的方式查看当前文件
- 按
I
对文件进行 INSERT 操作 - 按
esc
退出当前编辑模式 - 输入
:
切换到底线命令模式,可以在最底行输入其他命令 - 输入
wq
,保存并退出;输入!q
,不保存直接退出 - 输入
ggdG
,删除当前全部内容;gg
为跳转到文件首行;dG
为删除光标所在行以及其下所有行的内容 - .swp 文件: 非正常关闭的 vim 编辑器会生成一个 .swp 文件
杂项
大小写转换
- echo $VAR_NAME | tr ‘[:upper:]’ ‘[:lower:]’
- echo $VAR_NAME | tr ‘[A-Z]’ ‘[a-z]’
其他
- alias 可用来查看当前可用的别名(内建命令)
- alias 新的命令=’原命令 -选项/参数’ 用来定义命令别名
- sh <fileName.sh> 执行shell文件
- .xxxrc 可以看做是xxx启动运行时的配置文件
- 例如 .zshrc 就是 zsh 运行前要执行配置文件
- source <fileName> 或者 . <fileName> (bash内部命令) 加载文件
- 文件\包查找
- which <fileName> 查找该包编译器所在位置
- whereis <fileName> 搜索更大范围的系统目录并输出所有包含的路径
- find <fileName> 查找系统是否安装了某个软件包
代理
- 参考
- 若想要在当前终端中生效,直接输入
export http_proxy='http://ip_address:port'
即可,注意 ip 和端口号是本机的 ip + port; - 想要持久化全局生效的话,可以在 .zhsrc 中配置上述命令
常用的配置文件地址
- Host 文件 /etc/hosts
- 配置的 SSH Key: cat ~/.ssh/id_rsa.pub
常见文件颜色
- 白色:表示普通文件
- 蓝色:表示目录
- 绿色:表示可执行文件
- 红色:表示压缩文件
- 浅蓝色:链接文件
- 红色闪烁:表示链接的文件有问题
- 黄色:表示设备文件
- 灰色:表示其他文件
插件
- homebrew 包管理器
- brew install <packageName> 安装插件
- brew list 查看电脑安装了哪些插件
- 注:每次下载包之前都会进行 brew 更新检查,速度很慢,按一次
Ctrl+C
跳过更新 - 官网上的 github 源安装总是会 443 connect timeout,推荐使用国内的镜像安装:
1
bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- wget 下载网页常用的工具
- curl 是用来请求 Web 服务器的命令行工具,类似于 POSTMAN,它的名字就是客户端(client)的 URL 工具的意思。curl 支持的通信协议有 FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP 和 RTSP。curl 还支持 SSL 认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。
- curl <url> 直接返回 url 请求结果
-A/--user-agent <string\>
设置用户代理发送给服务器-D/--dump-header <file\>
把 header 信息写入到该文件中-O/--output <file\>
把输出写到该文件中-#/--progress-bar
进度条显示当前传送状态- 详细信息
- 需要注意的是,做了反爬措施的网站在直接 curl 请求的时候,结果可能不如预期
- curl <url> 直接返回 url 请求结果
- tree 以树状图形式展示目录及其子文件
- tree <directory> -J 以 json 形式展示文件
- tig 将 git 命令行可视化
其他参考: