- linux
- mac
- macos 问题
- win 命令
- powershell 安装App stroe
- route 命令
- vim
- brew
- shell
- System V服务脚本
- systemd 服务脚本
- journalctl 服务日志
- firewall
- iptables
- selinux
- dlltool
- iftop
- netstat
- nethogs
- tcpdump
- logrotate
- iostat
- vmstat
- 脚本输入密码
linux
命令|含义
:–|:–
top|显示当前运行的进程信息
tee|显示并保存控制台输出
scp|服务器文件同步
mpstat|cpu分片情况
netstat|网络信息
dmesg|硬件驱动、丢包等问题
stap perf|系统分析性能分析
sar|显示cpu、内存、网络历史情况
vmstat 1 显示内存上下文切换等
/proc/* …|现场调试
ldd|检查依赖的动态与静态库
strace ltrace|查看程序运行失败、冻结、奔溃后堆栈等信息
wireshark tshark|网络调试
iftop nethogs|查看端口或进程占用的带宽
mtr traceroute|查看网络问题
free vmstat|查看内存状态
iostat netstat top atop htop dstat|查看系统状态
split csplit|分割文件
strings xxx.so grep|在二进制文件中查找文本
hd bvi|16进制抽取、二进制编辑
sort|排序
shuf|从文件中随机选一些行
awk|复杂数据替换修改
lsof netstat -lntp|查询进程监听端口、文件等
nohup disown screen tmux|后台运行
pgrep pkill pstree -p|进程操作
parallel|并行执行任务
xargs|模拟执行脚本
uptime|系统负载
ps|查看进程信息 aux
fuser|显示文件被那些进程访问
stfp|传文件
rsync|-avz –delete /var/www/ root@ip:/root/www
nice -n[-20 19]|命令 指定优先级
renice [-20 19] pid|设置优先级
slabtop|显示linux内核缓存使用情况
tail -10|显示文件最后10行
head -10|显示开头10行
debian apt-get install|build-essential
centos yum groups install “Development Tools”
rpm -qa |grep glibc|查看已装版本
rz sz|上传下载工具
ldconfig -l -v /lib64/libc-2.5.so|创建软连接
LD_PRELOAD=/lib64/libc-2.12.so|ln -s /lib64/libc-2.12.so /lib64/libc.so.6
dos2unix x/deploy.sh|转编码格式
strings /xx/x.so|显示内容
uname -a 和 more /etc/*release|查版本
cat /proc/cpuinfo|grep name|cut -f2 -d:|uniq -c|查看cpu逻辑内核
cat /proc/cpuinfo|grep physical|uniq -c|物理内核
getconf LONG_BIT|系统字节宽度
cat /proc/meminfo|内存
df du|硬盘信息
shasum|sha散列工具
watch|循环执行命令
export LANG=en_US.UTF-8 | 临时修改系统语言
chmod | 修改权限
getfacl -R ./ > xxx|保存目录权限 getfacl –restore=xxx 恢复
sysctl -a 显示所有参数
sysctl -w net.ipv4.ip_forward=1 » /etc/sysctl.conf 修改某个内核参数
sysctl -p /etc/sysctl.conf 从文件加载参数修改内核 /etc/sysctl.d/ 重启会自动加载
dd if=/x/src.iso|src.img|… of=/x/usb 把某个磁盘镜像写到另一个挂载磁盘或目录
man xxx | col -b > 1.txt 过滤控制符
man -f显示与指定关键字相关的手册页面 -k搜索手册页中与关键字匹配的条目 -a显示所有匹配的手册页面
man -w仅显示手册页的位置,而不显示其内容
man 1 用户命令 2系统调用 3C库函数 4设备和特殊文件 5文件格式和约定 6游戏和演示 7杂项 8系统管理命令
ssh -C 压缩传输,提高传输速度。
-f 将 SSH 传输转入后台执行,不占用当前 shell
-i 私有文件path
-N 建立静默连接(建立了连接但看不到具体会话)
-g 允许远程主机连接本地用于转发的端口。
-L 本地端口转发
-R 远程端口转发
-D 动态转发( SOCKS 代理)
-p 指定 SSH 端口
sudo chattr +i /x/x 文件不允许修改、删除、移动、链接等
sudo chattr -i /x/x 去掉不允许修改
sudo lsattr /x/x 查看附加的 attr
yum install ca-certificates
update-ca-trust force-enable
cp xx.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
yum search|查找软件包
yum list|所有可安装的软件包
yum list updates|所有可更新的软件包
yum list installed|所有已安装的软件包
yum list extras|所有已安装但不在 Yum Repository 内的软件包
yum list gcc|所指定的软件包
yum info gcc|获取软件包信息
yum info|所有软件包的信息
yum info updates|列出所有可更新的软件包信息
yum info installed|列出所有已安装的软件包信息
yum info extras|所有已安装但不在 Yum Repository 内的软件包信息
yum provides gcc|软件包提供哪些文件
Ctrl-c Kill foreground process
Ctrl-z Suspend foreground process
Ctrl-d Terminate input, or exit shell
Ctrl-s Suspend output
Ctrl-q Resume output
Ctrl-o Discard output
Ctrl-l Clear screen
mac
命令|含义 :–|:– lipo|富二进制操作 显示信息、合并、编辑 nm|显示库符号 xcode插件问题|defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcode-{xcode_version} sysctl|查看修改内核变量值 -a、debug、hw、kern machdep、net、vfs、vm、user auditd|审计日志在/var/audit praudit可以解析文件 auditreduce 搜索日志 dscl|用户和组操作 scutil|命令行系统设置 syslogd asl_log、asl_*|系统日志 plutil -convert xml、binary、json 1|文件转换 notifyutil|通知 信号 进程通信 security|密钥工具 -i csreq| asctl|控制跟踪沙盒 file|显示文件信息 区分动态或静态库(含shared) arch|强制加载二进制中某架构的代码 otool|Mach-o文件工具 -hV、-lV、-L、-p _main -tV 可区分动静态库 objdump|反汇编 codesign|修改显示代码签名 pagestuff -a|显示逻辑页符号 vmmap -interleaved|查看进程内存布局 vm_stat|显示内核虚拟内存计数 defaults|设置系统默认配置 dtrace|调试语言 Instruments利用它的脚本实现 -s -n 在内核态执行(/dev/device字符设备与内核通信) dtruss|显示系统调用、参数、返回值 -p -n -s -f system_profiler|系统信息 sysdiagnose|系统诊断 命令脚本 allmemory|所有进程内存快照 -o 指定文件(/tmp/allmemoryfiles) fs_usage|显示进程与文件、套接字、目录相关的系统调用 sc_usage|显示进程的系统调用信息 -l latency|显示进程中断和调度的延迟值 -st -it ulimit|核心转储大小限制 -c 返回0表示不创建 spindump|将所有进程当前的调用栈写入日志 sample|获取某个进程的快照 filtercalltree|处理调用跟踪日志 heap|显示堆中分配的缓存区 leaks|列出可能的内存泄漏 malloc_history|列出每一次内存分配的详细信息 nvram、ioreg|访问NVRAM bless|控制修改NVRAM参数 od -A x -t x4 path|文件显示十六进制内容 launchctl与launchd|交互管理后台守护进程 mig|根据Mach接口定义文件生成代码 zprint|显示内核中Zone信息 diskutil|newfs_msdos newfs_hfs newfs_apfs newfs_exfat newfs_udf gpt|-r show disk add create -t efi … diskutil|erasevolume HFS+ “/Volumes/dir” $(hdiutil attach -nomount suppressed ram://blocks(512字节))|创建内存盘,并挂载 history -c|清除 !命令序号 重复执行某历史命令 fdisk -l|查看当前磁盘分区 networksetup -listallnetworkservices|显示所有网络设备 networksetup -setadditionalroutes “出口设备名” <171.0.0.0 255.0.0.0 出口网关ip> [.. .. ..]… |设置路由一次设置所有,多次设置覆盖 networksetup -setadditionalroutes “出口设备名” |清空路由 networksetup -getadditionalroutes “出口设备名” |获取路由设置 networksetup -setv6off “出口设备名” | 关闭ipv6 sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder | 刷新DNS缓存 pmset -a hibernatemode 0|关闭休眠内存落盘 /etc/asl.conf ? [= Sender kernel] [<= Level error] file system.log | 减少日子写盘 pgrep syslogd sudo kill -HUP sudo fs_usage -f filesys | sudo fs_usage -f diskio -w sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli –start 修改vm端口映射后需重启 sudo upx -d /xx/xxx.app/Contents/MacOS/xxx 无权打开 sudo kextunload /System/Library/Extensions/IOAudio2Family.kext | 卸载声卡驱动 sudo kextload /System/Library/Extensions/AppleHDA.kext | 加载声卡驱动 kextstat 列出内核模块 sudo chflags uschg /x/x 添加不允许修改、删除、移动、链接等属性 sudo chflags -hvR noschg /x/x 去掉附加属性 sudo ls -lO /x/x 查看附加属性 sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain xx.crt sudo security delete-certificate -c 证书名称 sudo launchctl stop com.openssh.sshd tmutil listbackups 列出时间机器备份列表 tmutil listlocalsnapshots /Volumes/xxx 列出本地快照 sudo tmutil delete -d /Volumes/xxx -t 2023-08-03-032056 删除时间机器对应的某个还原点 sudo tmutil deletelocalsnapshots 2023-08-03-032056 sudo tmutil deletelocalsnapshots /Volumes/xxx
macos 问题
-
command+R m1长按电源键 csrutil disable enable 禁启用系统完整性保护 - M1 cpu /usr/sbin/softwareupdate –install-rosetta –agree-to-license 安装rosetta 转换arm指令
- sudo spctl –master-disable 启用信任任意来源软件
- sudo xattr -rd com.apple.quarantine xxx.app 修复app无法启动,下载的app隔离文件属性
- sudo xattr -cr xxx.app && sudo codesign –force –deep –sign - xxx.app 修复app无法启动
- sudo chmod -R 755 xxx.app
- sudo rm -rf /Library/Audio/Plug-Ins/HAL/BlackHole2ch.driverq
- sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod
win 命令
- DISM /online /Get-CurrentEdition 查看系统当前的版本
- DISM /online /Get-TargetEditions 获取当前系统可转化的目标版本
- DISM /online /Set-Edition:ServerStandard /ProductKey:WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY /AcceptEula 转换为标准版本
- DISM /online /Set-Edition:ServerDatacenter /ProductKey:CB7KF-BWN84-R7R2Y-793K2-8XDDG /AcceptEula 转换为数据中心版
- sc create server_name binpath= “X:/x/x.exe” displayname= “xxx” start= AUTO
-
type= <own share interact kernel filesys rec userown usershare> -
start= <demand boot system auto disabled delayed-auto> -
error= <normal severe critical ignore> - group=
-
tag= <yes no> - depend= <xxx/xxx/…>
-
obj= <LocalSystem AccountName ObjectName> - DisplayName= <显示名称>显示名称>
- password=
-
- sc stop server_name 1:2:8 计划外磁盘问题(最多127字节)
- 1:2:8 标志:主因:次因
- 标志 1.计划外 2.自定义 4.计划内
- 主因 1.其它 2.硬件 3.操作系统 4.软件 5.应用程序 64-255.自定义
- 次因 1.其它 2.维护 3.安装 4.升级 5.重新分配 6.挂起 7.不稳定 8.磁盘 9.网卡 10.环境 11.硬件驱动程序 12.其他驱动程序 13.Service Pack 14.软件更新 15.安全修补 16.安全性 17.网络连接性 18.WMI 19.Service Pack 卸载 20.软件更新卸载 22.安全修补卸载 23.MMC 24.256-65535自定义
- 1:2:8 标志:主因:次因
- sc delete server_name
- winget search xxx
- winget install –id xxx -e –source winget
- shutdown /r
- Sconfig 字符图形界面服务器配置
- Restart-Computer 重启
- Rename-Computer 重命名
- Stop-Computer 关机
- Get-NetAdapter 获取网络设置信息
- Get-NetIPConfiguration -InterfaceIndex 5 -Detailed 查看配置信息
- Get-NetIPInterface -InterfaceIndex 2 查看设备DHCP
- Get-NetIPAddress -InterfaceIndex n(ifIndex) 获取设备设置信息
- Remove-NetIPAddress -InterfaceIndex n 删除设置IP配置
- New-NetIPAddress -InterfaceIndex n -IPAddress x.x.x.x -AddressFamily IPv4 -PrefixLength 24 -DefaultGateway x.x.x.1
- Set-NetIPInterface -InterfaceIndex n -Dhcp Enabled 设置使用DHCP
- Set-NetIPInterface -InterfaceIndex n -AddressFamily IPv4 -Dhcp Enabled
- Get-DnsClientServerAddress -InterfaceIndex n 获取DNS信息
- Set-DnsClientServerAddress -InterfaceIndex n -ServerAddresses (“1.1.1.1”, “8.8.8.8”)
- Get-NetRoute -InterfaceIndex n(ifIndex) 获取设备路由信息
- Remove-NetRoute -InterfaceIndex n 删除路由信息
- netsh interface xxx 网络设置,可以help帮助
- netsh advfirewall firewall set rule group=”Network Discovery” new enable=Yes 启用网络邻居
- netsh ipsec static show policy all 查看ipsec策略
- netsh ipsec static show filterlist all level=verbose
- netsh ipsec static add policy name=netbc
- netsh ipsec static add filterlist name=block
- netsh ipsec static add filteraction name=block action=block
- netsh ipsec static add filter filterlist=block any srcmask=32 srcport=0 dstaddr=me dstport=445 protocol=tcp description=445
- netsh ipsec static add rule name=block policy=netbc filterlist=block filteraction=block
- netsh ipsec static set policy name=netbc assign=y
- netsh advfirewall firewall add rule name=”Chrome” dir=in program=”C:\x\chrome.txt” action=allow
- netsh advfirewall firewall add rule name=”Windriver” dir=in program=”C:\x\windriver.exe” action=allow
- Add-Computer修改电脑名及组名
- HostName 修改电脑名
- Remote-Computer 开启远程桌面
- New-PsSession创建远程PowerShell会话
- Enter-PsSession 链接远程PowerShell会话
-
Get-WindowsCapability -Online Where-Object Name -like ‘OpenSSH*’ - Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
- Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
- Start-Service sshd
- Set-Service -Name sshd -StartupType ‘Automatic’
- Get-NetFirewallRule -Name “OpenSSH-Server-In-TCP”
- New-NetFirewallRule -Name ‘OpenSSH-Server-In-TCP’ -DisplayName ‘OpenSSH Server (sshd)’ -Profile ‘Public’ -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
-
Get-NetFirewallRule Where { $_.DisplayGroup –Eq “firewall group”} Format-Table 查询防火墙配置 eq ne lt le gt ge like notlike contains notcontains - Set-NetFirewallRule –Name “RemoteFwAdmin-In-TCP” –Enabled True
- Set-NetFirewallRule –Name “RemoteFwAdmin-RPCSS-In-TCP” –Enabled True
- iscsicpl 图形配置iscsi存储系统
- Get-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp’ -name “PortNumber” 获取远程桌面端口
- Set-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp’ -name “PortNumber” -Value 22 设置远程桌面端口
- net share 查看当前共享信息
- net share share_name=C:\share /grant:everyone,full /change or /read //smb: 445
- net view 查看所有网络邻居 net view xxx 查看xxx的共享
- net use 查看映射的网络驱动器 net use Y://win10/share 映射网络驱动器
- auditpol /set /subcategory:”Filtering Platform Packet Drop” /success:enable /failure:enable 查看审计事件并过滤 certutil -addstore -f “ROOT” xxx.crt certutil -delstore “ROOT” 序列号十六进制
powershell 安装App stroe
- https://store.rg-adguard.net/ 粘帖window app stroe的具体链接,下面会出现各版本链接
- powershell Invoke-WebRequest ‘xxx url’ -OutFile ‘D:\xxx.appx’
- powershell Add-AppxPackage -Path ‘D:\xxx.appx’
route 命令
-
route -rn 查看路由表 - route -q 退出任意route编辑模式 -v 命令中显示详细信息 -d 调试模式 -t test模式在null设备上设置 -n 域名解析
- route get 0.0.0.0 获取默认路由
-
route delete default -net -host x.x.x.x 删除默认路由 - route flush 删除所有路由
- route change 修改
- route monitor 监控路由变化
-
route add -net -host 0.0.0.0 x.x.x.x 添加默认路由 -
route add -net -host 192.168.0.0 192.168.0.1 添加路由 -
route add -net -host 192.168.0.0 -netmask 255.255.0.0 192.168.0.1 添加路由
##sed 命令
- -n 使用安静(silent)模式
- -e 直接在命令列模式上进行 sed 的动作编辑;
- -f -f filename 运行filename内的 sed 动作;
- -r sed 支持延伸型正则表达式。默认是基础正则表达式
- -i 直接修改读取的文件内容,而不是输出到终端。
- sed [n1[,n2]] function 可选n1行到n2行
- function a新增 c取代 d删除 i插入 p列印 s取代
vim
- :help、:q、:wq
- :set nu 显示行号
- /需查找的词\c 向后查找 \c 忽略大小写
- ?需查找的词\c 向前查找 \c 忽略大小写
- n向下查找下一个 N向上查找下一个
- Ctrl+f 向下翻页 Ctrl+b 向上翻页
-
Shift+$行尾 Shift+ 行头 - gg文件开始 GG文件结尾
- w按词向下移动 b按词向上移动
- dd 删除行、d2d向下删除两行、x删除字、dw删除词、d2w删除2个词
- p向下粘帖刚刚删除的行货字符等、P向上粘帖、Shift+Insert
- :/原词/替换词/g g替换每行命中所有词, 没有g只替换每行第一个命中词
- u 回退、Ctrl+R重做
- i 插入、a追加、O向前插入行、o向后插入行
brew
- brew update 更新信息
- brew outdated 查看哪些可以升级
- brew upgrade [xxx] 升级全部或指定软件
- brew clean 清理旧的版本
- brew search xxxx
- brew info xxx
- cd $(brew –repo) && git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
- cd $(brew –repo)/Library/Taps/homebrew/homebrew-core && git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
- export “HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles”
- brew doctor 诊断
- brew tap 组织名/源名 http://github.com/apple/homebrew-apple 添加三方源
- brew untap 组织名/源名 删除三方源
- brew –prefix [name] 查询安装路径, 指定命令具体到命令的路径
#old version sample cmake brew tap-new nomadli/local-cmake brew extract --version=3.18.4 cmake nomadli/local-cmake brew install cmake@3.18.4
shell
wait 等待子任务完成,不等待调用函数中的子任务,函数中需要使用wait do {}& done 异步执行每次循环
-
set -a 标示已修改的变量,以供输出至环境变量 -b 使被中止的后台程序立刻回报执行状态 -d Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消 -e 若指令传回值不等于0,则立即退出shell -f 取消使用通配符 -h 自动记录函数的所在位置 -k 指令所给的参数都会被视为此指令的环境变量 -l 记录for循环的变量名称 -m 使用监视模式 -n 测试模式,只读取指令,而不实际执行 -p 启动优先顺序模式 -P 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接 -t 执行完随后的指令,即退出shell -u 当执行时使用到未定义过的变量,则显示错误信息 -v 显示shell所读取的输入值 -H shell 可利用”!”加<指令编号>的方式来执行 history 中记录的指令 -x 执行指令后,会先显示该指令及所下的参数 +<参数> 取消某个set曾启动的参数。与-<参数>相反 -o option 特殊属性有很多,大部分与上面的可选参数功能相同,这里就不列了参数>参数>指令编号>
-
判断
条件 | 含义 | |
---|---|---|
[-eq] | 等于 | |
[-ne] | 不等于 | |
[-gt] | 大于 | |
[-ge] | 大于等于 | |
[-lt] | 小于 | |
[-le] | 小于等于 | |
((<)) | 小于 | |
((<=)) | 小于等于 | |
((>)) | 大于 | |
((>=)) | 大于等于 | |
[-a file] | 如果file存在则为真 | |
[-b file] | 如果file存在且是一个块特殊文件则为真 | |
[-c file] | 如果file存在且是一个字特殊文件则为真 | |
[-d file] | 如果file文件存在且是一个目录则为真 | |
[-e file] | 如果file文件存在则为真 | |
[-f file | 如果file存在且是一个普通文件则为真 | |
[-g file | 如果file存在且已经设置了SGID则为真(SUID=Set User ID SGID= Set Group ID) | |
[-h file | 如果file存在且是一个符号连接则为真 | |
[-k file | 如果file存在且已经设置粘制位则为真 | |
[-p file | 如果file存在且是一个名字管道(F如果O)则为真 | |
[-r file | 如果file存在且是可读的则为真 | |
[-s file | 如果file存在且大小不为0则为真 | |
[-t FD] | 如果文件描述符FD打开且指向一个终端则为真 | |
[-u file] | 如果file存在且设置了SUID(set userID)则为真 | |
[-w file] | 如果file存在且是可写的则为真 | |
[-x file] | 如果file存在且是可执行的则为真 | |
[-O file] | 如果file存在且属有效用户ID则为真 | |
[-G file] | 如果file存在且属有效用户组则为真 | |
[-L file] | 如果file存在且是一个符号连接则为真 | |
[-N file] | 如果file存在且在修改过后没有读则为真 | |
[-S file] | 如果file存在且是一个套接字则为真 | |
[file1 –nt file2] | 如果1比2修改的时间新或2不存在则为真 | |
[file1 –ot file2 | 如果1比2要老,或者file2存在且file1不存在则为真 | |
[file1 –ef file2 | 如果1和2指向相同的设备和节点号则为真 | |
[-o optionname] | 如果shell选项“optionname”开启则为真 | |
[-z string] | string的长度为零则为真 | |
[-n string]/[string] | string的长度为非零non-zero则为真 |
- path
命令 | 含义 |
---|---|
${path#*/} | 删除第一个/及其左边的字串 |
${path##*/} | 删除最后一个/及其左边的字串 |
${path#*.} | 删除第一个.及其左边的字串 |
${path##*.} | 删除最后一个.及其左边的字串 |
${path%/*} | 删除最后一个/及其右边的字串 |
${path%%/*} | 删除第一条/及其右边的字串 |
${path%.*} | 删除最后一个.及其右边的字串 |
${path%%.*} | 删除第一个.及其右边的字串 |
- grep
命令 | 含义 | |
---|---|---|
grep str /xx/* | 在指定目录下的所有文件查找str | |
grep -r str /xx/* | 在指定目录及子目录查找str | |
grep -d skip str /xx/* | 在指定目录下查找文件忽略子目录不报错 | |
grep -i str xx | 不区分大小写 | |
grep -l str xx | 只显示文件名 | |
grep -L str xx | 显示不匹配的文件名 | |
grep -w str xx | 只匹配整个单子,不匹配子字符串 | |
grep -C num str xx | 显示上下文num行 | |
grep str1 | str2 xx | 匹配str1或str2 |
grep str1 xx | grep str2 | 显示匹配str并且str2的文件 | |
grep -c str xx | 只输出行数 | |
grep -h str /xx/* | 不显示文件名 | |
grep -n str xx | 显示匹配行号 | |
grep -s str xx | 不显示不存在或无匹配的错误信息 | |
grep -v str xx | 显示不含有str的行 | |
grep -o str[a-z]* xx | 只输出正则匹配部分 | |
grep str *.log | 只查找log文件 | |
grep <str xx | 精确匹配str开头的文本 | |
grep str> xx | 精确匹配str结尾的文本 | |
grep \^str xx | 以str开头的行 | |
grep str$ xx | 以str结尾的行 |
System V服务脚本
- rcS.d->rc(0-6).d->rc.local
- /ect/rc(0-6).d 0-6类别的启动脚本 K开头的脚本比S开头的早运行 0关机 1 单用户 2网络多用户 3网络服务多用户 4 5 6重启
- 脚本内容 start stop reload restart force-reload
- action
$"Starting name:" nohup /*/s param >/dev/null 2>&1 &
pidof name
获取pidkillproc -p pidfile -TERM "name"
- 脚本放在/etc/init.d
-
update-rc.d service <enable disable start stop> [order级别] [1 2 3类别] -
chkconfig – list add del levels on #!/bin/bash #chkconfig:345 98 98
ln -s /etc/init.d/xx /etc/rc.d/rc3.d/S98xx ln -s /etc/init.d/xx /etc/rc.d/rc4.d/S98xx ln -s /etc/init.d/xx /etc/rc.d/rc5.d/S98xx chkconfig –level 345 xx on
systemd 服务脚本
- /usr/lib/systemd/system 脚本.service
-
systemctl <enable start status stop kill restart reset-failed> name - systemctl cat name 显示脚本
- systemctl list-dependencies multi-user.target
- systemctl isolate shutdown.target 切换target
- systemctl daemon-reload 重新加载配置
-
脚本 [Unit] 启动顺序与依赖关系 Description=NMLIS is sample Documentation=man:NMLIHelp(8) 帮助文件 DefaultDependencies=no 禁止默认依赖 默认Requires=sysinit.target,After=sysinit.target,After=basic.target, Conflicts=shutdown.target,Before=shutdown.target After=server1 server2 在这些后面启动 Before=server3 server4 在这些前面启动 Wants=server5 此服务失败停止不影响自己 Requires=server6 此服务失败自己也关闭 BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行 Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行 Condition…:当前 Unit 运行必须满足的条件,否则不会运行 ConditionFileIsExecutable=/usr/bin/xx xx程序可执行时启动
[Service]启动方法 (- 表示本条失败也可以继续) Environment=设置环境变量 EnvironmentFile=-path 内容为key=value WorkingDirectory=工作目录 ExecStartPre=启动服务前执行的命令 ExecStart=path/s -config $conf(来自上面文件) ExecStartPost=启动后执行的命令 ExecReload=/bin/kill -HUP ${MAINPID} ExecStop=停止执行的命令 ExecStopPost=停止后执行的命令 xxx= 空行取消前面相同xxx的设置 Type=simple 默认 主进程 Type=forking 程序fork 主进程退出、子进程变主 Type=oneshot 执行后等待服务退出 Type=dbus 通过D-Bus启动 Type=notify 服务启动完毕后会通知systemd,READY=1 $NOTIFY_SOCKET Type=idle 其它任务都执行完启动该服务 PIDFile=/run/xxx.pid 当Type=forking时启动程序立刻退出fork的pid要写在这里 RemainAfterExit=yes 可以再次运行针对oneshot KillSignal=SIGQUIT KillMode=control-group默认控制组所有进程被杀掉 KillMode=process 只杀主进程 KillMode=mixed 主进程SIGTERm 子进程SIGKILL KillMode=none 不杀进程 只是执行stop TimeoutStopSec=5 定义 Systemd 停止当前服务之前等待的秒数 Restart=no默认 退出后不重启 Restart=on-success 正常退出才会重启 Restart=on-failure 非正常退出 重启 Restart=on-abnormal 被信号终止或超时 重启 Restart=on-abort被没有捕捉的信号终止时 重启 Restart=on-watchdog 超时重启 Restart=always 总是重启 RestartSec=10 重启前等待秒 WatchdogSec=30s 看门狗超时时间,两次发送的时间,即15s发送一次 StartLimitInterval=10min 启动超时,即看门狗在10分钟后要发送 READY=1 StartLimitBurst=3 在三次重启失败后不再启动 StartLimitAction=none|reboot|reboot-force|reboot-immediate服务重启次数超过或对系统的操作 StandardOutput=inherit|null|tty|journal|syslog|kmsg|journal+console|syslog+console|… StandardError=…|kmsg|console|socket|file:/xx/xx|append:/xx/xx SyslogIdentifier=xxx 不能有空格,日志表示syslog可以识别并区分/etc/rsyslog.d/x.conf if $programname == xxx then /path/to/log/xx.log & stop restart rsyslog and you server LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes OOMScoreAdjust=-500 CPUAffinity=8 运行在8cpu上
[Install]如何安装配置 WantedBy=multi-user.target 多用户模式 默认 WantedBy=local-fs-pre.target WantedBy=sysinit.target WantedBy=basic.target WantedBy=graphical.target WantedBy=shutdown.target WantedBy=umount.target WantedBy=final.target RequiredBy: Alias:当前 Unit 可用于启动的别名 Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
-
redis.service [Unit] Description=Redis Server After=syslog.target network.target remote-fs.target nss-lookup.target
[Service] ExecStart=/vdb/em_services/redis-4.0.9/redis-server /vdb/em_services/redis-4.0.9/redis.conf –daemonize no ExecStop=/vdb/em_services/redis-4.0.9/src/redis-cli -p 6379 shutdown Restart=always
[Install] WantedBy=multi-user.target
- sd_notify(0, “WATCHDOG=1”);
- sd_notify(0, “WATCHDOG_USEC=20000000”)
- sd_event_set_watchdog()
- sd_watchdog_enabled()
- systemd-analyze blame xxx 分析启动耗时
- systemd-analyze critical-chain xxx查看启动瀑布流
- systemctl list-units 查看所有系统运行单元
- systemctl list-units –all
- systemctl list-units –all –state=inactive 没有运行的
- systemctl list-units –failed 所有加载失败的
- systemctl list-units –type=service 列出单元为service的
- systemctl list-dependencies 显示依赖关系
journalctl 服务日志
- journalctl 查看所有日志
- journalctl -k 内核日志
- journalctl -b 0/-1 本次/上次启动日志
- journalctl -n 最新10行日志
- journalctl -f 滚动实时显示
- journalctl /usr/lib/systemd/systemd 指定服务日志
- journalctl _PID=1 指定进程
- journalctl /usr/bin/bash 指定脚本的日志
- journalctl _UID=33 –since today指定用户日志
- journalctl -u xx –since today 查询某服务日志
- journalctl -u xxx -f
- journalctl -xe 查看服务错误原因
- journalctl –disk-usage 查看日志文件大小
- journalctl –vacuum-size=10M 指定日志文件总大小 G
- journalctl –vacuum-time=1year 删除一年以前的日志 d h s
- journalctl –vacuum-files=5 日志文件数不超过5
- vi /etc/systemd/journald.conf && systemctl restart systemd-journald
- Storage=persistent 手动创建/var/log/journal会永久保存,否则临时保存/run/log/journal内存
- Storage=volatile,则日志数据将仅存储在内存中,即在/run/log/journal目录下自动创建
- Storage=auto 有/var/log/journal/写磁盘, 否则保存/run/log/journal内存
- Storage=none 关闭所有存储,所有接收到的日志数据将被丢弃
- RuntimeMaxUse 默认为分配给节点的总物理内存的10% 0-100
- SystemMaxUse 最大可使用多少磁盘空间 10%
- RuntimeKeepFree 默认保留总物理内存的15%
- SystemKeepFree 保留多少磁盘空间15%
- RuntimeMaxFileSize 单个内存文件大小, 默认 RuntimeMaxUse/8
- SystemMaxFileSize 单个日志文件的大小, 默认 SystemMaxUse/8
- RuntimeMaxFiles 同时存在多少个内存日志文件 默认值为100
- SystemMaxFiles 同时存在多少个日志文件 默认值为100
- MaxRetentionSec 最大日志分隔时间, 默认1个月, 0不设置
- MaxFileSec 最大保留期限 0不设置
- journalctl –since=”2012-10-30 18:17:16”
- journalctl –since “20 min ago”
- journalctl –since yesterday
- journalctl –since “2015-01-10” –until “2015-01-11 03:00”
- journalctl –since 09:00 –until “1 hour ago”
- journalctl –since yesterday –until now
- journalctl -u xxx -u aaa –since today 合并显示多个 Unit 的日志
- journalctl -p emerg/alert/crit/err/warning/notice/info/debug -b 查看指定优先级
- journalctl –no-pager
- journalctl -b -u xxx -o json 单行 JSON 格式
- journalctl -b -u xx -o json-pretty JSON 格式(多行)
- journalctl -t tag 显示指定tag的错误信息
firewall
- systemctl disable firewalld
- firewall-cmd –state
- firewall-cmd –list-all
- firewall-cmd –zone=public –permanent –add-port=2181/tcp
- firewall-cmd –reload
- firewall-cmd –zone=public –list-ports
iptables
- iptables -L -n -v –line-numbers
-
iptables -I INPUT 1 -p tcp –dport 2181 -j ACCEPT reject drop - iptables -D INPUT 1 删除INPUT第一条规则
- iptables-save > /etc/sysconfig/iptables
- systemctl restart iptables
selinux
- /etc/sysconfig/selinux
- vi /etc/selinux/config SELINUX=disabled
- getenforce 查看状态
vc dumpbin option file | find /i “.dll” | more
- /ALL
- /ARCHIVEMEMBERS 显示库中成员的基本信息
- /CLRHEADER 公共语言运行时
- /DEPENDENTS 显示出所依赖的DLLs的名字,但不现实导入函数的名字。
- /DIRECTIVES 显示编译器产生的.drective(链接时的参数)段中的信息。
-
/DISASM[:{BYTES NOBYTES}]显示代码段反汇编的结果 -
/ERRORREPORT:{NONE PROMPT QUEUE SEND}如果dumpbin.exe在运行时失败,你能使用”/ERRORREPORT”这个参数去发送错误信息到微软 - /EXPORTS 显示可执行文件或DLL中导出的所有信息。
- /FPO 显示FPO( frame pointer optimization)记录。
- /HEADERS 显示文件和每个段的头部信息。当使用一个库文件时,它显示的是每个成员对象的头部信息。
- /IMPORTS[:文件名]显示可执行文件或DLL文件中导入的DLL文件和它的函数列表。
- /LINENUMBERS 如果编译时使用了/Zi,/C7/Zd选项,行编号才存在于目标文件中,或者在连接时产生了调试信息是才能够显示行编号。
-
/LINKERMEMBER[:{1 2}]这个选项显示定义在库中的全局符号。如果”1”被指定将以对象的顺序显示对象以及他们相应的偏移量,如果”2”被指定将显示偏移和 - /LOADCONFIG 这个选项会显示”IMAGE_LOAD_CONFIG_DIRECTORY”结构体中的相关信息,这个结构体是在文件加载时加载选项。
- /OUT:文件名 这个选项将信息输出到指定的文件中。
- /PDATA 这个参数只对RISC处理器才有用。显示.pdata中的相关信息。
- /PDBPATH[:VERBOSE]
- /RANGE:vaMin[,vaMax]
-
/RAWDATA[:{NONE 1 2 4 8}[,#]] 显示原始数据(比如.text段中的指令数据)。你可以使用下列参数来格式化输出。 1 默认值,数据以十六进制显示,如果有打印字符就显示他的assii码。 2 数据以十六进制2字节形式显示。 4 数据以十六进制4字节形式显示。 8 数据以十六进制8字节形式显示。 NONE 数据被限制,这个参数可以配合/ALL一起使用来控制输出。 Number 以设定值来显示。
- /RELOCATIONS 显示对象中的重定位信息。
- /SECTION:名称 显示由”section”指定段中的信息。你可以使用”/HEADERS”选项去显示每个段的头部信息。
- /SUMMARY 显示每个段的基本信息(段名和大小),如果其他选项没有指定这个选项是默认的。
- /SYMBOLS 这个参数会显示COFF文件的符号表(用于连接时从定位的)。在所有的对象中都存在符号表
- /TLS 显示一个来自可执行文件中的”IMAGE_TLS_DIRECTORY”结构体的信息
- /UNWINDINFO 这个选项只能使用于 Itanium处理器。
gendef
- linux 工具可以从dll导出def导出定义文件
- gendef xxx.dll
dlltool
- linux 从dll中提取信息
- dlltool –as-flags=–64 -m i386:x86-64 -k –output-lib x.a –input-def x.def 从dll中导出静态库
audit liunx审计工具
- ausearch 查询日志
- aureport 系统报告
-
auditctl -w x/x -p rwxa e -k ???(筛选)
补丁
- diff -Naur src/ change/ > change.patch
- patch -p1 < change.patch
profile
- /etc/profile.d/
- /etc/profile
lib config
- /etc/ld.so.conf.d/*..conf
- /etc/ld.so.conf
iftop
-
iftop -i eth0 -B -p 202.96.209.133
t 解决流量方向 p 显示端口 N 显示端口或对应协议 n 不反解析域名 l 屏幕过滤
netstat
- t 显示TCP端口
- u 显示UDP端口
- l 仅显示监听套接字
- p 显示进程标识符和程序名称
- n 不进行DNS轮询,显示IP
- a 显示所有socket,包括正在监听的
- c 每隔1秒就重新显示一遍,直到用户中断它
- i 显示所有网络接口的信息
- r 显示核心路由表
- v 显示正在进行的工作
- o 显示时间
nethogs
- nethogs eth0 指定网卡
- d 指定刷新秒
- v 0 KB/s 1 total KB 2 total B 3 total MB
- p 混淆模式
-
a 所有网卡
s 按发送排序 r 按接收排序 m 切换KB B MB KB/s
tcpdump
- 详解
- tcpdump -D 列出设备
- tcpdump -i eth0 指定网卡
- host 指定主机或IP ip1 and (ip2 or ip3) and not ip4
- port
- src 源主机或IP或端口
- dst 目的主机或IP或端口
- tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-fin == 0
- udp
- net
- gateway
- ftp
- src->syn tcpdump ‘tcp[13] = 2’
- des->syn+ack tcpdump ‘tcp[13] = 18’
-
syn syn-ack tcpdump ‘tcp[13] & 2 = 2’ - fin tcpdump ‘tcp[13] & 1 = 1’
- rst tcp dump ‘tcp[13] & 4 = 4’
- 查看HTTP GET 请求 tcpdump -s0 -A ‘tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) » 2):4] = 0x47455420’
- 查看HTTP POST 请求 tcpdump -s0 -A ‘tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) » 2):4] = 0x504f5354)’
-
查看请求响应头及body tcpdump -A -s0 ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)«2)) - ((tcp[12]&0xf0)»2)) != 0)’ tcpdump -X -s 0 ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)«2)) - ((tcp[12]&0xf0)»2)) != 0)’ - ip[2:2] > 576
- 文件格式|24(magic)|8(bigint(s*1000)|bigint(ms))|4(帧len)|4(data_len)|[6(dmac)|6(smac)|2(protocol ip=0x0800)|20-60(iphdr)|…](数据帧)
sudo tcpdump -i en0 '(src port 1980 and dst host 172.30.204.98)' -w xx/xx.cap tcpdump -vvv -X -r xx/xx.cap
ip
ip route
- 路由条目包括了源IP、目的IP、网关IP、scope、dev、type六个要素
- via 下一跳、网关、Gateway 如果是0.0.0.0或没有说明可以直达
- scope link、host、site
- /etc/iproute2/rt_tables 路由表列表
- 0 系统保留表
- 253 default 没特别指定的默认路由都放在改表
- 254 main 没指明路由表的所有路由放在该表
- 255 local 保存本地接口地址:广播地址、NAT地址;由系统维护,用户不得更改
- 1-252 用户定义
- proto 路由设置来源仅显示作用
- ip route 显示main表
- ip route show table n
- ip route show table name
- ip route add default via 192.168.1.1 在main中增加默认网关
- ip route add default via 192.168.1.1 table 1 在1 table中
- ip route add 192.168.4.0/24 via 192.168.166.1 dev wlan0 在main中
- ip route add 192.168.1.9 via 192.168.166.1 dev wlan0
- ip route get 1.1.1.0/24 获取目标地址的路由
- ip route del 192.168.4.0/24 删除main中指定网段的路由
- ip route del table main default 删除main中默认路由
- ip route flush 10.38.0.0/16 删除特定路由
- ip route flush table main 清空主路由表
logrotate
-
/etc/logrotate.d/xx
xx/xx/xx { //可通配符、可多行 monthly/daily/weakly/yearly 按时间轮循 size=50M 按尺寸轮循 maxsize=100M 超过强制滚动 rotate 5 存储5个归档日志,时间久的被删除 dateext 创建日期做后缀 compress gzip压缩 delaycompress 最近的归档不压缩,方便查看 missingok 忽略任意错误 notifempty 日志为空,不轮循 create 644 root root 指定创建新的日志文件权限,重命名原始文件 prerotate/endscript 执行滚动前执行的脚本 postrotate/endscript 执行滚动后执行的脚本,完成后rsyslogd会立刻再次读取配置 }
python
- https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh 一个python隔离环境
- source /root/.bashrc
- conda create -n xxx python=3.6 pip .. other pack
- source activate xxx
- conda install pip
- source deactivate
- conda remove -n xxx –all
- conda create -n yyy –clone xxx
sample
-
find / -name “*.d” -print0 xargs -I{} -0 cp -v {} /Users - 下载文件 scp root@ip:/var/1.txt /1.txt
- 上传文件 scp -P 22 /1.txt root@ip:/var/1.txt
- 下载目录 scp -P 22 -r root@ip:/var/ /www/
- 上传目录 scp -P 22 -r /www/ root@ip:/var/
- apt-get install build-essential
- 不挂起 nohup * &
-
本地端口查看 netstat -anp lsof -i grep 1979 - 检测远端端口 telnet host 80 nmap ip -p port nc -v host port
- 压缩 tar -zcvf rsc.tar.gz rsc
- 解压 tar -zxvf rsc.tar.gz
- deb安装 dpkg -i
- 密钥登陆 .ssh/authorized_keys chmod 600 .ssh/authorized_keys /etc/ssh/sshd_conf 禁止密码
- netstat -lntp 查看开启了哪些端口
- python -m SimpleHTTPServer 7988 简单http服务
- ls -lh
-
find dir1 dir2… -not -path “/vendor/” -name “.go” -not -name “_test.go” wc -l 统计文件数 -
find dir1 dir2… -not -path “/vendor/” -name “.go” -not -name “_test.go” xargs cat wc -l 统计行 - $# 传递到脚本的参数个数
- $* 以一个单字符串显示所有向脚本传递的参数。
- $$ 脚本运行的当前进程ID号
- $! 后台运行的最后一个进程的ID号
- $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
- $- 显示Shell使用的当前选项,与set命令功能相同。
- $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
-
unxz < x.tar.xz tar –delete x/x xz > x.tar.xz 不解压删除 -
echo -n “Enter Password: “ && head -1 </dev/stdin tr -d ‘\n’ shasum -a 256 cut -d” “ -f1 -
ps aux grep xx grep -v grep awk ‘{print $2}’ xargs kill -9 - diskutil erasevolume HFS+ “/Volumes/build-disk” $(hdiutil attach -nomount ram://$((2048 * 1024)))
- diskutil unmount “/Volumes/build-disk”
- hdiutil create -o /x/x -size 8G -volname dname -layout SPUD -fs HFS+J
- hdiutil attach /x/x.dmg -noverify -mountpoint /Volumes/dname
- hdiutil detach /volumes/Install\ macOS\ Mojave
- hdiutil convert /x/x.dmg -format UDTO -o /x/x.cdr(iso格式)
- hdiutil create -verbose -encryption AES-256 -format UDBZ -stdinpass -srcfolder DIR x.DMG
- hdiutil create makehybrid -verbose -encryption AES-256 -stdinpass -srcfolder DIR x.
- sudo /x/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia –volume /Volumes/dname –nointeraction
-
curl https://mesu.apple.com/assets/macos/com_apple_macOSIPSW/com_apple_macOSIPSW.xml grep ipsw
- site:域名 只搜索指定域名
- filetype:mobi 指定文件类型
- x -y 搜索有x但没有y的
- and 空格 + 都代表同时含有
- intitle:docker 标题包含docker
- alintitle 标题同时含有多个关键字,不能跟其它关键字一起使用
- inurl:pass 链接中含有pass
- alinurl 链接中同时含有多个关键字,不能跟其它关键字一起使用
- intext:docker 正文包含docker
- allintext 正文同时含有多个关键字,不能跟其它关键字一起使用
- define:computer 返回computer的定义
- 10 cm in km 查询10里面等于多少千米
- weather:beijing 查询北京天气
- * 通配符
- 200..3000 元 搜索200到3000元 出现的文本
-
OR 不同时出现的两个关键字 - info:www.github.com 返回网站信息
- related:www.github.com 返回类似的网站
- link:nomaldi.io 查询链接到当前链接的所有网页
- linkdomain:nomaldi.io 查询当前网站链接过的网站
- cache:url 查询缓存页面
- 直接输入数学公式返回结果
- inanchor:点击这里 返回按钮里有 点击这里 对应的跳转链接的页面
- daterange:10-20 返回前10到20天的结果
控制台选项
符号|含义 |:-|:-| \33[0m|关闭所有属性 \33[1m|设置高亮度 \33[4m|下划线 \33[5m|闪烁 \33[7m|反显 \33[8m|消隐 \33[30…37m|设置前景色 \33[40…47m|设置背景色 \33[nA|光标上移n行 \33[nB|光标下移n行 \33[nC|光标右移n行 \33[nD|光标左移n行 \33[y;xH|设置光标位置 \33[2J|清屏 \33[K|清除从光标到行尾的内容 \33[s|保存光标位置 \33[u|恢复光标位置 \33[?25l|隐藏光标 \33[?25h|显示光标
控制台前景色 | 背景色从40开始,颜色一样
符号|颜色 |:-|:-| \033[30m|黑色字 \033[31m|红色字 \033[32m|绿色字 \033[33m|黄色字 \033[34m|蓝色字 \033[35m|紫色字 \033[36m|天蓝字 \033[37m|白色字
top
- 为当前系统运行时间
- up 系统运行时间
- user 当前登录用户数
- load average 1分钟,5分钟,15分钟 平均可执行进程百分比
- Tasks 当前进程总数
- running 正在运行的进程数
- sleeping 睡眠的进程数
- stop 停止的进程数
- zombie 僵尸进程数
- Cpu(s): 1. us 用户空间占用CPU百分比 2. sy, 内核空间占用CPU百分比 3. ni 用户进程空间内改变过优先级的进程占用CPU百分比 4. id 空闲CPU 5. wa 等待输入输出的CPU时间百分比 6. hi 硬中断 7. si 软中断 8. st 实时
- Mem 1. total 内存总容量 2. used 使用的物理内存总量 3. free 空闲内存总量 4. buffers 用做内核缓存的内存量
- Swap
- total 交换分区总量
- used 使用的交换分区总量
- free 空闲的交换分区总量
- cached 缓冲的交换区总量
- PID:进程ID
- USER: 真实用户名称
- PR: 优先级
- NI: Nice值,负值表示高优先级,正值表示低优先级
- VIRT:进程使用的虚拟内存总量,单位kb VIRT=SWAP+RES
- RES:进程使用的、未被换出的物理内存大小,单位kb RES=CODE+DATA
- SHR:共享内存大小,单位kb
- S:进程状态 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
- %CPU 上次更新到现在的CPU时间占用百分比
- %MEM 进程使用的物理内存百分比
- TIME+ 进程使用的CPU时间总计,单位1/100秒
- COMMAND 命令名/命令行 进程名称
iostat
vmstat
脚本输入密码
if [ "`echo -n`" = "-n" ]; then
n=""
c="\c"
else
n="-n"
c=""
fi
echo ${n} 123456${c} | hdiutil create -verbose -debug -puppetstrings -volname "${game%%-*}" -srcfolder ${game} -format UDZO -imagekey zlib-level=9 -encryption AES-256 -stdinpass -ov ${game%%-*}.dmg || exit -1