常用命令

常用命令

Posted by nomadli on January 15, 2016

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自定义
  • 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 命令

  1. -n 使用安静(silent)模式
  2. -e 直接在命令列模式上进行 sed 的动作编辑;
  3. -f -f filename 运行filename内的 sed 动作;
  4. -r sed 支持延伸型正则表达式。默认是基础正则表达式
  5. -i 直接修改读取的文件内容,而不是输出到终端。
  6. sed [n1[,n2]] function 可选n1行到n2行
  7. function a新增 c取代 d删除 i插入 p列印 s取代

vim

  1. :help、:q、:wq
  2. :set nu 显示行号
  3. /需查找的词\c 向后查找 \c 忽略大小写
  4. ?需查找的词\c 向前查找 \c 忽略大小写
  5. n向下查找下一个 N向上查找下一个
  6. Ctrl+f 向下翻页 Ctrl+b 向上翻页
  7. Shift+$行尾 Shift+ 行头
  8. gg文件开始 GG文件结尾
  9. w按词向下移动 b按词向上移动
  10. dd 删除行、d2d向下删除两行、x删除字、dw删除词、d2w删除2个词
  11. p向下粘帖刚刚删除的行货字符等、P向上粘帖、Shift+Insert
  12. :/原词/替换词/g g替换每行命中所有词, 没有g只替换每行第一个命中词
  13. u 回退、Ctrl+R重做
  14. i 插入、a追加、O向前插入行、o向后插入行

brew

  1. brew update 更新信息
  2. brew outdated 查看哪些可以升级
  3. brew upgrade [xxx] 升级全部或指定软件
  4. brew clean 清理旧的版本
  5. brew search xxxx
  6. brew info xxx
  7. cd $(brew –repo) && git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
  8. cd $(brew –repo)/Library/Taps/homebrew/homebrew-core && git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
  9. export “HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles”
  10. brew doctor 诊断
  11. brew tap 组织名/源名 http://github.com/apple/homebrew-apple 添加三方源
  12. brew untap 组织名/源名 删除三方源
  13. 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服务脚本

  1. rcS.d->rc(0-6).d->rc.local
  2. /ect/rc(0-6).d 0-6类别的启动脚本 K开头的脚本比S开头的早运行 0关机 1 单用户 2网络多用户 3网络服务多用户 4 5 6重启
  3. 脚本内容 start stop reload restart force-reload
  4. action $"Starting name:" nohup /*/s param >/dev/null 2>&1 &
  5. pidof name 获取pid
  6. killproc -p pidfile -TERM "name"
  7. 脚本放在/etc/init.d
  8. update-rc.d service <enable disable start stop> [order级别] [1 2 3类别]
  9. 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 服务脚本

  1. /usr/lib/systemd/system 脚本.service
  2. systemctl <enable start status stop kill restart reset-failed> name
  3. systemctl cat name 显示脚本
  4. systemctl list-dependencies multi-user.target
  5. systemctl isolate shutdown.target 切换target
  6. systemctl daemon-reload 重新加载配置
  7. 脚本 [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

  8. 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

  9. sd_notify(0, “WATCHDOG=1”);
  10. sd_notify(0, “WATCHDOG_USEC=20000000”)
  11. sd_event_set_watchdog()
  12. sd_watchdog_enabled()
  13. systemd-analyze blame xxx 分析启动耗时
  14. systemd-analyze critical-chain xxx查看启动瀑布流
  15. systemctl list-units 查看所有系统运行单元
  16. systemctl list-units –all
  17. systemctl list-units –all –state=inactive 没有运行的
  18. systemctl list-units –failed 所有加载失败的
  19. systemctl list-units –type=service 列出单元为service的
  20. 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

google

  • 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

  1. 为当前系统运行时间
  2. up 系统运行时间
  3. user 当前登录用户数
  4. load average 1分钟,5分钟,15分钟 平均可执行进程百分比
  5. Tasks 当前进程总数
  6. running 正在运行的进程数
  7. sleeping 睡眠的进程数
  8. stop 停止的进程数
  9. zombie 僵尸进程数
  10. Cpu(s): 1. us 用户空间占用CPU百分比 2. sy, 内核空间占用CPU百分比 3. ni 用户进程空间内改变过优先级的进程占用CPU百分比 4. id 空闲CPU 5. wa 等待输入输出的CPU时间百分比 6. hi 硬中断 7. si 软中断 8. st 实时
  11. Mem 1. total 内存总容量 2. used 使用的物理内存总量 3. free 空闲内存总量 4. buffers 用做内核缓存的内存量
  12. Swap
    1. total 交换分区总量
    2. used 使用的交换分区总量
    3. free 空闲的交换分区总量
    4. cached 缓冲的交换区总量
  13. PID:进程ID
  14. USER: 真实用户名称
  15. PR: 优先级
  16. NI: Nice值,负值表示高优先级,正值表示低优先级
  17. VIRT:进程使用的虚拟内存总量,单位kb VIRT=SWAP+RES
  18. RES:进程使用的、未被换出的物理内存大小,单位kb RES=CODE+DATA
  19. SHR:共享内存大小,单位kb
  20. S:进程状态 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
  21. %CPU 上次更新到现在的CPU时间占用百分比
  22. %MEM 进程使用的物理内存百分比
  23. TIME+ 进程使用的CPU时间总计,单位1/100秒
  24. 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