helper.sh 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. #!/bin/bash
  2. # 获取系统信息
  3. GetSysInfo() {
  4. if [ -s "/etc/redhat-release" ]; then
  5. SYS_VERSION=$(cat /etc/redhat-release)
  6. elif [ -s "/etc/issue" ]; then
  7. SYS_VERSION=$(cat /etc/issue)
  8. fi
  9. SYS_INFO=$(uname -a)
  10. SYS_BIT=$(getconf LONG_BIT)
  11. MEM_TOTAL=$(free -m | grep Mem | awk '{print $2}')
  12. CPU_INFO=$(getconf _NPROCESSORS_ONLN)
  13. echo -e ${SYS_VERSION}
  14. echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO}
  15. echo -e ${SYS_INFO}
  16. }
  17. #获取网卡信息
  18. GetNetCard() {
  19. if [ "$1" == "1" ]; then
  20. if [ -d "/sys/devices/virtual/net" ]; then
  21. ls /sys/devices/virtual/net
  22. fi
  23. else
  24. if [ -d "/sys/devices/virtual/net" ] && [ -d "/sys/class/net" ]; then
  25. ls /sys/class/net/ | grep -v "$(ls /sys/devices/virtual/net/)"
  26. fi
  27. fi
  28. }
  29. GetTimeZone(){
  30. timedatectl | grep "Time zone" | awk '{print $3}'
  31. }
  32. #查看网卡状态
  33. #param 网卡名称
  34. CatNetCardState() {
  35. if [ -e "/sys/class/net/$1/operstate" ]; then
  36. cat /sys/class/net/$1/operstate
  37. fi
  38. }
  39. #获取docker根目录
  40. GetDockerRootDir() {
  41. if hash docker 2>/dev/null; then
  42. docker info | grep 'Docker Root Dir' | awk -F ':' '{print $2}'
  43. else
  44. echo ""
  45. fi
  46. }
  47. #删除安装应用文件夹
  48. #param 需要删除的文件夹路径
  49. DelAppConfigDir() {
  50. if [ -d $1 ]; then
  51. rm -fr $1
  52. fi
  53. }
  54. #zerotier本机已加入的网络
  55. #result start,end,sectors
  56. GetLocalJoinNetworks() {
  57. zerotier-cli listnetworks -j
  58. }
  59. #移除挂载点,删除已挂在的文件夹
  60. UMountPorintAndRemoveDir() {
  61. DEVICE=$1
  62. MOUNT_POINT=$(mount | grep ${DEVICE} | awk '{ print $3 }')
  63. if [[ -z ${MOUNT_POINT} ]]; then
  64. ${log} "Warning: ${DEVICE} is not mounted"
  65. else
  66. umount -lf ${DEVICE}
  67. /bin/rmdir "${MOUNT_POINT}"
  68. fi
  69. }
  70. #格式化fat32磁盘
  71. #param 需要格式化的目录 /dev/sda1
  72. #param 格式
  73. FormatDisk() {
  74. if [ "$2" == "fat32" ]; then
  75. mkfs.vfat -F 32 $1
  76. elif [ "$2" == "ntfs" ]; then
  77. mkfs.ntfs $1
  78. elif [ "$2" == "ext4" ]; then
  79. mkfs.ext4 -m 1 -F $1
  80. elif [ "$2" == "exfat" ]; then
  81. mkfs.exfat $1
  82. else
  83. mkfs.ext4 -m 1 -F $1
  84. fi
  85. }
  86. #删除分区
  87. #param 路径 /dev/sdb
  88. #param 删除分区的区号
  89. DelPartition() {
  90. fdisk $1 <<EOF
  91. d
  92. $2
  93. wq
  94. EOF
  95. }
  96. #添加分区只有一个分区
  97. #param 路径 /dev/sdb
  98. #param 要挂载的目录
  99. AddPartition() {
  100. DelPartition $1
  101. parted -s $1 mklabel gpt
  102. parted -s $1 mkpart primary ext4 0 100%
  103. P=`lsblk -r $1 | sort | grep part | head -n 1 | awk '{print $1}'`
  104. mkfs.ext4 -m 1 -F /dev/${P}
  105. partprobe $1
  106. }
  107. #磁盘类型
  108. GetDiskType() {
  109. fdisk $1 -l | grep Disklabel | awk -F: '{print $2}'
  110. }
  111. #获磁盘的插入路径
  112. #param 路径 /dev/sda
  113. GetPlugInDisk() {
  114. fdisk -l | grep 'Disk' | grep 'sd' | awk -F , '{print substr($1,11,3)}'
  115. }
  116. #获取磁盘状态
  117. #param 磁盘路径
  118. GetDiskHealthState() {
  119. smartctl -H $1 | grep "SMART Health Status" | awk -F ":" '{print$2}'
  120. }
  121. #获取磁盘字节数量和扇区数量
  122. #param 磁盘路径 /dev/sda
  123. #result bytes
  124. #result sectors
  125. GetDiskSizeAndSectors() {
  126. fdisk $1 -l | grep "$1:" | awk -F, 'BEGIN {OFS="\n"}{print $2,$3}' | awk '{print $1}'
  127. }
  128. #获取磁盘分区数据扇区
  129. #param 磁盘路径 /dev/sda
  130. #result start,end,sectors
  131. GetPartitionSectors() {
  132. fdisk $1 -l | grep "$1[1-9]" | awk 'BEGIN{OFS=","}{print $1,$2,$3,$4}'
  133. }
  134. #检查没有使用的挂载点删除文件夹
  135. AutoRemoveUnuseDir() {
  136. DIRECTORY="/DATA/"
  137. dir=$(ls -l $DIRECTORY | grep "USB_Storage_sd[a-z][0-9]" | awk '/^d/ {print $NF}')
  138. for i in $dir; do
  139. path="$DIRECTORY$i"
  140. mountStr=$(mountpoint $path)
  141. notMountpoint="is not a mountpoint"
  142. if [[ $mountStr =~ $notMountpoint ]]; then
  143. if [ "$(ls -A $path)" = "" ]; then
  144. rm -fr $path
  145. else
  146. echo "$path is not empty"
  147. fi
  148. fi
  149. done
  150. }
  151. #重载samba服务
  152. ReloadSamba() {
  153. /etc/init.d/smbd reload
  154. }
  155. # $1=sda1
  156. # $2=volume{1}
  157. do_mount() {
  158. DEVBASE=$1
  159. DEVICE="${DEVBASE}"
  160. # See if this drive is already mounted, and if so where
  161. MOUNT_POINT=$(lsblk -o name,mountpoint | grep ${DEVICE} | awk '{print $2}')
  162. if [ -n "${MOUNT_POINT}" ]; then
  163. ${log} "Warning: ${DEVICE} is already mounted at ${MOUNT_POINT}"
  164. exit 1
  165. fi
  166. # Get info for this drive: $ID_FS_LABEL and $ID_FS_TYPE
  167. eval $(blkid -o udev ${DEVICE} | grep -i -e "ID_FS_LABEL" -e "ID_FS_TYPE")
  168. LABEL=$2
  169. if grep -q " ${LABEL} " /etc/mtab; then
  170. # Already in use, make a unique one
  171. LABEL+="-${DEVBASE}"
  172. fi
  173. DEV_LABEL="${LABEL}"
  174. # Use the device name in case the drive doesn't have label
  175. if [ -z ${DEV_LABEL} ]; then
  176. DEV_LABEL="${DEVBASE}"
  177. fi
  178. MOUNT_POINT="${DEV_LABEL}"
  179. ${log} "Mount point: ${MOUNT_POINT}"
  180. mkdir -p ${MOUNT_POINT}
  181. case ${ID_FS_TYPE} in
  182. vfat)
  183. mount -t vfat -o rw,relatime,users,gid=100,umask=000,shortname=mixed,utf8=1,flush ${DEVICE} ${MOUNT_POINT}
  184. ;;
  185. ext[2-4])
  186. mount -o noatime ${DEVICE} ${MOUNT_POINT} >/dev/null 2>&1
  187. ;;
  188. exfat)
  189. mount -t exfat ${DEVICE} ${MOUNT_POINT} >/dev/null 2>&1
  190. ;;
  191. ntfs)
  192. ntfs-3g ${DEVICE} ${MOUNT_POINT}
  193. ;;
  194. iso9660)
  195. mount -t iso9660 ${DEVICE} ${MOUNT_POINT}
  196. ;;
  197. *)
  198. /bin/rmdir "${MOUNT_POINT}"
  199. exit 0
  200. ;;
  201. esac
  202. }
  203. # $1=sda1
  204. do_umount() {
  205. log="logger -t usb-mount.sh -s "
  206. DEVBASE=$1
  207. DEVICE="${DEVBASE}"
  208. MOUNT_POINT=$(mount | grep ${DEVICE} | awk '{ print $3 }')
  209. if [[ -z ${MOUNT_POINT} ]]; then
  210. ${log} "Warning: ${DEVICE} is not mounted"
  211. else
  212. /bin/kill -9 $(lsof ${MOUNT_POINT})
  213. umount -l ${DEVICE}
  214. ${log} "Unmounted ${DEVICE} from ${MOUNT_POINT}"
  215. if [ "`ls -A ${MOUNT_POINT}`" = "" ]; then
  216. /bin/rm -fr "${MOUNT_POINT}"
  217. fi
  218. sed -i.bak "\@${MOUNT_POINT}@d" /var/log/usb-mount.track
  219. fi
  220. }
  221. # $1=/mnt/volume1/data.img
  222. # $2=100G
  223. PackageDocker() {
  224. image=$1
  225. docker="/mnt/casa_docker"
  226. #判断目录docker存在不存在则创建,存在检查是否为空
  227. if [ ! -d "$docker" ]; then
  228. mkdir ${docker}
  229. fi
  230. if [ "$(ls -A $docker)" = "" ]; then
  231. echo "$docker count is 0"
  232. else
  233. mkdir ${docker}_bak
  234. mv -r ${docker} ${docker}_bak
  235. fi
  236. daemon="/etc/docker/daemon.json"
  237. #1创建img文件在挂载的目录
  238. fallocate -l $2 $image
  239. #2初始化img文件
  240. mkfs -t ext4 $image
  241. #3挂载img文件
  242. sudo mount -o loop $image $docker
  243. #4给移动/var/lib/docker数据到img挂载的目录
  244. systemctl stop docker.socket
  245. systemctl stop docker
  246. cp -r /var/lib/docker/* ${docker}/
  247. #5在/etc/docker写入daemon.json(需要检查)
  248. if [ -d "$daemon" ]; then
  249. mv -r $daemon ${daemon}.bak
  250. fi
  251. echo "{\"data-root\": \"$docker\"}" >$daemon
  252. #删除老数据腾出空间
  253. #rm -fr /var/lib/docker
  254. systemctl start docker.socket
  255. systemctl start docker
  256. }
  257. DockerImgMove() {
  258. image=$1
  259. systemctl stop docker.socket
  260. systemctl stop docker
  261. sudo umount -f $image
  262. }
  263. GetDockerDataRoot() {
  264. docker info | grep "Docker Root Dir:"
  265. }
  266. SetLink() {
  267. ln -s /mnt/casa_sda1/AppData /DATA/AppData
  268. #删除所有软链
  269. find /DATA -type l -delete
  270. }
  271. #压缩文件夹
  272. TarFolder() {
  273. #压缩
  274. tar -zcvf data.tar.gz -C/DATA/ AppDataBak/
  275. #解压
  276. tar zxvf data.tar.gz
  277. #查看某文件夹下的所有包括子文件夹文件
  278. ls /DATA/Media -lR | grep "^-" | wc -l
  279. # ls -lR|grep "^d"| wc -l 查看某个文件夹下文件夹的个数,包括子文件夹下的文件夹个数。
  280. #查看固定文件夹大小
  281. du -sh /DATA
  282. }
  283. USB_Move_File() {
  284. ((EUID)) && sudo_cmd="sudo"
  285. $sudo_cmd cp -rf /casaOS/server/shell/11-usb-mount.rules /etc/udev/rules.d/
  286. $sudo_cmd chmod +x /casaOS/server/shell/usb-mount.sh
  287. $sudo_cmd cp -rf /casaOS/server/shell/usb-mount@.service /etc/systemd/system/
  288. }
  289. USB_Remove_File() {
  290. ((EUID)) && sudo_cmd="sudo"
  291. $sudo_cmd rm -fr /etc/udev/rules.d/11-usb-mount.rules
  292. $sudo_cmd rm -fr /etc/systemd/system/usb-mount@.service
  293. }