顯示具有 Programs-Bash Shell 標籤的文章。 顯示所有文章
顯示具有 Programs-Bash Shell 標籤的文章。 顯示所有文章

2015年12月17日 星期四

架設鏡像站用 getdeb.sh

基本說明:
由其他鏡像站下載到自己的主機(通常選國家單位的 Mirror),
再自建 Mirror 鏡像站,於 Debian 常用指令 `debmirror` 來達成。
下面寫一個 Script 設定 debmirror 指令常用到的參數:
## 設定要下載之鏡像站(選一個)
HOST=ftp.tw.debian.org
#HOST=debian.nctu.edu.tw
#HOST=opensource.nchc.org.tw
#HOST=ftp.wa.au.debian.org
#HOST=120.117.72.71
#HOST=ftp.debian.org

## 自架 Mirror 之路徑
DEST=/home/ftp/debian

## 要載的 Debian 版本
DIST=jessie,jessie-updates,wheezy,wheezy-updates

## 要載的機器類型
ARCH=i386,amd64

## 要 rsync 的目錄分類
SECTION=main,contrib,non-free,main/debian-installer,contrib/debian-installer,non-free/debian-installer,main/source,contrib/source,non-free/source

## mirror 之起始根目錄
INPATH=":debian"
#release=trusty,trusty-security,trusty-updates

#================================================
debmirror \
        --method=rsync \
        --nosource \
        --ignore-release-gpg \
        --diff=none -p \
        --host=${HOST} \
        --arch=${ARCH} \
        --dist=${DIST} \
        --root=${INPATH} \
        --section=${SECTION} \
        --i18n \
        ${DEST} ;

#--di-arch=${ARCH} \
#--di-dist=stable \
#--ignore-small-errors \
#================================================
## 下面是 PM 寫的版本:
#
#
#debmirror \
#        --arch=i386,amd64,armel,armhf,sha4 \
#       --dist=jessie,jessie-updates \
#       --di-arch=i386,amd64,armel \
#       --di-dist=stable \
#       --host=$HOST \
#       --root=":debian" \
#       --diff=none -p \
#       --nosource \
#       --method=rsync \
#       --section main,contrib,non-free,main/debian-installer,main/source,contrib/source,non-free/source \
#       --i18n \
#       --ignore-release-gpg /home/ftp/debian/ ;
#
#       #--section main/source,contrib/source,non-free/source \
#       #--section non-free,contrib,main,main/debian-installer,main/installer-armel,main/i18n,main/source \
##debmirror \
##      -v --nosource -d lenny/updates -a i386 \
##      -s non-free,contrib,main,main/debian-installer \
# #    --method=http -h security.debian.org \
# #    --ignore-release-gpg -r /debian-security /home/ftp/debian/security/
##      --section main,contrib,non-free,main/debian-installer,main/installer-armel,main/i18n,main/source \
#
##wget -r -l1 -nH ftp://$HOST/debian/dists/squeeze/main/source/
##date



2015年12月4日 星期五

筆電低電壓警告

http://community.linuxmint.com/tutorial/view/1752
---
apt-get install mpg123
---
自行下載一個音訊檔做為警告聲,命名為:alarm2.mp3
---
寫一個 Shell Script  → lowPowerAlarm.sh
設定為電量 40~15% 時,每分鐘做一次 alarm;
而當低於 15% 時,做連續不中斷的 alarm 警告聲。
---
#!/bin/bash
#!/bin/bash
# Low Battery notification

# 得到目前電量值(%)
BATTERY=`acpi -b | grep -P -o '[0-9]+(?=%)'`

# 音訊檔路徑
ALARM_LOCATION=/home/$USER/Other_work/alarm.mp3

# 設定電量臨界值(普通低電量做單響及超低電量做連續發聲)
LOW_POWER=40
VERYLOW_POWER=15

# 檢查有無 charged,若有則代表有接上電源($?=0),不做警告聲響
acpi -b | grep charged > /dev/null
if [ $? != 0 ]; then
        if [ $BATTERY -le $LOW_POWER ] && [ $BATTERY -gt $VERYLOW_POWER ]; then
                mpg123 $ALARM_LOCATION
        elif [ $BATTERY -le $VERYLOW_POWER ]; then
                # crontab 設為每分鐘掃,故這邊設為連響 59 秒
                for i in `seq 1 59`
                do
                        acpi -b | grep charged > /dev/null
                        if [ $? != 0 ]; then
                                mpg123 $ALARM_LOCATION
                                if [ $BATTERY -gt $VERYLOW_POWER ] ; then
                                        # 若電量大於 $VERYLOW_POWER 值就離開警告
聲
                                        exit 0
                                fi
                        else
                                # 若有接上電,就直接離開連續警告聲
                                exit 0
                        fi
                        sleep 1
                done
        fi
else
        echo NOTHING TO DO 
fi
exit 0
---
在加入 crontab 列表 (其中 &> /dev/null 是為了不讓 crontab 寄 mail 至系統。)
自行設定時間(這邊設任何時間每分鐘執行)、 .sh 執行者及指令:
* * * * * $USER /bin/sh $ScriptLocation/lowPoserAlarm.sh &> /dev/null
---
單純查看 Battery 電量可以使用:
printf 'BATTERY: %i %%\n' $(acpi -b | grep -P -o [0-9]+\(?=%\))





2014年12月2日 星期二

一次建立20個使用者帳號

利用 Bash / Shell Script 來一次完成建置 20 個使用者帳號,
且要給每個使用者加入不同的登入密碼,
並且強制要求第一次登入後,要修改使用者密碼。

設定群組:s100
建立帳號:s100a000 ~ s100a020
設置密碼:`date +%N` 來產生亂數

vi buildAccount.sh
# !/bin/bash
# 2014/12/02    Author:Kai-Lin Liao
# Create 20 user
# account:   s100a000 ~ s100a020,
# usergroup: s100

# Setting Parameter
GROUP=s100
USER_HEAD=s100a0

# Check root
if [ `whoami` != "root" ]
then
        echo "===== Permision Deny ====="
        echo "You need login root."
        echo
        exit 0
fi

# Create group
groupadd s100

# Create account 0~9
for i in `seq 0 9`
do
        USER_NAME=${USER_HEAD}0$i
        # Setting account password is ramdon
        PASSWD=`date +%N`
        echo "Creating User 0$i: $USER_NAME"
        echo "Set Password: $PASSWD"
        useradd -m -s /bin/bash -g $GROUP $USER_NAME
        echo $USER_NAME:$PASSWD | chpasswd
        chage -d 0 $USER_NAME
done

# Create account 10~20
for i in `seq 10 20`
do
        USER_NAME=${USER_HEAD}$i
        # Setting account password is ramdon
        PASSWD=`date +%N`
        echo "Creating User $i: $USER_NAME"
        echo "Set Password: $PASSWD"
        useradd -m -s /bin/bash -g $GROUP $USER_NAME
        echo $USER_NAME:$PASSWD | chpasswd
        chage -d 0 $USER_NAME
done



刪除剛剛建的群組:s100,及使用者s100a000 ~ s100a020

vi deleteAccount.sh
# !/bin/bash
# 2014/12/02    Author:Kai-Lin Liao
# Delete 20 user 
# account:   s100a000 ~ s100a020,

# Setting Parameter
GROUP=s100
USER_HEAD=s100a0

# Check root
if [ `whoami` != "root" ]
then
        echo "===== Permision Deny ====="
        echo "You need login root."
        echo
        exit 0
fi


# Create account 0~9
for i in `seq 0 9`
do
        USER_NAME=${USER_HEAD}0$i
        echo "Delete User 0$i: $USER_NAME"
        userdel -r $USER_NAME
done

# Create account 10~20
for i in `seq 10 20`
do
        USER_NAME=${USER_HEAD}$i
        echo "Delete User $i: $USER_NAME"
        userdel -r $USER_NAME
done

# Delete group
groupdel $GROUP

2014年10月12日 星期日

半自動備份檔案

這是我寫來備份一些辛苦調好的設定檔跟重要資料用。

說明:使用需要 ROOT 權限,需要裝有 xz-utils 套件,
要使用需要修改幾個地方: 

09 USER = 這邊改你自己的一般使用者帳號。

10 SAVE_AS = 要先建立好要存放備份檔的地方,
我個人是放 /bak_dir 下,再上傳到雲端空間。


最後是註解圍起來的地方「Backup List」,請自訂你想要備份的檔案、目錄。
vi Backup_data.sh
#!/bin/bash
# 2014/06/24 KLin
# Backup My data.

# parameter setting
TIME=`date +"%Y%m%d"`

# Use Setting
USER=youUsserName
SAVE_AS=/bak_dir

BAK_DIR=backup_$TIME
BAK_TARGET=$SAVE_AS/$BAK_DIR

# check account
if [ ! `whoami` == root ];then
        echo "Permision Deny, you're no root."
        exit 0
fi

# check directory
if [ -e "$BAK_TARGET.tar.xz" ];then
        echo "Directory exist!" 
        exit 0
fi

# build directory
mkdir $BAK_TARGET
mkdir -p $BAK_TARGET/root_dir
mkdir -p $BAK_TARGET/${USER}_dir

##############################################################
## Backup List
# system backup list
rsync -av /etc $BAK_TARGET/root_dir

# root backup list
rsync -av /root/.bashrc $BAK_TARGET/root_dir
rsync -av /root/.vimrc $BAK_TARGET/root_dir
rsync -av /root/* $BAK_TARGET/root_dir

# user backup list
rsync -av /home/$USER/.bashrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.conkyrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.vimrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.xinitrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/.asoundrc $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/bin $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/images $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Notes $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Other_work $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/sdl $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Script $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Eclipse $BAK_TARGET/${USER}_dir
rsync -av /home/$USER/Java $BAK_TARGET/${USER}_dir
#rsync -av /home/$USER/driver $BAK_TARGET/${USER}_dir
##############################################################

# compress
cd $SAVE_AS;tar -c --xz -f $BAK_DIR.tar.xz $BAK_DIR

# remove dir
rm -r $BAK_TARGET

# permision change
chown $USER:$USER $BAK_TARGET.tar.xz


最後加入可執行權限,放到執行檔目錄下:
chmod a+x Backup_data.sh
mv Backup_data.sh /usr/local/bin/

使用方法,直接下 Backup_data.sh 指令。






2014年7月24日 星期四

Linux Icewm 隨機自動換桌布

筆者使用 Debian Linux 的 GUI 為 icewm,下面為 shell script。

此 Shell Script 要修改幾個簡單變數,就可以使用了:
1. IMG_POSTION ,在06行,為你自己的桌圖目錄位置。
2. IMG_TYPE 有 *.jpg 要修改, 在 12 行,該部份為你自己所擁的圖片副檔名,若只有 JPG 改 *.jpg,若有多種副檔名 (例如 JPG、PNG) 就改為 *.{jpg, png}。


  • 自動更換桌面,首先先安裝有 hsetroot,桌面布圖指令
sudo apt-get update && apt-get install hsetroot

  • 接下來,寫一個可以自動換圖的 Shell Script 
vi WallpaperChange.sh


  • My code
#!/bin/bash
# 2014/04/19    Author:Kai-Lin Liao
# Auto Change Wallpaper

# Parameter
IMG_POSITION=/home/lin/images/Wallpaper

# Change Director 
cd $IMG_POSITION

# Parameter
IMG_TYPE=`find *.jpg`
#IMG_TYPE=`find *.{jpg,png}`
IMG_AMOUNT=`find $IMG_TYPE -type f | wc -l`

# Test World
#echo "Image Type: $IMG_TYPE"
#echo "Wallpaper Postion: $IMG_POSITION, File Amount: $IMG_AMOUNT"

# Build Picture List
for N in $(seq 1 $IMG_AMOUNT)
do
        GET_IMG=`find $IMG_TYPE | sort | sed -n ${N}p`
        DeskPicture[${N}]=$GET_IMG
done

# Create RANDOM
LOW=1
HIGH=$IMG_AMOUNT
COUNT=$(($LOW + $RANDOM % $HIGH))
#echo $COUNT 

# Seting Wallpaper
echo "Wallpaper Change: ${DeskPicture[$COUNT]}"
hsetroot -fill $IMG_POSITION/${DeskPicture[$COUNT]}&


  • 測試、記得加入 x 權限
chmod +x WallpaperChange.sh
./WallpaperChange.sh 2> /dev/null