helper.sh 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  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/)" -w
  26. fi
  27. fi
  28. }
  29. GetTimeZone(){
  30. timedatectl | grep "Time zone" | awk '{printf $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. #格式化fat32磁盘
  60. #param 需要格式化的目录 /dev/sda1
  61. #param 格式
  62. FormatDisk() {
  63. if [ "$2" == "fat32" ]; then
  64. mkfs.vfat -F 32 $1
  65. elif [ "$2" == "ntfs" ]; then
  66. mkfs.ntfs $1
  67. elif [ "$2" == "ext4" ]; then
  68. mkfs.ext4 -m 1 -F $1
  69. elif [ "$2" == "exfat" ]; then
  70. mkfs.exfat $1
  71. else
  72. mkfs.ext4 -m 1 -F $1
  73. fi
  74. }
  75. #删除分区
  76. #param 路径 /dev/sdb
  77. #param 删除分区的区号
  78. DelPartition() {
  79. fdisk $1 <<EOF
  80. d
  81. $2
  82. wq
  83. EOF
  84. }
  85. #添加分区只有一个分区
  86. #param 路径 /dev/sdb
  87. #param 要挂载的目录
  88. AddPartition() {
  89. DelPartition $1
  90. parted -s $1 mklabel gpt
  91. parted -s $1 mkpart primary ext4 0 100%
  92. P=`lsblk -r $1 | sort | grep part | head -n 1 | awk '{print $1}'`
  93. mkfs.ext4 -m 1 -F /dev/${P}
  94. partprobe $1
  95. }
  96. #磁盘类型
  97. GetDiskType() {
  98. fdisk $1 -l | grep Disklabel | awk -F: '{print $2}'
  99. }
  100. #获磁盘的插入路径
  101. #param 路径 /dev/sda
  102. GetPlugInDisk() {
  103. fdisk -l | grep 'Disk' | grep 'sd' | awk -F , '{print substr($1,11,3)}'
  104. }
  105. #获取磁盘字节数量和扇区数量
  106. #param 磁盘路径 /dev/sda
  107. #result bytes
  108. #result sectors
  109. GetDiskSizeAndSectors() {
  110. fdisk $1 -l | grep "$1:" | awk -F, 'BEGIN {OFS="\n"}{print $2,$3}' | awk '{print $1}'
  111. }
  112. #获取磁盘分区数据扇区
  113. #param 磁盘路径 /dev/sda
  114. #result start,end,sectors
  115. GetPartitionSectors() {
  116. fdisk $1 -l | grep "$1[1-9]" | awk 'BEGIN{OFS=","}{print $1,$2,$3,$4}'
  117. }
  118. #检查没有使用的挂载点删除文件夹
  119. AutoRemoveUnuseDir() {
  120. DIRECTORY="/DATA/"
  121. dir=$(ls -l $DIRECTORY | grep "USB_Storage_sd[a-z][0-9]" | awk '/^d/ {print $NF}')
  122. for i in $dir; do
  123. path="$DIRECTORY$i"
  124. mountStr=$(mountpoint $path)
  125. notMountpoint="is not a mountpoint"
  126. if [[ $mountStr =~ $notMountpoint ]]; then
  127. if [ "$(ls -A $path)" = "" ]; then
  128. rm -fr $path
  129. else
  130. echo "$path is not empty"
  131. fi
  132. fi
  133. done
  134. }
  135. #重载samba服务
  136. ReloadSamba() {
  137. /etc/init.d/smbd reload
  138. }
  139. # $1=sda1
  140. # $2=volume{1}
  141. do_mount() {
  142. DEVBASE=$1
  143. DEVICE="${DEVBASE}"
  144. # See if this drive is already mounted, and if so where
  145. MOUNT_POINT=$(lsblk -o name,mountpoint | grep ${DEVICE} | awk '{print $2}')
  146. if [ -n "${MOUNT_POINT}" ]; then
  147. ${log} "Warning: ${DEVICE} is already mounted at ${MOUNT_POINT}"
  148. exit 1
  149. fi
  150. # Get info for this drive: $ID_FS_LABEL and $ID_FS_TYPE
  151. eval $(blkid -o udev ${DEVICE} | grep -i -e "ID_FS_LABEL" -e "ID_FS_TYPE")
  152. LABEL=$2
  153. if grep -q " ${LABEL} " /etc/mtab; then
  154. # Already in use, make a unique one
  155. LABEL+="-${DEVBASE}"
  156. fi
  157. DEV_LABEL="${LABEL}"
  158. # Use the device name in case the drive doesn't have label
  159. if [ -z ${DEV_LABEL} ]; then
  160. DEV_LABEL="${DEVBASE}"
  161. fi
  162. MOUNT_POINT="${DEV_LABEL}"
  163. ${log} "Mount point: ${MOUNT_POINT}"
  164. mkdir -p ${MOUNT_POINT}
  165. case ${ID_FS_TYPE} in
  166. vfat)
  167. mount -t vfat -o rw,relatime,users,gid=100,umask=000,shortname=mixed,utf8=1,flush ${DEVICE} ${MOUNT_POINT}
  168. ;;
  169. ext[2-4])
  170. mount -o noatime ${DEVICE} ${MOUNT_POINT} >/dev/null 2>&1
  171. ;;
  172. exfat)
  173. mount -t exfat ${DEVICE} ${MOUNT_POINT} >/dev/null 2>&1
  174. ;;
  175. ntfs)
  176. ntfs-3g ${DEVICE} ${MOUNT_POINT}
  177. ;;
  178. iso9660)
  179. mount -t iso9660 ${DEVICE} ${MOUNT_POINT}
  180. ;;
  181. *)
  182. /bin/rmdir "${MOUNT_POINT}"
  183. exit 0
  184. ;;
  185. esac
  186. }
  187. # $1=sda1
  188. do_umount() {
  189. log="logger -t usb-mount.sh -s "
  190. DEVBASE=$1
  191. DEVICE="${DEVBASE}"
  192. MOUNT_POINT=$(mount | grep ${DEVICE} | awk '{ print $3 }')
  193. if [[ -z ${MOUNT_POINT} ]]; then
  194. ${log} "Warning: ${DEVICE} is not mounted"
  195. else
  196. /bin/kill -9 $(lsof ${MOUNT_POINT})
  197. umount -l ${DEVICE}
  198. ${log} "Unmounted ${DEVICE} from ${MOUNT_POINT}"
  199. if [ "`ls -A ${MOUNT_POINT}`" = "" ]; then
  200. /bin/rm -fr "${MOUNT_POINT}"
  201. fi
  202. sed -i.bak "\@${MOUNT_POINT}@d" /var/log/usb-mount.track
  203. fi
  204. }
  205. # $1=/mnt/volume1/data.img
  206. # $2=100G
  207. PackageDocker() {
  208. image=$1
  209. docker="/mnt/casa_docker"
  210. #判断目录docker存在不存在则创建,存在检查是否为空
  211. if [ ! -d "$docker" ]; then
  212. mkdir ${docker}
  213. fi
  214. if [ "$(ls -A $docker)" = "" ]; then
  215. echo "$docker count is 0"
  216. else
  217. mkdir ${docker}_bak
  218. mv -r ${docker} ${docker}_bak
  219. fi
  220. daemon="/etc/docker/daemon.json"
  221. #1创建img文件在挂载的目录
  222. fallocate -l $2 $image
  223. #2初始化img文件
  224. mkfs -t ext4 $image
  225. #3挂载img文件
  226. sudo mount -o loop $image $docker
  227. #4给移动/var/lib/docker数据到img挂载的目录
  228. systemctl stop docker.socket
  229. systemctl stop docker
  230. cp -r /var/lib/docker/* ${docker}/
  231. #5在/etc/docker写入daemon.json(需要检查)
  232. if [ -d "$daemon" ]; then
  233. mv -r $daemon ${daemon}.bak
  234. fi
  235. echo "{\"data-root\": \"$docker\"}" >$daemon
  236. #删除老数据腾出空间
  237. #rm -fr /var/lib/docker
  238. systemctl start docker.socket
  239. systemctl start docker
  240. }
  241. DockerImgMove() {
  242. image=$1
  243. systemctl stop docker.socket
  244. systemctl stop docker
  245. sudo umount -f $image
  246. }
  247. GetDockerDataRoot() {
  248. docker info | grep "Docker Root Dir:"
  249. }
  250. SetLink() {
  251. ln -s /mnt/casa_sda1/AppData /DATA/AppData
  252. #删除所有软链
  253. find /DATA -type l -delete
  254. }
  255. #压缩文件夹
  256. TarFolder() {
  257. #压缩
  258. tar -zcvf data.tar.gz -C/DATA/ AppDataBak/
  259. #解压
  260. tar zxvf data.tar.gz
  261. #查看某文件夹下的所有包括子文件夹文件
  262. ls /DATA/Media -lR | grep "^-" | wc -l
  263. # ls -lR|grep "^d"| wc -l 查看某个文件夹下文件夹的个数,包括子文件夹下的文件夹个数。
  264. #查看固定文件夹大小
  265. du -sh /DATA
  266. }
  267. USB_Start_Auto() {
  268. ((EUID)) && sudo_cmd="sudo"
  269. $sudo_cmd systemctl enable devmon@devmon
  270. $sudo_cmd systemctl start devmon@devmon
  271. }
  272. USB_Stop_Auto() {
  273. ((EUID)) && sudo_cmd="sudo"
  274. $sudo_cmd systemctl stop devmon@devmon
  275. $sudo_cmd systemctl disable devmon@devmon
  276. $sudo_cmd udevil clean
  277. }
  278. GetDeviceTree(){
  279. cat /proc/device-tree/model
  280. }
  281. # restart samba service
  282. RestartSMBD(){
  283. $sudo_cmd systemctl restart smbd
  284. }
  285. # edit user password $1:username
  286. EditSmabaUserPassword(){
  287. $sudo_cmd smbpasswd $1
  288. }
  289. AddSmabaUser(){
  290. $sudo_cmd useradd $1
  291. $sudo_cmd smbpasswd -a $1 <<EOF
  292. $2
  293. $2
  294. EOF
  295. }
  296. # $1:username $2:host $3:share $4:port $5:mountpoint $6:password
  297. MountCIFS(){
  298. $sudo_cmd mount -t cifs -o username=$1,password=$6,port=$4 //$2/$3 $5
  299. }
  300. UDEVILUmount(){
  301. $sudo_cmd udevil umount -f $1
  302. }