事件狀況:使用 Git 指令,登入伺服器需要輸入帳號密碼,如果遇到很多 submodule 時,動作更是繁瑣。
解決辦法:
- 設定環境變數 HOME。
$setx HOME %USERPROFILE%
- 在家目錄下新增 _netrc 檔案。
machine hostname1
login login1
password password1
machine hostname2
login login2
password password2
$setx HOME %USERPROFILE%
machine hostname1
login login1
password password1
machine hostname2
login login2
password password2
grep -n "keyword" /directory/file
grep -rl "keyword" /directory/*
grep -rn "keyword" /directory/*
$git branch -m OLD_NAME NEW_NAME
$git push origin NEW_NAME:NEW_NAME
$git push origin --delete OLD_NAME
$git clone https://github.com/username/repo-name.git進入 repository 目錄
$cd repo-name增加遠端 repository
$git remote add gitlab https://gitlab.com/username/repo-name.git上傳 commit
$git push -f --tags refs/heads/*:refs/heads/*
:retab
:1,$s/hello/hi/g將字串 hello 換成 hi。1,$表示從頭到尾。
$git rebase -i HEAD~2如果要還原到前三個版本
$git rebase -i HEAD~4
$git push origin +master
git clone -b BRANCH_NAME REMOTE_GIT_REPO_URL
git clone REMOTE_GIT_REPO_URL -b BRANCH_NAME DIR
git checkout -b BRANCH_NAME
git push origin BRANCH_NAME
git clone --recursive REMOTE_GIT_REPO_URL
git submodule add REMOTE_GIT_REPO_URL SUBMODULE_NAME
git submodule add -b BRANCH_NAME REMOTE_GIT_REPO_URL SUBMODULE_NAME
git rm SUBMODULE_NAME
rm -R SUBMODULE_DIR
git checkout BRANCH_NAME
git add -A .
git commit -m "UPDATE_MESSAGE"
git push origin BRANCH_NAME
git submodule
$vim ~/.vimrc2. 輸入以下內容
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set smarttab
$sudo apt-get install -y python python-pip
$sudo pip install -U docker-compose
$sudo docker-compose pull
$sudo docker-compose up -d
$sudo docker-compose start
$sudo docker-compose stop
$sudo docker-compose restart
$sudo docker-compose rm -f
$sudo docker-compose ps
$sudo docker-compose logs
$sudo docker-compose up -d web操作單一 service 的方式也可以套用到其他指令上,只要在指令最後面加上 service 名稱。
$sudo docker-compose -f init.yml up -d指定 YAML 檔案的方式也可以套用到其他指令上,只要在 docker-compose 後面加上 -f 的選項並指定檔案。
$wget -qO- https://get.docker.com/ | sh
// If you would like to use Docker as a non-root user, you should now consider
// adding your user to the "docker" group with something like:
$sudo usermod -aG docker your-user
$sudo yum update
$curl -O -sSL https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
$sudo yum localinstall --nogpgcheck docker-engine-1.7.1-1.el6.x86_64.rpm
$sudo service docker start
$sudo chkconfig docker on
$sudo docker run hello-world
$sudo docker pull Ubuntu或是
$sudo docker pull ubuntu:latest預設 tag 是 latest,這兩種寫法的執行結果是一樣的。
$sudo docker pull ubuntu:14.04Docker image 的格式是 image:tag ,ubuntu 是 image 名稱,14.04 是 tag 名稱。
$sudo docker pull minimum/oracle-java:8minimum/oracle-java 是 image 名稱,8 是 tag 名稱。
$sudo docker images
$sudo docker rmi ubuntu:14.04或是利用 images 的指令取得 image ID,
$sudo docker rmi d2a0ecffe6fa或是簡單寫出 image ID 的前幾碼,
$sudo docker rmi d2a此方法請小心誤刪其他有相同前幾碼的 images
$sudo docker rmi ubuntu:14.04 hello-world
$sudo docker rmi -f ubuntu:14.04此方法適用於有某一個 container 使用這個 image 建立,但是該 container 並不會一併被刪除。
$sudo docker run -ti ubuntu:14.04沒有指定 container 名稱時,Docker engine 會隨機命名。
$sudo docker run -ti --name ubuntu_instance ubuntu:14.04建議全部指定 container 名稱,方便記憶與反覆進行 container 操作。
-t | TTY模式。 |
-i | 互動模式,可以和 container 進行指令操作。 |
-d | 後台模式,不會將 container 中的訊息輸出到 terminal。 |
-p host_port:container_port | 指定 container 的連接埠,例如 -p 8080:80,將 host 端 port 8080 導向到 container 的 port 80。 |
-e variable=value | 指定環境變數,例如 -e DB_HOST=mysql,在 container 中能存取 DB_HOST 這個環境變數。 |
-v host_dir:container_dir | 指定 container 的 volume,例如 -v /home/user/data:/data,container 的 /data 目錄是連結到 host 端的 /home/user/data 目錄。 |
--volumes-from name | 使用其他 container 的 volume,例如 --volumes-from web,將 container web 使用的 volumes 都連結到現在這個 container。 |
--link name[:alias] | 連線其他 container,例如 --link database:db,在 container 中能使用 db 作為 domain name。 |
--privileged=true | 如果要存取 container 中的系統資料夾,需要加這個參數提升權限。 |
--sig-proxy=false | 按下 Ctrl+C 只會中斷 container 中運行的程序,不會離開 container。可以按下 Ctrl+P 再按下 Ctrl+Q 離開 container,且 container 不會停止。 |
--restart=(no|on-failure|always) | 自動重新啟動 container,always 這個值在 Docker engine 啟動時也會有效。 |
--rm=true | container 停止時,自動刪除 container。 |
$sudo docker ps可以查詢正在運行的 container ID、建立時間、狀態和名稱。
$sudo docker ps -a
$sudo docker stop ubuntu_instance
$sudo docker start ubuntu_instancestart 指令的參數介紹
-a | 進入 container。 |
-i | 互動模式,可以和 container 進行指令操作。 |
$sudo docker rm ubuntu_instance假定有個正在運行的 container,其名稱是 ubuntu_instance,
$sudo docker rm -f ubuntu_instance也可以一次刪除多數個 container,
$sudo docker rm ubuntu_instance_1 ubuntu_instance_2
$sudo docker attach ubuntu_instance
$sudo docker logs ubuntu_instance可以指定顯示行數
$sudo docker logs --tail=10 ubuntu_instance
$sudo docker inspect ubuntu_instance可以查詢網路設定、連接埠設定、volume設定等。
$sudo docker commit hello hello-world:2也可以用來保存 container 內的資料。
$sudo docker rm -f `sudo docker ps -aq --filter="status=exited*"`
$sudo docker rmi `sudo docker images --filter "dangling=true" -q --no-trunc`
$sudo docker save -o docker-hello-world.tar hello-world
$sudo docker load --input docker-hello-world.tar
https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo
> term_.command.removeAllKnownHosts()
$gcloud auth login,接著根據訊息操作,
hex(97) # '0x61'
chr(97) # 'a'
str(97) # '97'
int('0x61', 16) # 97
chr(int('0x61', 16)) # 'a'
string = '61626364'
''.join(chr(int(string[i:i+2], 16)) for i in range(0, len(string), 2)) # 'abcd'
ord('a') # 97
hex(ord('a')) # '0x61'
int('97') # 97
string = 'abcd'
''.join([hex(ord(x))[2:] for x in string]) # '61626364'
sample = [1,2,3,1,2,3,4,5]
sample = list(set(sample)) # [1,2,3,4,5]
import os實驗的執行結果為:(請注意,每次執行的pid和印出來的順序會不同)
def myFoo(num : int) -> int:
loop_times = 0
print('start pid', os.getpid())
f = os.fork()
if f == 0:
# child process: num*(3^5)
while loop_times < 5:
num *= 3
print('child', os.getpid(), loop_times, num)
loop_times += 1
else:
# parent process: num*(2^10)
while loop_times < 10:
num *= 2
print('parent', os.getpid(), loop_times, num)
loop_times += 1
return num
def main():
print('pid', os.getpid(), myFoo(2))
print('pid', os.getpid(), 'finish')
if __name__ == '__main__':
main()
start pid 5653在f = os.fork()這一行,parent process #5653呼叫os.fork(),呼叫後傳回child process的pid #5654給parent process的變數f,而child process誕生於呼叫os.fork()後,在child process中也會傳回值給變數f,但是因為child process並沒有從呼叫os.fork()開始,所以傳回的值是0。至此之後,所有的expression都一分為二,parent process和child process都各自有一份並進行動作。
parent 5653 0 4
parent 5653 1 8
parent 5653 2 16
parent 5653 3 32
parent 5653 4 64
child 5654 0 6
parent 5653 5 128
parent 5653 6 256
child 5654 1 18
parent 5653 7 512
child 5654 2 54
parent 5653 8 1024
child 5654 3 162
parent 5653 9 2048
child 5654 4 486
pid 5653 486
pid 5653 2048
pid 5654 finish
pid 5653 finish