Lunski's Clutter

This is a place to put my clutters, no matter you like it or not, welcome here.

0%

Linux小技巧

工作上最常用到linux,這邊列出常會用到的一些指令。

日常操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
* 硬體資訊

$ sudo apt install hardinfo
$ hardinfo | less
$ cat /etc/hostname
$ lscpu

架構: x86_64
CPU 作業模式: 32-bit, 64-bit
CPU(s): 8

$ cat /proc/cpuinfo

eric_lu@T-000000UP:~$ cat /proc/cpuinfo | grep "model name"
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
model name : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz

* 網頁資訊
$ curl -v http://ec1ecdc57218.ngrok.io/
* Trying 3.134.39.220...
* TCP_NODELAY set
* Connected to ec1ecdc57218.ngrok.io (3.134.39.220) port 80 (#0)
> GET / HTTP/1.1
> Host: ec1ecdc57218.ngrok.io
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 117
< Content-Type: application/json
< Date: Wed, 30 Sep 2020 06:52:11 GMT
< Server: Werkzeug/1.0.1 Python/3.6.9
<
* Connection #0 to host ec1ecdc57218.ngrok.io left intact
{"id": "xidGidfid0idKidxid6idF", "date": "09/30/2020", "choseNumber": [8, 2, 0], "probability": 0.008333333333333333}

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

&& 連接指令
wc <file> 統計file換行數、字數與字元數
stat 加強版的ls
scp local_file remote_username@remote_ip:remote_file 遠程傳檔
halt 關機
history 歷史指令
which 找指令位置
top 看目前執行程式
free -h 看記憶體容量
lsb_release -a 看作業系統
ctrl+shift+t 開新terminal
history | less 可以用PageUp Down
curl -vvvv 網址 v越多內容顯示越多
echo 檔案 | wc -l 顯示行數
echo $?:檢查上個命令是否成功執行,是0,否非0值
cat a.txt | grep -A20 "Package \[com.google.android.gms" 抓gms package發出的訊息
cat a.txt | awk '!/Something/' | grep 'B\|C\|D' 可以結合awk, grew

rm -rf ~/.local/share/Trash/* 清垃圾桶

cat .ssh/id_rsa.pub 印pub key

while true; \
do curl -s https://$DEVSHELL_PROJECT_ID.appspot.com/random-error \
-w '\n' ;sleep .1s;done

cmd /k 來執行命令並在完成後保持命令提示字元窗口開啟

---------------------------------------------
find ~/Desktop -type f -name "*.log*" ! -newermt 2024-08-01 -print0 | xargs -0 rm

範例
app1.log(創建於 2024-07-15)
app2.log(創建於 2024-08-05)
app3.log.1(創建於 2024-07-20)
app4.log(創建於 2024-06-30)

* ! -newermt 2024-08-01:排除在 2024-08-01 之後創建的文件。
* -print0:以空字符分隔文件名,處理文件名中包含空格或特殊字符的情況。
* xargs -0 rm:使用 xargs 將文件名傳遞給 rm 命令,並刪除這些文件。

app2.log(創建於 2024-08-05)
```
## Bash的迴圈用法

timeout 120 bash -c – ‘while true; do curl localhost; sleep $((RANDOM % 4)) ; done’

1
2
3
4
5
6
7
8
9

120 秒內不斷地向 localhost 發送 HTTP 請求,每次請求之間會隨機等待 0 到 3 秒。

1. timeout 120: 這個命令會在 120 秒後自動終止後面的命令。
2. bash -c -- '...': 這部分表示在一個新的 bash shell 中執行引號內的命令。
3. curl localhost: 這個命令會向 localhost 發送一個 HTTP 請求。
4. sleep $((RANDOM % 4)): 這個命令會讓程式暫停一段隨機時間(0 到 3 秒之間),然後繼續下一次循環。
5. done是 while 循環的結束標記。

while true; do

執行的命令

done

1
2
3

* 等效for迴圈


export MY_SERVER=localhost
timeout 120 bash -c – ‘for (( ; ; )) ; do curl $MY_SERVER; sleep $((RANDOM % 4)); done’
1
2
3
4

在Python中,for的無限迴圈寫法是 for _, 與[Bash](https://dev.to/patadiarushabh/mastering-shell-scripting-from-basics-to-advanced-automation-343)不同

# 系統管理

whoami: 顯示目前使用者
hostname: 顯示主機名稱
uname: 系統資訊
du -h: 目錄大小
ps -aux: 執行續狀態
netstat: 網路狀態
/etc/profile: 系統環境變數
.bashrc: 用戶環境變數
ping: 測試與其他主機的連線是否暢通
tracert: 追蹤資料封包從來源主機到目的主機所經過的路徑
netstat: 顯示網路連線、路由表、網路介面等資訊
tcpdump: 捕捉網路封包並進行分析
iftop: 實時顯示網路流量使用情況

  • 關閉SE Linux
    $ vi /etc/selinux/config
    SELINUX = disabled

  • 關閉防火牆
    $ setup
    $ chkconfig iptables off

  • 設定NTP Server
    $ service ntpd start

  • 產生ssh key
    $ ssh-keygen -t rsa
    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authroized_keys

  • 修改HOSTNAME
    $ ifconfig $ifconfig
    $ vi /etc/hosts
    $ vi /etc/sysconfig/network
    $ hostname cmaster $ 主機名 cmaster

  • 硬碟與記憶體
    free -m: 看swap
    lsblk
    blkid
    sudo fdisk -l
    cat /proc/meminfo

  • 格式化
    df -h # sdb1要清空
    sudo umount /dev/sdb1
    sudo mkfs.vfat /dev/sdb1

sudo chmod [u所属用户 g所属组 o其他用户 a所有用户] [+增加权限 -减少权限] [r w x] 目录名

1
2
3
[cron](https://yupaits.com/%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2/cron%E8%AF%AD%E6%B3%95%E7%AE%80%E5%8D%95%E6%80%BB%E7%BB%93) 

# 手動新增桌面圖示

cat > ~/.local/share/applications/postman.desktop <<EOL

[Desktop Entry]
Encoding=UTF-8
Name=Postman
Exec=postman
Icon=/opt/Postman/app/resources/app/assets/icon.png
Terminal=false
Type=Application
Categories=Development;
EOL

1
2

# 無法安裝軟體

sudo chmod 7755 /usr/lib/policykit-1/polkit-agent-helper-1

1
2

# 目錄中文轉英文

$ export LANG=en_US
$ xdg-user-dirs-gtk-update

1
2

# 顯示跑掉

1.先換條螢幕線
https://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=33458

1
2

# 讓Windows遠端連線

1.xface
sudo apt update
sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

2.xrdp
sudo apt install xrdp
check: sudo systemctl status xrdp

3.啟動
可以用 systemctl 指令來啟動,輸入
sudo systemctl restart xrdp
並且確認在開機時自動啟動 xrdp
sudo systemctl enable xrdp
sudo vim /etc/xrdp/xrdp.ini
在最後一行加上
exec startxfce4
儲存檔案並重新啟動 Xrdp 服務
sudo systemctl restart xrdp

4.設定防火牆
要允許從特定 IP 或 IP 範圍連接 Xrdp 伺服器,在此範例中 192.168.1.0/24 運行以下命令
sudo ufw allow from 192.168.1.0/24 to any port 3389
如果您想允許從任何地方進行連線(基於安全原因不鼓勵),請輸入
sudo ufw allow 3389

5.遠端空白問題
sudo apt-get install xorgxrdp
https://c-nergy.be/blog/?p=13390

6.重啟
sudo service xrdp restart
netstat -na | grep 3389

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

## 安全重啟
1. 同時按住 Ctrl 和 Alt 鍵,按住不要放
2. 按一下 SysRq 鍵
3. 按一下 R 鍵
4. 按一下 E 鍵
5. 依次按下 I , S , U , B 鍵

# Clay-Technology World
* [日期時間](https://clay-atlas.com/blog/2020/09/17/linux-cn-change-or-check-date/)
* [用trash取代rm避免誤刪](https://clay-atlas.com/blog/2020/08/04/linux-cn-note-using-trash-rm-remove-delete/)
* [Shell Script 輸入參數$# 0 1 2 3](https://clay-atlas.com/blog/2020/05/21/linux-cn-note-shell-script-input-argument/)
* [複製檔案顯示進度 gcp](https://clay-atlas.com/blog/2020/03/21/linux-cn-note-copy-progress-bar/)
* [定期執行 crontab](https://clay-atlas.com/blog/2019/12/10/ubuntu-os-crontab-settings/)
* [測網速sudo pip3 install speedtest-cli](https://clay-atlas.com/blog/2020/01/16/linux-chinese-note-speedtest-cli/)
* [遠端jupyter](https://clay-atlas.com/blog/2019/10/29/python-chinese-tutorial-jupyter-notebook/)
* [顯示檔案大小du](https://clay-atlas.com/blog/2020/01/11/linux-chinese-tutorial-command-du-check-file-size/)
* [刪除ppa sudo ls /etc/apt/sources.list.d](https://clay-atlas.com/blog/2020/02/04/linux-ubuntu-chinese-note-remove-ppa/)
* [tee 資料夾看階層](https://clay-atlas.com/blog/2020/01/29/linux-chinese-notes-tree-command-visualization-folder/)


# Android Studio

Ctrl+Alt+L 自動排版

  • 可以Sh雙擊執行
    在桌面 vim androidstudio.desktop

[Desktop Entry]
Name=AndroidStudio
Comment=open android studio
Exec=sh /home/eric_lu/android-studio-ide-192.6392135-linux/android-studio/bin/studio.sh
Icon=/home/eric_lu/android-studio-ide-192.6392135-linux/android-studio/bin/studio.png
Terminal=false
Type=Application

右鍵點擊程式,來到最下方的『屬性』,選擇『權限』
將『允許檔案作為程式執行(E)』打勾,然後關閉視窗

cp androidstudio.desktop ~/.local/share/applications/
將我們剛建立好的 .desktop 檔案移動至應用程式區,就可以在『搜尋』當中找到這個應用程式

sudo vim /etc/sysctl.conf
fs.inotify.max_user_watches = 524288
sudo sysctl -p –system

  • 裝完開啟很慢改記憶體大小
    ..\Android Studio\bin*.vmoptions

-Xms5120m
-Xmx10240m
-XX:MaxPermSize=1024m
-XX:ReservedCodeCacheSize=440m
-XX:+UseCompressedOops
-XX:-HeapDumpOnOutOfMemoryError
-Dfile.encoding=UTF-8

之後在file>Invalidate caches

  • 載入慢要改設定
    解決 androidstudio 在獲取Android sdk …位置暫停導致androidstudio 啟動慢
    打開android studio的bin目錄
    修改idea.properties文件如下:


idea.fatal.error.notification = enabled
disable.android .first.run = true

1
2
3
4


# 歷代Ubuntu踩過的坑

  • 22.04.3 balenaEtcher

  • 20.04 7z
    $ sudo apt-get update
    $ sudo apt-get install p7zip-full
    $ 7z

  • 20.04 chrome
    $ sudo apt install gdebi-core wget
    $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    $ sudo gdebi google-chrome-stable_current_amd64.deb
    $ google-chrome

  • 18.04 postman
    wget https://dl.pstmn.io/download/latest/linux64 -O postman.tar.gz
    sudo tar -xzf postman.tar.gz -C /opt
    sudo ln -s /opt/Postman/Postman /usr/bin/postman

  • 18.04 openjdk
    sudo apt install openjdk-8-jdk
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    echo $JAVA_HOME
    export PATH=$PATH:$JAVA_HOME/bin
    echo $PATH
    java -version

  • 18.04 KVM permission denied error
    $ sudo apt install qemu-kvm
    $ sudo adduser kvm
    $ sudo chown /dev/kvm

  • 18.04 按enter 持續重複輸入
    檢查
    $ gsettings get org.gnome.desktop.peripherals.keyboard repeat
    出現true 則輸入
    $ gsettings set org.gnome.desktop.peripherals.keyboard repeat false

https://askubuntu.com/questions/1029776/keys-get-stuck-randomly-and-type-endless-line-of-a-particular-letter-command

  • 14.04桌面時鐘消失
    sudo apt-get install indicator-datetime
    sudo dpkg-reconfigure –frontend noninteractive tzdata
    sudo killall unity-panel-service

    sudo restart lightdm

NoMachine


如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)

Welcome to my other publishing channels