material/os/linux/command.md

456 lines
9.3 KiB
Markdown
Raw Normal View History

2025-01-10 22:29:51 +08:00
# 基础命令
> sudo
> > 配置文件/etc/sudoers 使用visudo进行编辑
+ -u # 指定用户
> pwd
> cd
> ls
> > 列出目录下所有内容
+ -F # 在文件名后加提示符 '/' '*' '@'
+ -a # 显示隐藏文件
+ -l # 列出文件信息
+ -d # 目录
+ -h # 将文件大小输出为易读的格式
+ -s # 在行首显示(大小)?
+ -i # inode
# 文件目录操作管理
> cat
> >
+ -n # 显示行号
> less
> od
> > 查看非纯文本
+ -t # 类型 a, d, f, o, x
> grep
> > 文件字符串匹配
+ -A <n> # 后续n行
+ -B <n> # 前n行
+ -n # 显示行号
+ -v # 反向选择
+ -E 'o1|o2|o3' # 多匹配
> wc
> > 统计
+ -l 行数
+ -m 字符
+ -w
> mkdir
> touch
> mv
> >
+ -i # 覆盖时警告
+ -b # 重合加~
> cp
> > copy
+ -i # 覆盖时警告
+ -b # 重合加~
+ -u # 仅复制更新
+ -v # 详细显示
+ -r # 目录
> rm
> >
+ -i # 覆盖时警告
+ -r # 目录
+ -f # 强制
> chown
> > 所有权
+ -R # 同时更改所有子目录
> chmod
> > 权限修改
+ -R # 同时更改所有子目录
```bash
SUID 4
执行二进制文件时,权限提升为文件所有者
SGID 2
在此权限下的目录进入后,有效用户组变为所有组
SBIT 1
在此权限下的文件夹里创建文件仅有root与属主有权操作
```
> file
> > 观察文件类型
+ -i 查看编码格式
+ -z 查看压缩格式
+ -b 查看文件的系统架构
+ -p 详细信息
> umark
> > 设置默认权限,默认是拿掉权限
> ln
> > 链接(硬)
+ -s # 符号链接(软)
> diff
> > 比较文件
+ -b # 忽略空格
+ -i # 忽略大小写
+ -B # 忽略空白行
> patch
> > 补丁制作
> > example
```bash
diff -Naur <oldfile> <newfile> > <file.patch> # -p[n] 拿掉路径中的/
patch -p<n> < <file.patch> # 制作
patch -p<n>-R < <file.patch> # 还原
```
2025-02-27 22:25:34 +08:00
> rsync
> > 文件同步工具,它通过比较源和目标文件的大小、时间戳等信息,只同步发生变化的部分,提高了效率
> > rsync [选项] 源文件/目录 目标文件/目录
+ -aarchive归档模式,用于完整同步
+ -vverbose详细模式显示同步过程中的详细信息。
+ -uupdate仅在目标文件不存在或源文件更新时才同步。
+ -zcompress在传输过程中压缩文件数据。
+ --delete删除目标目录中多余的文件使目标目录与源目录保持一致
+ -ersh指定远程连接时使用的工具如 ssh
+ --exclude指定排除的文件或目录模式。
+ --include指定包含的文件或目录模式。
+ -P --progress显示同步进度。
+ --bwlimit : 限速,用于单个大文件,避免占用过多带宽
+ --dry-run模拟同步操作不实际执行用于测试同步命令的效果。
> > example
1. 本地同步
rsync -avP /path/to/source/ /path/to/destination/
2. 从本地同步到远程
rsync -avzP /path/to/source/ user@remote_host:/path/to/destination/
3. 同步时删除多余文件
rsync -av --delete /path/to/source/ /path/to/destination/
4. 排除某些文件或目录
rsync -av --exclude 'temp/*' --exclude '*.log' /path/to/source/ /path/to/destination/
--exclude 'temp/*':排除 temp 目录下的所有文件。
--exclude '*.log':排除所有 .log 文件。
5. 包含某些文件或目录
rsync -av --include 'data/*' --exclude '*' /path/to/source/ /path/to/destination/
--include 'data/*':仅包含 data 目录下的文件。
--exclude '*':排除其他所有文件。
6. 模拟同步操作
rsync -av --dry-run /path/to/source/ /path/to/destination/
2025-01-10 22:29:51 +08:00
# 文件查找
> find
> > find [OPTION] [path] [expression]
+ -name [filename] # 指定文件名
+ -print # 打印结果在终端
+ -type [type] # 指定类型
+ -atime <+-n> # n天前使用的文件
+ -mtime <+-n> # n天前修改的文件
> > example
+ find /usr/bin -name zip -print
> locate
> whereis
> > 找命令文件
> which
> > 找PATH
+ -a # 全部列出
> whoami
> uname
> > 查看系统版本信息
+ -a 全部信息
# 文件压缩
> gzip
> >
+ -d # 解压
+ -l # 查看压缩效果
> bzip2
> >
+ -d # 解压
+ -l # 查看压缩效果
> xz
> >
+ -z # 压缩
+ -d # 解压
+ -l # 查看压缩效果
+ -k # 保留压缩原文件
+ -<number> # 压缩等级
+ -T <n> # 使用多个线程
+ -v # 显示详细过程
> tar
> > 文件打包
+ -c # 创建
+ -x # 解开
+ -v # 显示详细过程
+ -f <file> # 指定文件名
+ -z # 调用gzip
+ -j # 调用bzip2
+ -J # 调用xz
> > example
+ tar -cvjf shell.tar.bz2 shell/
> dd
> >
+ if # input file/device
+ of # output file/device
+ bs # one black size
+ count # *bs
# 磁盘
> mount
> > 挂载文件系统
+ -r # 只读
+ -o <loop> # 特殊设备
> > /etc/fstab 配置文件
+ auto # 开机自动挂载
+ noauto # 不自动挂载
+ ro # read only
+ rw # read and write
+ user # 任意用户可挂载
> > example
+ [设备/UUID] [挂载点] [文件系统] [参数] 0 0
> umount
> > 卸载文件系统
> df
> > 观察磁盘使用情况
> > example
+ df -hT
> sync
> smartctl
> > 查看硬盘状态参数
-a 全部参数
-H 是否正常
2025-02-27 22:25:34 +08:00
> parted
> > 磁盘分区管理工具
> > parted [OPTIONS] [DEVICES] [COMMAND]
+ -i 列出所有设备的分区信息
+ -s 非交互模式
> > 交互模式常用命令
+ print 显示当前设备的分区表
+ mklabel [gpt/msdos] 创建分区表
+ mkpart [part-type] [fs-type] [start] [end] 创建一个分区
`例: mkpart primary ext4 1MiB 1000MiB`
+ rm [number] 删除指定编号的分区
+ resizepart [number] [size] 重调大小
+ set [number] [mode] 设置分区标志
+ quit
> > 非交互
`sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100%`
`sudo parted -s /dev/sdb rm 2`
2025-01-10 22:29:51 +08:00
# 用户
> useradd
> >
+ -m # 同时建立主目录
+ -g # 指定用户组
+ -s # 指定shell
> groupadd
> passwd
> userdel
> >
+ -r # 删除主目录
> usermod
> >
+ -d # 修改主目录
+ -e <MM/DD/YY># 修改账号有效期
+ -s # 修改shell
> id
> > 查看用户信息
> /etc/passwd
> > example
+ 登录名:口令:UID:GID:x信息:主目录:shell
> /etc/group
> > example
+ 组名:组口令(一般无):GID:user1,user2,user3
### 用户所有组是passwd和groups的并集
> newgrp
> > 切换有效用户组
# 进程
> ps
> >
+ aux
> top
> lsop
> > 查看占用文件的进程
> kill
> > 发送信号
+ -l # 列出所有信号
> nice renice
> > 调整谦让度
2025-02-27 22:25:34 +08:00
> bg
> > 让后台中的进程继续运行
> fg
> > 把后台进程拉回前台
> jobs
> > 列出后台进程
2025-01-10 22:29:51 +08:00
# 网络
> ip
2025-02-27 22:25:34 +08:00
> > 查看网络的各种信息
> > address 地址等连接信息
> > neigh arp相关
+ ip neigh [OPTIONS] [COMMAND]
+ ip neigh add [IP] lladdr [MAC] dev [eth0] 添加表项
+ ip neigh del [IP] dev [eth0] 删除表项
+ ip neigh flush all 清空
_________________________________
REACHABLE表示邻居设备可达。
STALE表示邻居设备的条目已过期但之前是可达的。
DELAY表示正在等待确认邻居设备是否可达。
PROBE表示正在积极探测邻居设备是否可达
_________________________________
2025-01-10 22:29:51 +08:00
> ss
> > 查看端口开放情况
+ -t # tcp
+ -u # udp
+ -n # 以端口号显示
+ -l # 列出正在监听的服务
+ -p # + pid
+` -r # 路由表
> > example
+ ss -tlunp
> ping
# 系统
> systemctl
> > systemctl [command] [unit]
+ start
+ stop
+ restart
+ reload
+ enable
+ disable
+ status
+ mask # 强制注销
+ unmask
> >
+ list-units
> >
+ get-default # 获取目前target
+ set-default # 设置默认target
+ isolate # 切换target
> > >
+ poweroff
+ reboot
+ suspend # 挂起
+ hibernate # 休眠
+ rescue # 修复
# 硬件
> dmidecode
> > 获取硬件信息
+ -q # 简洁
+ -t # 指定查看类型
# 软件包管理
> dpkg
> > .deb
+ -i # 安装
+ -l # 查看版本
+ -r # 卸载
> apt
> > apt-get
> > >
+ updata # 更新软件包缓存
+ upgrade # 更新已有软件包的最新版本
+ install # 下载并安装
+ remove # 卸载
+ source # 下载源码
> > apt-cache
> > >
+ search # 搜索
+ depends # 列出依赖
> > 配置源
+ /etc/apt/sources.list
# 其他命令
# nohup 命令挂机(退出登陆后依然执行)
nohup [command] &
`screen` 主要用于用户开启多个独立的会话(称为"窗口")在这些会话之间可以自由切换而不会中断已经运行的程序
### 基本使用方法:
1. **启动一个新的 screen 会话**
screen
2. **列出当前的 screen 会话**
screen -ls
3. **重新连接到一个已存在的会话**
screen -r [会话ID或名称]
4. **分离当前会话**
在 screen 会话中按 `Ctrl-a` 然后按 `d`
9. **退出 screen 会话**
- 关闭当前窗口:在 screen 会话中按 `Ctrl-a` 然后按 `k`
- 退出所有窗口并结束会话:在 screen 会话中按 `Ctrl-a` 然后按 `\`
10. **锁定当前会话**
在 screen 会话中按 `Ctrl-a` 然后按 `x`
# ulimit
查看和修改进程运行资源限制
-H/S # 设置/显示 软/硬 限制
-a # 显示所有
-t # cpu time
-f # file size
-s # stack size
-c # core file size
-m # memory size
-l # lock memory size
-p # user processes
-n # open file
#ulimit -Ht 3600