你電腦上跑著哪些好玩腳本?

根據自己的需求實現的小腳本(shell、python等等編程語言的)或bat。
大家在分享思路的同時,最好可以上代碼 :)


太多了,隨便說幾個,代碼就不貼了:
1. 控制房間里兩個wifi插座/開關通斷的腳本,一開始是python的(基於ouimeaux),後來改成了C++(基於openhome/ohNet),還寫了一個常駐後台的服務端來增加穩定性。有次開放了一個埠讓地球對面的人把我房間的燈關了。
2. 我房間的桌上和床頭各有一個音箱,於是寫了個程序來切換音頻播放設備,一開始寫了個powershell腳本,後來嫌powershell啟動太慢就寫了一個調windows API的C++版的,發現微軟居然故意不公開這個API(防止程序們亂搶),於是用了一些Undocumented API。
3. 小區洗衣房是公共的,寫了一個python小程序來抓洗衣機/烘乾機的工作進度,洗完了自動提醒我去拿。
4. 寫過一個財務管理程序,用來登陸各種網銀賬號/股票賬戶/養老金賬戶等等,匯總所有的存款/信用卡/理財信息/信用分數等等,給自己沒事兒數錢玩。這玩意兒是基於python上的一個動態爬蟲spynner寫的。後來知道了有mint這種東西...
5. 知乎精選評論還原器和逆向交集,放到專欄里去了,需要請自取。另外自己還寫了一些知乎爬蟲,站在數據背後看世界是挺有意思的。
6. 有段時間家裡老斷網,於是寫了一個網路狀態監測的小東西,最後改成了在路由器上配置了一套基於collectd+rrd的監測系統,能自動畫成圖表給我看。

彩蛋:程序4是拿以前一個用來全自動下高清AV的程序改的...


再來更新一個
0.給一個指定郵箱發一封郵件,電腦就默默自動關機。
代碼在update0裡面
PS:有人說意義何在,
︿( ̄︶ ̄)︿要從實驗室滾回寢室,但是電腦上好多非監督的任務還沒完成(虛擬機裡面裝軟體),那就發一封定時關機郵件;
︿( ̄︶ ̄)︿晚上被慫恿去外面吃飯,心想著還要回實驗室碼一會代碼來著,可是吐了,直接滾回寢室,那麼就讓它自動關機
︿( ̄︶ ̄)︿評論說的家裡面電腦任務差不多了,就讓電腦關機了。
︿( ̄︶ ̄)︿其實想讓電腦關機是次要的,還可以讓它突然間唱歌什麼的,會不會把單獨在實驗室的小師妹嚇到哦。
︿( ̄︶ ̄)︿其實有了這種思路,再寫比如,「在人人上面發一首歌的狀態,就讓電腦自動放」這種代碼就so easy了。
1.抓取京東商品價格,如果比昨天的價格降低10%那麼就把商品鏈接發到指定郵箱。
這個的意義就不說了吧,哈哈哈哈。
---------------------------------
update0:
先用我的常用郵箱給我備胎郵箱發送一封主題為「shutdown」的郵件

然後我要關機的電腦檢測到了自動關機並發揮一封主題為「already shutdown」的郵件

然後我要關機的電腦檢測到了自動關機並發揮一封主題為「already shutdown」的郵件


原理:我要關機的電腦腳本不斷檢測我的備胎郵箱是否有「shutdown」主題的來自我常用郵箱的郵件,如果有則返回一封「已經關機」的郵件給我常用郵箱,並且自己給自己發一封主題為haha的郵箱,從而避免下次一打開腳本就關機。(時間神馬的都可以自己設定,我設定的比較短)

代碼如下:

#coding:utf-8
#python 3.4
#author yinruyi
#email yinruyi.hm@gmail.com
import poplib,email
from email.header import decode_header
import smtplib
import time
import os,sys

def accp_mail():
host = "pop3.sina.com"
username = "yinruyi233@sina.com"#關機郵箱
password = "233333333"#郵箱密碼
pp = poplib.POP3(host)
pp.set_debuglevel(1)
pp.user(username)
pp.pass_(password)
ret = pp.stat()
ret = pp.list()
down = pp.retr(len(ret[1]))
a=down[1][10].decode("utf-8")
b=down[1][33].decode("utf-8")
if a!="X-Sender: ruyi.yin@qq.com":#我常用的郵箱
pass
else:
if b=="Subject: shutdown":#發送關機主題
#depend on the down itself
return 0
pp.quit()
def send_mail():
handle = smtplib.SMTP("smtp.sina.com", 25)
handle.login("yinruyi233@sina.com","233333333")#關機郵箱帳號和密碼
msg = "To: yinruyi233@sina.com
From: yinruyi233@sina.com
Subject: haha

start
"
#從關機郵箱到關機郵箱主題為haha的郵件
handle.sendmail("yinruyi233@sina.com","yinruyi233@sina.com", msg)
#發送
handle.close()
def send_mail1():
handle = smtplib.SMTP("smtp.sina.com", 25)
handle.login("yinruyi233@sina.com","23333333")#關機郵箱帳號和密碼
msg = "To: ruyi.yin@qq.com
From: yinruyi_hm@sina.com
Subject: already shutdown

start
"
#從關機郵箱到常用郵箱主題為已經關機的郵件
handle.sendmail("yinruyi_hm@sina.com","ruyi.yin@qq.com", msg)
handle.close()
if __name__=="__main__":
while 1:
time.sleep(5)
if accp_mail()==0:
#print("just success")
send_mail()
#讓關機郵箱自己給自己發一封不同於shutdown的郵件
send_mail1()
#讓關機郵箱給自己的常用郵箱發一封已經關機的郵件
os.system("shutdown -f -s -t 10 -c closing...")
#關機
break


電腦上長跑的程序基本沒有,因為不能保證 24 小時處於開機狀態,但是 VPS 上倒是跑了很多有意思的小程序。

1. 監控 1024 的貼圖模塊,並抓取所有新增圖片
圖片聚合到了 zhihu.photo,不過為了我的安全,我並沒有將訪問鏈接暴露出來,如果你想玩,可以自己去 fork 我的代碼,並做對應的調整。

  • 所有代碼:https://github.com/xlzd/zhihu.photo
  • 1024 爬蟲代碼:zhihu.photo/t66y_crawler.py at master · xlzd/zhihu.photo · GitHub

2. 微博報時
每個整點自動發微博報時,順便發一張圖片。
代碼:xPyToys/weibo_baoshi.py at master · xlzd/xPyToys · GitHub
效果:

3. 通過微博控制電腦
發一條微博,內容為一條指令。電腦端監控我的微博,並自動執行命令,然後將結果作為評論回復到當條微博下。


4. 租房網站信息監控
之前有段時間需要租房,所以監控了趕集、58 和豆瓣的租房信息,當目標地區、目標小區的個人房源有更新之後,就立刻發郵件通知我。


5. bing 首頁圖片下載並自動上傳七牛
代碼:xPyToys/down_bing_bg.py at master · xlzd/xPyToys · GitHub


快速重啟路由器

家裡用的是D-link路由器,不超過100塊那種。由於路由器年代久遠,偶爾會抽風連不了外網,這時就需要重啟路由器。一般常規的做法一是斷電重啟;二是登陸路由器系統設置選項進行重啟。有時路由器離電腦太遠了不想跑過去斷電,登陸路由器又有點煩鎖,什麼打開瀏覽器輸入用戶名密碼找到系統設置選項再點擊重啟。於是就設想寫個python腳本,直接雙擊或者快捷鍵打開馬上重啟路由器。
代碼如下:

import requests

ip="192.168.5.1"
username="admin"
pwd="123456"

header={
"Host": ip,
"Origin": "http://"+ip,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
"Accept":" */*",
"Referer": "http://"+ip,
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.8"
}

#登陸時向伺服器POST的數據
login={
"REPORT_METHOD":"xml",
"ACTION":"login_plaintext",
"USER":username,
"PASSWD":pwd,
"CAPTCHA":""
}

#重啟時向路由器POST的數據
reboot={
"EVENT":"REBOOT"
}

s=requests.session()

#登陸路由器
login=s.post("http://"+ip+"/session.cgi",data=login,headers=header)
print login.text

#重啟路由器
reboot=s.post("http://"+ip+"/service.cgi",data=reboot,headers=header)
print reboot.text

現在直接雙擊或者用快捷鍵打開這個文件就可以重啟路由器了。

--------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------

批處理快速更改ip地址

由於工作的關係,經常要在各種網路中切換。苦於windows更換ip地址的煩鎖

(什麼進入控制面板——網路和internet——網路和共享中心——理性適配器設置——然後找到網卡——進入屬性——然後internet 協議——更改ip信息——然後再確定確定確定)

很煩啊有木有(╯°Д°)╯︵ ┻━┻ 改的時間夠我喝杯茶了,實在受不了動手寫了一個批處理,然後將批處理設置一個快捷鍵。現在按兩三下鍵盤就可以輕鬆修改ip地址

這是筆記本上的批處理


這是公司電腦的批處理:


批處理的快捷鍵可以通過生成快捷方式然後通過屬性設置

以下是批處理的內容,需要的可以自己拿去作相應的修改.

@echo off

goto menu

:menu
cls
@echo 1. 自動獲取ip地址
@echo 2. 手動輸入ip地址
@echo 3. 修改DNS
@echo 4. 修改ip為172.16.1.3
@echo 5. 修改ip為192.168.0.128 網關2
@echo 6. 修改ip為192.168.0.128 網關1
@echo 7. 查看本機ip地址
@echo 8. 退出

@echo.
@echo 默認修改ip為手動輸入[直接回車]
@echo.
@echo 請選擇

set selc=2
set /p selc=

@echo.
@echo 正在設置...
@echo.

IF %selc%==1 goto DHCP
IF %selc%==2 goto ipsetting
IF %selc%==3 goto DNS
IF %selc%==4 goto ipstatic2
IF %selc%==5 goto ipstatic
IF %selc%==6 goto ipstatic1
IF %selc%==7 goto ipconfig
IF %selc%==8 exit
IF %selc% NEQ 8 goto error
exit

:error
cls
goto menu
exit

:DHCP
@echo.
@echo 自動獲取ip地址
netsh int ip set add name="本地連接" source=dhcp
@echo 自動獲取DNS伺服器
netsh int ip set dns name="本地連接" source=dhcp
@echo 自動獲取ip地址設置完畢
@echo.
exit

:ipstatic
@echo.
@echo 設置為192.168.0.128
netsh int ip set add "本地連接" static 192.168.0.128 255.255.255.0 192.168.0.2 1
@echo 正在設置DNS伺服器:114.114.114.114
netsh int ip set dns name="本地連接" source=static 114.114.114.114
@echo 靜態ip設置完畢
@echo.
exit

:ipstatic1
@echo.
@echo 設置為192.168.0.128
netsh int ip set add "本地連接" static 192.168.0.128 255.255.255.0 192.168.0.1 1
@echo 正在設置DNS伺服器:114.114.114.114
netsh int ip set dns name="本地連接" source=static 114.114.114.114
@echo 靜態ip設置完畢
@echo.
exit

:ipstatic2
@echo.
@echo 設置為172.16.1.3
netsh int ip set add "本地連接" static 172.16.1.3 255.255.255.0 172.16.1.1 1
@echo 正在設置DNS伺服器:8.8.8.8
netsh int ip set dns name="本地連接" source=static 114.114.114.114
@echo 靜態ip設置完畢
@echo.
exit

:ipsetting
cls
@echo.
@echo 正在設置固定ip,請稍候……
@echo.
@echo 請輸入ip地址:
set /p ip=
@echo.
@echo 請輸入網關:
set /p gw=
@echo.

@echo 請輸入首選DNS:
set DNS1=114.114.114.114
set /p DNS1=

@echo 請輸入備用DNS:
set DNS2=8.8.8.8
set /p DNS2=

@echo.
netsh interface ip set address 本地連接 source=static addr=%ip% mask=255.255.255.0
netsh interface ip set address name=本地連接 gateway=%gw% gwmetric=1
netsh interface ip set dns 本地連接 static %DNS1%
netsh int ip add dns 本地連接 %DNS2% index=2
@echo ip地址設置完畢
@echo.
exit

:DNS
cls
@echo.
@echo 默認設置:首選DNS為114.114.114.114 備用DNS為8.8.8.8
@echo 若修改為默認設置,請直接回車;否則請輸入DNS
@echo.

@echo 請輸入首選DNS:
set DNS1=114.114.114.114
set /p DNS1=

@echo 請輸入備用DNS:
set DNS2=8.8.8.8
set /p DNS2=

@echo.
netsh interface ip set dns 本地連接 static %DNS1%
netsh int ip add dns 本地連接 %DNS2% index=2
@echo DNS設置完畢
@echo.
exit

:ipconfig
cls
ipconfig /all
@pause
goto menu
exit

--------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------

利用批處理登陸和註銷VPN
由於在家要vpn連回公司不定時加班〒▽〒 ,加上懶癌中後期不想移動右手用滑鼠點點點,於是寫了批處理加快捷鍵,一鍵登陸和註銷vpn

這是登陸VPN


這是註銷vpn

至於vpn的腳本,前提是已經安裝vpn的客戶端cisco vpn client

以下是登陸vpn的腳本:

"C:Program Files (x86)Cisco SystemsVPN Clientvpnclient.exe" connect vpn_profile_name user username pwd password
@pause

以下是註銷vpn的腳本

"C:Program Files (x86)Cisco SystemsVPN Clientvpnclient.exe" disconnect
@pause


也來湊個熱鬧,自認為最有用的兩個Python腳本:
調用默認瀏覽器打開一坨網頁:

import webbrowser

urls = [
"http://www.douban.com",
"http://weibo.com",
"http://www.zhihu.com",
"http://www.v2ex.com/",
"https://github.com/",
"https://mail.google.com/",
"http://instagram.com/",
]

map(lambda x: webbrowser.open(x), urls)

扒取kindle今日特價書,把結果郵件到指定郵箱:

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
from email.Header import Header

result = {"name": [], "cover": [], "desc": [], "link": [], "price": []}

def get_page():
return requests.get("http://t.cn/Rvm4xgc").text

def parse(html):
soup = BeautifulSoup(html)
table = soup.body.find_all("table")[6]

name = table.find_all("tr")[1]

result["name"].append(name.find_all("td")[0].b.string)
result["name"].append(name.find_all("td")[2].b.string)

desc = table.find_all("tr")[2]

book_1 = desc.find_all("td")[0]
result["cover"].append(book_1.a.img["src"])
result["link"].append("http://www.amazon.cn" + book_1.a["href"])
result["desc"].append(book_1.contents[1])
result["price"].append(book_1.find_all("p")[1].b.span.string)

book_2 = desc.find_all("td")[2]
result["cover"].append(book_2.a.img["src"])
result["link"].append("http://www.amazon.cn" + book_2.a["href"])
result["desc"].append(book_2.contents[1])
result["price"].append(book_2.find_all("p")[1].b.span.string)

mail_config = {
"from": "gitradar@163.com",
"to": "liushuaikobe1993@163.com",
"server": "smtp.163.com",
"username": "gitradar",
"pwd": "yourpassword"
}

def send_mail(sbj, content, from_whom=mail_config["from"], to_whom=mail_config["to"], server=mail_config["server"],
username=mail_config["username"], pwd=mail_config["pwd"]):
msg = MIMEText(content, "html", "utf-8")
msg["Subject"] = Header(sbj, "utf-8")
msg["From"] = from_whom
msg["To"] = to_whom
s = smtplib.SMTP(server)
s.ehlo()
s.starttls()
s.login(username, pwd)
s.sendmail(from_whom, to_whom, msg.as_string())

def build_html():
return "&&"
+ "&"+ result["name"][0] + "nbsp; " + result["price"][0] + "&"
+ "&"
+ "&&"
+ "&"
+ "&

" + result["desc"][0] + "&"
+ "&"+ result["name"][1] + "nbsp; " + result["price"][1] + "&"
+ "&"
+ "&&"
+ "&"
+ "&

" + result["desc"][1] + "&"
+ "&&"

if __name__ == "__main__":
parse(get_page())
html = build_html()
sbj = "Kindle今日特價書"
send_mail(sbj, html)


我的算不上腳本,但解決了一個很鬱悶的問題。

有時code寫得正high,耳機里卻傳來了一首不搭的歌,實在不想切換到foobar換歌,就只能忍著,等她唱完。

後來用ahk寫了個腳本,不用切換,直接給背景窗口發消息。監聽快捷鍵,alt+x就是跳到下一首,並刪除當前這首,不用離開ide就能操作。

一天下來,播放列表中剩下的全是自己喜歡的歌。我還用它篩選整理歌曲,工作家務兩不誤。


更新:虛擬出來的那個盤貌似是沒有回收站的,所以在虛擬盤中刪東西沒法從回收站恢復,也沒法在右鍵菜單中撤銷刪除。
=========================

以前的筆記本有兩塊硬碟,於是固態硬碟整個作C盤,裝各種軟體,機械硬碟整個作D盤,存儲各種大文件資料。

後來換了個輕薄本,只有一塊167GB的固態盤,整個作C盤。由於不想分區,就在C盤根目錄建了一個storage文件夾,所有大文件資料都放到這個文件夾里。但是每次找資料都要先進C盤,再進storage文件夾,很麻煩。最後寫了個windows批處理腳本,命名為「start.bat」扔到win7的啟動文件夾里:

:: 掛載存儲盤
subst d: c:storage

效果就是:

PS:默認情況下,虛擬出來的那個盤是無法手動修改卷標的,它總是跟主盤的卷標相同。但是如果把主盤卷標設置為空(虛擬盤也會自動變成空),那麼就會顯示默認卷標,而每個盤的默認卷標是可以在註冊表裡面設置的。設置方法就是把下面這段註冊表腳本保存為文件「label.reg」,然後雙擊運行。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIcons]

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsC]

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsCDefaultLabel]
@="win7x64"

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsD]

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerDriveIconsDDefaultLabel]
@="storage"


1. 一個日期計算器,算出今天是和女朋友在一起多少天,然後每天早上給女朋友自動發一條簡訊:
親愛的XX,今天是你掉入火坑的第XX天,快起床滅火了!

2. 京東等自動登錄簽到,每天5京豆么么噠

3.終端黑客帝國數字雨,把終端全屏可做屏保。(這個是在網上看到的,大家google digit rain等關鍵字就能找到)


在bing每天都會更新背景圖片的啊,都是一些風景很贊的啊,於是我搞了個腳本每天去下載了啊

#!/bin/bash
pic_URL=`curl "http://cn.bing.com"|sed "s#{#
#g"|sed "s#}#
#g"|sed -n "/http.*jpg/p"|sed "s/url:/
/g"|sed "s/"/
/g"|grep ^http.*jpg`
echo $pic_URL

wget $pic_URL

然後扔到crontab中定時執行了

# m h dom mon dow command
0 2 * * */1 cd /home/li_yun/Pictures/bing_picture /home/li_yun/Pictures/bing_picture/down_pic.sh

當然,還有其他一些,在家裡電腦 上跑,如把路由器的動態IP發到公司的網路,去爬取網站的gif圖片什麼 的


應要求傳到github了,不太會,好折騰...
github:https://github.com/damonshi/12306
-------------------------------------------------------------------------------------------------------
自學python了一段時間,擼了個12306火車票余票全天候監控程序。
可以追蹤固定列車是否有票,一旦有立馬發郵件提醒。
可以追蹤固定列車固定座位類型是否有票,一旦有立馬發郵件提醒。
程序運行界面:

運行結果實例:

程序下載地址:
百度雲鏈接: http://pan.baidu.com/s/1kVwETgz 密碼: ae2p
程序源碼下載地址:
百度雲鏈接: http://pan.baidu.com/s/1dFoKiUd 密碼: 38q5
python懂的很淺很淺,無其他程序語言基礎,程序基本是靠著循環和判斷,不懂的問題靠谷歌搜索完成的,大神請輕拍。


shutdown -s -t 3600


因為MAC看B站彈幕各種發熱不能忍,所以平時準備了一大堆自己寫和改自github上的腳本。。比如:

bili+av號可以自動調用mpv載入彈幕本地觀看視頻,基本零功耗

biliurl+av號可以獲取下載地址【偶爾直接 you-get。。】

danmu+av號可以直接把彈幕轉成ASS文件命好名下載到桌面【出差什麼的在高鐵上可以準備一大堆視頻和彈幕下載好】

bgm命令可以顯示當日更新的新番,加上一些參數可以顯示三次元的,或者指定周X更新的番【特指新番】【我在alfred使用是直接將選中的番播放最近更新的一集或者將AV號複製到剪貼板,然後再調用上面的danmu命令】

danmu_delay xxx.ass可以將彈幕ASS文件延時【下下來的視頻如果跟B站上傳的不一樣(比如刪減過或者多了廣告之類的),就需要對一下彈幕時間軸,一般是ffmpeg直接修視頻,有次*.ts文件無論如何ffmpeg都失敗,就直接調整彈幕時間】【需求是推動XX的第一生產力。。】

vedio_merge:有些新番B站上不能播,所以上面的命令獲取不到視頻,所以可以安卓客戶端下載後,把下載的傳出來到電腦,因為是多個flv文件和彈幕xml,然後就自動拼接成一個視頻。。。

bhot:弄進alfred裡面,後面加參數,查看不同區不同日期的熱門。。

bl:弄進alfred直接搜索視頻,然後cmd+回車選中就是本地播放,ctrl+回車選中就是本地播高清,alt+回車直接下載到桌面
==========

各種腳本配合alfred簡直愉悅!!

放幾個演示吧,不過知乎不支持gif。。。我就放鏈接好了。。【GIF圖略大。。流量黨退散】

bgm獲取新番的最新一集地址,然後biliurl獲取下載鏈接,danmu可以下載彈幕到桌面:
http://kylen314.qiniudn.com/zhihu_1.gif

bgm獲取新番的最新一集地址,然後bili --hd本地載入彈幕視頻播放
http://kylen314.qiniudn.com/zhihu_2.gif

bl命令可以搜索視頻,然後bili --hd本地播放:
http://kylen314.qiniudn.com/zhihu_3.gif

bhot查看熱門視頻,依舊本地播放:
http://kylen314.qiniudn.com/zhihu_4.gif

===============
腳本可以在這裡找到。。。Vespa314/bilibili-api · GitHub

alfred的workflow可以在這裡找到。。但是需要別的配置。。。Vespa314/BilibiliAlfredWorkFlows · GitHub。。。【另外github README.md的圖片掛了。。不想管了。。別吐槽】

不保證你的用法和我一樣。。。因為很多命令我都是python寫的,放一個路徑,然後寫一個sh來調用,放在usrin,這樣就可以在任意路徑下用,然後sh外面再套一層alfred的workflow,這樣就不可不用開終端了。。
=============

還有一些以前寫過的腳本,現在不怎麼用了。。比如一鍵爬去豆瓣相冊,一鍵獲取某個動畫的全部下載鏈接之類的。。。

唉。。。究竟是玩物喪志了還是人生苦短了?結果表明,給自己的需求和興趣寫代碼是________!!


最愛用的一些 bash alias (mac os x環境)

#查看當前ip
alias myip="ifconfig | grep inet "

#查看80埠佔用
alias ls80="sudo lsof -i:80"

#設置DNS
alias dnschk="networksetup -getdnsservers" #[service]
alias dnsset="networksetup -setdnsservers" #[service] [dns1] ([dns2]) ...
#可以結合常量使用,例如

export DNSV2EX="199.91.73.222 178.79.131.110" #V2EX DNS
#dnsset wi-fi $DNSV2EX

#Network Service
alias netsrv="networksetup -listallnetworkservices"
alias netsrvo="networksetup -listnetworkserviceorder"
alias netsrvpo="networksetup -listallhardwareports"

#文件許可權
alias cmod="sudo chmod -R 777"
alias cmod755="sudo chmod -R 755"

#bash_profile reload
alias rlbs=". ~/.bash_profile"

#新建並進入文件夾
function mcd() {
mkdir -p "$1" cd "$1";
}

#解壓,自動判斷壓縮文佳類型(忘掉冗長的 -zxvf... 吧)
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo ""$1" cannot be extracted via extract()" ;;
esac
else
echo ""$1" is not a valid file"
fi
}

#文件查找
ft() {
find . -name "$2" -exec grep -il "$1" {} ;
}

#文件查找刪除(小心使用通配符。。)
findremove() {
find . -name "$1" -exec rm -rf {} +;
}

各種 ls la l. 就不說了,太普遍了。
還有一大堆伺服器ssh也都配上alias了,配私鑰 ,ssh1, sshali, sshme 直接上。。非常方便。

還有一些自己常用的應用類的

#apache各種配置和日誌文件
alias apaconf="sudo vim /etc/apache2/httpd.conf"
alias apaconfp="sudo vim /private/etc/apache2/httpd.conf"
alias apaconfv="sudo vim /private/etc/apache2/extra/httpd-vhosts.conf"
alias apaelog="tail -r /var/log/apache2/error_log|less"

#git
alias gi="git init"
alias gib="git --bare init"
alias gaa="git add --all"
alias ga="git add "
alias gss="git status -s"
alias gs="git status"
alias glo="git log"
alias gloo="git log --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&<%an&>%Creset" --abbrev-commit"
alias gc="git commit"
alias gf="git fetch"
alias gps="git push"
alias gpu="git pull"
alias gck="git checkout"
alias gb="git branch"
alias grmt="git remote"
alias gd="git rm --cached"
alias gdd="git rm"
alias gmg="git merge --no-ff"
alias gmm="git merge"
alias grb="git rebase"
alias gdf="git diff --cached"
alias gcl="git clone"

#Gruntjs 組件包安裝
grtinstallc() {
npm install grunt-contrib-"$1" --save-dev
}

還有好多就不複製上來了。總之極大提升工作效率。。

另外推薦一個專門收集alias的神站: alias.sh | Manage, share and source your aliases online.


Unalias rm
Unalias mv
Unalias cp


印象筆記外鏈失效了,我已經將下載鏈接修改為百度雲的了。
========
運行著幾個AHK腳本,最常用的是滑鼠按鍵修改。另外還有一個AHK腳本自動運行管理器,是很久之前從網上找到的一個腳本管理器,然後修改過來的。

運行說明:
AHK腳本是 Auto Hotkey 腳本的簡稱,純文本文件,擴展名 .ahk ,是Windows環境下的一個開源腳本程序。若想運行AHK腳本,需要到 AutoHotkey 官網下載安裝AutoHotkey程序,之後就可以運行 .ahk 腳本了。

1、AHK腳本管理器
這個腳本管理器是我在小眾軟體上找到的,原地址:AHK Script Manager ,我在使用中又進行了一些修改。腳本管理器的作用就是啟動後運行它目錄下的其他ahk腳本,同時可以隨時啟動、關閉、編輯正在運行的腳本。
因為.ahk 腳本運行後,會產生一個autohotkey.exe進程,因此運行多個.ahk 腳本後,就沒有辦法知道到底哪個進程對應哪個腳本了,而腳本編輯器可以通過菜單關閉特定腳本對應的ahk進程。

腳本管理器運行後在托盤區產生一個圖標,滑鼠點擊可以彈出菜單。

腳本管理器運行後在托盤區產生一個圖標,滑鼠點擊可以彈出菜單。

腳本管理器本身也是一個ahk程序,啟動後會運行/scripts 目錄下的所有ahk腳本,但是如果腳本文件名前面帶有「!」感嘆號,則不會自動運行,可以通過菜單運行。「關閉腳本」則自動結束對應的腳本進程,「編輯腳本」可以調用默認編輯器對腳本內容進行修改,方便調試,「重載腳本」用於修改腳本後重新載入新的腳本。

腳本管理器本身也是一個ahk程序,啟動後會運行/scripts 目錄下的所有ahk腳本,但是如果腳本文件名前面帶有「!」感嘆號,則不會自動運行,可以通過菜單運行。「關閉腳本」則自動結束對應的腳本進程,「編輯腳本」可以調用默認編輯器對腳本內容進行修改,方便調試,「重載腳本」用於修改腳本後重新載入新的腳本。


「添加腳本」會自動打開/scripts 目錄,方便複製新的ahk腳本進去。「我添加了新腳本」則會重新運行/script 目錄下面的所有腳本,感嘆號開頭的除外。
「退出」是指推出腳本管理器,並不影響正在運行的ahk腳本。

下載地址:AHK Script Manager.zip_免費高速下載 (百度雲)

2、滑鼠按鍵修改
我的滑鼠滾輪按下去後經常沒有反應,因此我通過ahk腳本,將「先按下左鍵不放手,再按下右鍵」這個操作定義為滑鼠中鍵,在chrome中後台打開鏈接、關閉頁面非常方便。
AHK代碼非常簡潔:

~LButton RButton::
send {mbutton}
Return

另外我將滑鼠滾輪上下滾動相互調換,這樣的話,用完蘋果電腦再用Windows電腦再也不用糾結頁面滾動方向了,哈。

WheelDown::WheelUp
WheelUp::WheelDown

3、半透明播放器
這個功能在筆記本上邊看視頻邊刷網頁比較有用,現在雙屏後,我都是左邊屏幕看美劇,右邊屏幕刷知乎,於是很久沒有使用了。
因為我用的是 射手影音播放器,因此這個半透明播放器也只能將射手播放器半透明化。效果如下:(宅總你好~)

首先打開播放器的置頂功能,然後拖動窗口到合適位置,按下快捷鍵「Crtl+Shift+Z」會自動將射手播放器的窗口半透明化並

首先打開播放器的置頂功能,然後拖動窗口到合適位置,按下快捷鍵「Crtl+Shift+Z」會自動將射手播放器的窗口半透明化並滑鼠穿透,之後按住「Shift」鍵上下滾動滑鼠滾輪可以調節透明度,按快捷鍵「Ctrl+Shift+A」恢復成正常窗口。
代碼如下:(比較亂)

#SingleInstance force ;強制重新載入新腳本
#NoEnv ;不檢測空變數為環境變數
#NoTrayIcon

Hotkey,~+WheelUp,ChTUp,off
Hotkey,~+WheelDown,ChTDown,off
Return

^+z::

Tran = 170
WinSet, ExStyle, +0x20,ahk_class MediaPlayerClassicW
WinSet,Transparent,170,ahk_class MediaPlayerClassicW
Hotkey,~+WheelUp,ChTUp,On
Hotkey,~+WheelDown,ChTDown,On
Return

^+a::
WinSet, ExStyle, -0x20,ahk_class MediaPlayerClassicW
WinSet,Transparent,255,ahk_class MediaPlayerClassicW
Hotkey,~+WheelUp,ChTUp,off
Hotkey,~+WheelDown,ChTDown,off
Return

ChTDown:
Tran := Tran - 5
If Tran &< 30 Tran = 30 WinSet,Transparent,%Tran%,ahk_class MediaPlayerClassicW Return ChTUp: Tran := Tran + 5 If Tran &> 255
Tran = 255
WinSet,Transparent,%Tran%,ahk_class MediaPlayerClassicW
Return

修改上面代碼中的「ahk_class」可以透明其他播放器。

4、參考文獻條目自動生成
這個是畢業論文時寫的一個簡單的小程序,可以自動生成參考文獻條目,省得自己寫忘掉逗號什麼的。

源代碼和編譯好的exe文件下載:

源代碼和編譯好的exe文件下載:參考文獻條目自動生成器.zip_免費高速下載 (包括 .ahk 和 .exe 文件)

好久沒有折騰腳本了,就這些。


以前用windows跑著幾百行ahk腳本,包括各種快捷鍵,不過現在換ubuntu似乎用不著了。
實驗室一台機器跑著一個代理下載加速服務(golang,勉強算腳本),一個http文件伺服器(也是golang,以前用python的似乎跑不滿帶寬),一個自動翻牆代理。
一台伺服器跑著一個ssh隧道埠映射腳本,幾個資料庫自動備份腳本。
自己電腦幾個git,fabic的上傳,部署腳本。
路由器跑著一個定時重啟腳本。


如果說兩個月前的話我還跑一個監測伺服器的腳本,那個是真·24 小時不關,但是後來部署了自動化監測我就不跑了……
然後是生成 http://typeof.net(現在放 @Thomas Yao 的 gitcafe 上,因為賣 vps 的那傢伙倒閉了)中所有 html 的腳本,用 PatEL 寫的,寫完文章就 ninja 一下。

# Promise polyfill
set [[lambda [] this]].Promise [require "bluebird"]

define util [require "util"]
define co [require "co"]
define fs [require "mz/fs"]
define exec [require "mz/child_process"].exec

define [te s] : ["" + s].trim |.replace [regex "^" "gm"] [indents layer] |&> (+) "
" |&> process.stderr.write

define indents : let [cache ()] : lambda [n] : piecewise {
[n &<= 0] "" cache`n cache`n true [set cache`n [[Array n].join " "]] } define [GeneratorFunction fn] : begin { set fn.constructor (.name "GeneratorFunction") return fn } define [items-of list] : begin { local len list.length local j 0 while [j &< len] : begin { yield list`j inc j } } define [keys-of obj] [items-of [Object.keys obj]] define [pairs-of obj] : foreach [local k] [keys-of obj] : yield (obj`k k) define GeneratorFunction [parallel thunks nThreads] : begin { local ret () local index 0 local n [Math.min nThreads thunks.length] define GeneratorFunction [next] : begin { local i [[inc index] - 1] set ret`i [yield thunks`i] if [index &< thunks.length] : yield next } local threads () for [local j 0] [j &< n] [inc j] : threads.push next yield threads return ret } define layer 1 define [weave a f] : begin { local r (.) local n 0 for [local i 0] [i &< a.length] [inc i] : begin { local x a`i local y [f x] if y : begin { set r`x y inc n } } if n [then r] [else null] } define [getContent d] : weave [fs.readdirSync d] : lambda [n] : begin { local p [d + "/" + n] piecewise { [[regex "^."].test n] null [[fs.lstatSync p].isDirectory] : getContent p [[regex ".yk$"].test n] p true null } } define contents [getContent "."] define forceQ [process.argv`2 == "force"] define dirConfigs (.) define forceForFile (.) define GeneratorFunction [compileOneFile id callback] : begin { return : yield : exec ["yki -f " + id] } define GeneratorFunction [compileDir dir path] : begin { if dirConfigs`path : return : yield : dirConfigs`path dir path te ["Enter " + path] inc layer local tasks () foreach [local j] [keys-of dir] : piecewise { [[typeof dir`j] == "string"] : let [file dir`j] [htmlPath [dir`j.replace [regex ".yk$"] ".html"]] : tasks.push : GeneratorFunction : lambda [] : piecewise { [forceQ || forceForFile`file || [not [fs.existsSync htmlPath]] || [[yield [fs.stat file]].mTime &>= [yield [fs.stat htmlPath]].mTime]] : begin {
local compileResult : yield : compileOneFile file
te compileResult`1
}
true : te ["Unmodified: " + file]
}
true : yield : compileDir dir`j [path + j + "/"] forceQ
}

yield : parallel tasks 32

dec layer
te ["Leave " + path]
}

define GeneratorFunction [compileArticlesDir dir path] : begin {
te ["Enter " + path]
inc layer

local tasks ()
local meta (.)
if [fs.existsSync [path + ".meta.json"]] : set meta : JSON.parse : yield : fs.readFile [path + ".meta.json"] "utf-8"
foreach ([local f], [local j]) [pairs-of dir] : if [j != "index.yk"] : if [[typeof dir`j] == "string"] {
then : let [file f] : tasks.push : GeneratorFunction : lambda [] : begin {
local htmlPath [file.replace [regex ".yk$"] ".html"]
piecewise {
[forceQ || forceForFile`file || [not [fs.existsSync htmlPath]] || [[yield [fs.stat file]].mTime &>= [yield [fs.stat htmlPath]].mTime]] : begin {
local compileResult : yield [compileOneFile file]
te compileResult`1
set meta`file : JSON.parse compileResult`0
set meta`file.gtime [new Date]
}
[[not meta`file] || [not meta`file.gtime] || [new Date meta`file.gtime] &< [yield [fs.stat htmlPath]].mtime] : begin { te ["Update Metadata: " + file] local m : [yield [fs.readFile htmlPath "utf-8"]].match [regex "&s*$"] if m : begin { set meta`file : JSON.parse : [Buffer m`1 "base64"].toString set meta`file.gtime : new Date } } true : te ["Unmodified: " + file] } } else { yield : compileDir f [path + j + "/"] forceQ } } yield : parallel tasks 32 yield : fs.writeFile [path + ".meta.json"] [JSON.stringify meta] local indexMeta : yield : compileOneFile dir`"index.yk" yield : fs.writeFile [path + ".index.meta.json"] indexMeta`0 dec layer te ["Leave " + path] } set dirConfigs."./c/" compileArticlesDir set dirConfigs."./m/" compileArticlesDir set dirConfigs."./s/jsmech/" compileArticlesDir set forceForFile."./index.yk" true set forceForFile."./rss.yk" true set forceForFile."./all.yk" true define GeneratorFunction [main] : begin { local startTime [new Date] te "Compiling typeof.net" yield : compileDir contents "./" te ["Done in " + [[new Date] - startTime] / 1000 + " seconds"] } [co main].then [lambda [] null]


Update: support Windows OS X
================================================
自寫自用小腳本,網易雲音樂聽過的歌有緩存以後可以轉成 mp3 格式放在桌面 Music 文件夾內。
文件名是亂的也懶得改,反正雙擊加進 iTunes 裡面都是正確的。

# -*- coding: utf-8 -*-
import os
import platform
import getpass
import shutil

def getCachePathByName(uname):
if platform.system() == "Darwin":
return "/Users/" + uname + "/Library/Containers/com.netease.163music/Data/Library/Caches/online_play_cache"
elif platform.system() == "Windows":
return "C:\Users\" + uname + "\AppData\Local\Netease\CloudMusic\Cache\Cache"
else:
print "OS Not Supported"
return ""

def getDesktopPathByName(uname):
if platform.system() == "Darwin":
return "/Users/" + uname + "/Desktop/Music"
elif platform.system() == "Windows":
return "C:\Users\" + uname + "\Desktop\Music"
else:
return ""

def run():
username = getpass.getuser()
neteasePath = getCachePathByName(username)
try:
os.chdir(neteasePath)
for fileName in os.listdir("."):
portion = os.path.splitext(fileName)
if portion[1] == ".uc!" or portion[1] == ".uc":
desktopMusicPath = getDesktopPathByName(username)
if os.path.exists(desktopMusicPath) == False:
os.mkdir(desktopMusicPath)
shutil.copyfile(fileName, os.path.join(desktopMusicPath, fileName))

mp3Name = portion[0] + ".mp3"
os.rename(os.path.join(desktopMusicPath, fileName), os.path.join(desktopMusicPath, mp3Name))

print fileName + " -&> " + mp3Name

print "操作完成!"

usrClear = raw_input("是否需要清理網易雲音樂緩存?(y/n)")
if usrClear == "y":
for anyFile in os.listdir(neteasePath):
os.remove(anyFile)
print "清理完成"
else:
print "進程結束"

except:
print "Failed: 獲取網易雲音樂路徑失敗"

if __name__ == "__main__":
run()


教師一鍵評測


湊個熱鬧,不用Windows很久了。
這是當年在獵豹wifi這類工具出現之前我用的一個批處理。當有人問我怎麼開WIFI共享的時候我就把這個丟給他,直到獵豹這類工具的出現...

不過用這個也挺方便的,完全綠色無公害,有潔癖的同學可以留著用。

這個批處理用於建立wifi,其實這是Windows自帶的功能,Windows上所有的wifi共享工具都是利用這個原理。腳本內有說明,我就不廢話了。

使用說明:
複製以下內容打開記事本,粘貼,然後保存為xxx.bat的文件,然後在圖標右鍵以管理員身份運行即可。
PS:發現有些#沒有對齊,自己來吧

@echo off
mode con: cols=80 lines=28
color 17
title Win7/8無線Wifi Powered By DropFan
:main
color 17
cls
echo ############################################################################
echo ## ##
echo ## Win7/8無線熱點 By 老虎 ##
echo ## ##
echo ## 開啟wifi熱點--1 ##
echo ## 關閉wifi熱點--2 ##
echo ## 建立無線熱點--3 ##
echo ## 一鍵建立熱點--0 ##
echo ## ##
echo ## 一鍵開啟將默認建立SSID為WIFI密碼123456789的熱點並退出本程序。 ##
echo ## ##
echo ############################################################################
echo 運行本工具需要管理員許可權,請在圖標右鍵選擇"以管理員身份運行"
echo 本工具不支持XP以前系統,僅支持WinNT 6.x以後的版本(vista win7/8/8.1等)
echo Tips:
echo Vista之後Windows內置了WIFI共享功能,本工具就利用此命令建立熱點。
echo 創建完畢後,在已連接Internet的網路設置打開Internet共享即可共享網路。
echo Win7/8所有開啟熱點的無線共享工具均利用此原理,本工具也不例外。:D
echo 真乃居家旅行殺人越貨必備工具,歡迎收藏。
echo By 老虎
set /p option=請輸入相應選項,輸入q則退出:
@echo off
if "%option%"=="1" goto start
if "%option%"=="2" goto stop
if "%option%"=="3" goto set
if "%option%"=="0" goto onekey
if "%option%"=="q" goto exit
if "%option%"=="main" goto main

:start
echo 如果卡住請稍等,Windows正在後台處理...一直卡住請稍後重新運行本工具
netsh wlan start hostednetwork

echo 請按任意鍵返回主界面...
pause&>nul
goto main
:stop
echo 如果卡住請稍等,Windows正在後台處理...一直卡住請稍後重新運行本工具
netsh wlan stop hostednetwork

echo 請按任意鍵返回主界面...
pause&>nul
goto main
:exit
echo 感謝您的使用,本工具即將退出。
echo 如有任何問題請聯繫本人。
echo 再次感謝您的使用!:D
echo 5..
echo 4..
echo 3..
echo 2..
echo 1..
echo 如果你能看清這幾行字,說明你的電腦有些卡。- -!
exit

:set
set /p ssid=請輸入要建立的熱點名稱(SSID):
set /p key=請輸入要建立的熱點密碼(8位以上):
echo 如果卡住請稍等,Windows正在後台處理...一直卡住請稍後重新運行本工具
netsh wlan set hostednetwork mode=allow ssid="%SSID%" key="%key%"
echo 建立完畢,若顯示以下三條信息則建立成功。
echo -----承載網路模式已設置為允許。
echo -----已成功更改承載網路的 SSID。
echo -----已成功更改託管網路的用戶密鑰密碼。
echo 若返回其它結果請自行上網查詢。
echo 請按任意鍵返回主界面...
pause&>nul
goto main

:onekey
netsh wlan set hostednetwork mode=allow ssid="WIFI" key=123456789
netsh wlan start hostednetwork
exit


推薦閱讀:

為什麼香港的 IT 行業平均薪酬較低?
高級運營和普通運營有哪些區別?

TAG:互聯網 | 程序員 | 腳本 | 腳本語言 |