內容選單標籤

2022年9月22日 星期四

ubuntu pc 使用

下載

https://www.ubuntu-tw.org/modules/tinyd0/
ubuntu-22.04.1-desktop-amd64.iso

https://rufus.ie/zh_TW/
以Rufus  與 usb 製成可開機碟

安裝:

語言-->中文台灣 -->install -->偵測鍵盤

帳號    kk
密碼    aa123456



//安裝本地軟體包
dpkg -i package.deb,不解決依賴關係 

 //刪除軟體包
 dpkg -r package

//刪除軟體包及配置檔案
dpkg -p package           
 
//列出已安裝套件
//-l 的選項可以列出更詳細的安裝套件資訊 
~$ dpkg -l cups
要求=U:未知/I:安裝/R:刪除/P:清除/H:保留
| 狀態=N:未安裝/I:已安裝/C:設定檔/U:已解開/F:半設定/H:半安裝/W:待觸發/T:未觸發
|/ 錯誤?=(無)/R:須重新安裝(狀態,錯誤:大寫=有問題)
||/ 名稱           版本                硬體平台     簡介
+++-==============-===================-============-====================
ii  cups           2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - PPD/driver support, web interface



~$ dpkg -l cups*
要求=U:未知/I:安裝/R:刪除/P:清除/H:保留
| 狀態=N:未安裝/I:已安裝/C:設定檔/U:已解開/F:半設定/H:半安裝/W:待觸發/T:未觸發
|/ 錯誤?=(無)/R:須重新安裝(狀態,錯誤:大寫=有問題)
||/ 名稱                      版本                硬體平台     簡介
+++-=========================-===================-============-===========
ii  cups                      2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - PPD/driver support, web interface
ii  cups-browsed              1.28.15-0ubuntu1    amd64        OpenPrinting CUPS Filters - cups-browsed
ii  cups-bsd                  2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - BSD commands
ii  cups-client               2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - client programs (SysV)
ii  cups-common               2.4.1op1-1ubuntu4.1 all          Common UNIX Printing System(tm) - common files
ii  cups-core-drivers         2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - driverless printing
ii  cups-daemon               2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - daemon
ii  cups-filters              1.28.15-0ubuntu1    amd64        OpenPrinting CUPS Filters - Main Package
ii  cups-filters-core-drivers 1.28.15-0ubuntu1    amd64        OpenPrinting CUPS Filters - Driverless printing
ii  cups-ipp-utils            2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - IPP developer/admin utilities
un  cups-pdf                  <無>                <無>         (無相關介紹)
ii  cups-pk-helper            0.2.6-1ubuntu5      amd64        PolicyKit helper to configure cups with fine-grained privileges
ii  cups-ppdc                 2.4.1op1-1ubuntu4.1 amd64        Common UNIX Printing System(tm) - PPD manipulation utilities
ii  cups-server-common        2.4.1op1-1ubuntu4.1 all          Common UNIX Printing System(tm) - server common files


 
// --get-selections 選項就可以得到這台電腦上的所有已安裝套件的清單
~$ dpkg --get-selections | grep cups
bluez-cups                    install
cups                        install
cups-browsed                    install
cups-bsd                    install
cups-client                    install
cups-common                    install
cups-core-drivers                install
cups-daemon                    install
cups-filters                    install
cups-filters-core-drivers            install
cups-ipp-utils                    install
cups-pk-helper                    install
cups-ppdc                    install
cups-server-common                install
libcups2:amd64                    install
libcupsfilters1:amd64                install
libcupsimage2:amd64                install
printer-driver-hpcups                install
python3-cups:amd64                install
python3-cupshelpers                install

 
 
//線上安裝軟體包
apt-get install package

 //刪除軟體包     
apt-get remove package

//刪除軟體包及配置檔案
apt-get remove package --purge



APT:

---------------------------------
---------------------------------
 
~$ apt-get
apt 2.4.8 (amd64)
用法:apt-get [選項] 指令
       apt-get [選項] install|remove 套件1 [套件2 ...]
       apt-get [選項] source 套件1 [套件2 ...]

apt-get 是指令介面,用來從已核實真偽的來源取得套件及其資訊。
取得之後可用來安裝、升級及移除套件(以及其依存套件)。

常用指令:
  update - 取得新的套件列表
  upgrade - 進行套件升級
  install - 安裝新套件(套件名稱是 libc6 而不是 libc6.deb)
  reinstall - Reinstall packages (pkg is libc6 not libc6.deb)
  remove - 移除指定套件
  purge - 移除指定套件,一併移除套件建立的設定檔或其他相關聯檔案。移除並清除套件
  autoremove - 移除指定套件,一併移除相依套件。自動移除所有不再使用的套件
  dist-upgrade - 進行套件升級,也安裝相依套件。發行版本升級,請參閱 apt-get(8)
  dselect-upgrade - 採用 dselect 的選項升級
  build-dep - 為原始碼套件配置編譯相依關係
  satisfy - Satisfy dependency strings
  clean - 刪除 APT安裝套件時存放的套件檔案。刪除已下載的套件檔
  autoclean - 只移除已無法再被下載的套件檔,如過舊版本。刪除已下載但已有新版本的套件檔
  check - >自動更新套件快娶內容。檢查相依關係是否有問題
  source - 下載套件原始碼
  download - 下載套件執行檔到目前所在目錄
  changelog - 下載與顯示給定軟體包的修改記錄 (Changelog)
 
 
~$ sudo apt-get update    只是更新套件資料庫內,軟體版本資訊 
~$ sudo apt upgrade -y   更新系統上所有已經安裝套件
~$ sudo apt-get update && sudo apt-get upgrade    通常update 、upgrade兩指令一起執行
 
~$ sudo apt-get install firefox    只更新所指定的套件,一次不限只能一個套件,也可用*
                                                    且APT 也會找出相依套件並進行安裝
 
 
 
---------------------------------
---------------------------------
 
大部分是查詢相關動作,所以不須管理者權限 sudo 即可執行
~$ apt-cache   
apt 2.4.8 (amd64)
用法:    apt-cache [選項] 指令
        apt-cache [選項] show 軟體包1 [軟體包2 ...]

apt-cache 查詢與顯示已安裝或可安裝的軟體包資訊。
其專門用於透過例如 apt-get 的 'update' 指令取得到
本機快取的資料。假如上次更新資料庫的時間過久,
顯示的資訊可能已經過期。但是也讓 apt-cache 獨立
運作於可使用的已設定來源(例如:離線)。

常用指令:
  showsrc - 顯示原始碼報告
  showpkg    -顯示指定套件的所有資訊
  search - 不確定套件完整名稱時。根據正規表示式搜索套件列表
  depends - 顯示該套件的原始相依關係的資訊
  rdepends - 顯示所有相依於該套件的套件名稱
  show - 顯示該套件的易於閱讀的報告
  pkgnames - 列出系統中所有可用套件
  policy - 顯示套件的可安裝版本資訊

 
 
~$ apt-cache showpkg kazam
 
~$ apt-cache pkgnames ftp
ftp-proxy
ftpwatch
ftpmirror
ftp
ftpgrab
ftp-upload
ftpd
ftp-proxy-doc
ftpsync
ftpcopy
ftp-ssl
ftp.app
ftpd-ssl

 
 

 

終端機

ctrl+alt+T 叫出終端機
ctrl+shift+Q    關閉終端機
F11    終端機全螢幕 / 恢復
 
ctrl+shift+C   複製
ctrl+shift+V    貼上 
 
$ clear    清除終端機畫面



系統時間呈現秒數

~$ gsettings set org.gnome.desktop.interface clock-show-seconds true


安裝chrome

下載    google-chrome-stable_current_amd64.deb
$ sudo apt install ./下載/google-chrome-stable_current_amd64.deb
再將chrome 加入喜好
 
 
或者
 
~$ sudo apt update
~$ sudo apt install wget 

~$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
 
~$ ls
 google-chrome-stable_current_amd64.deb 

~$ sudo dpkg -i google-chrome-stable_current_amd64.deb
 
~$ google-chrome 

安裝印表機    

canon imageRunner Advance 4535i
先至官網下載驅動程式    linux-UFRII-drv-v560-m17n-01.tar.gz
解壓縮
將 ./linux-UFRII-drv-v5/60-m17n/x64/Debian/cnrdrvcups-ufr2-uk_5.60-1.01_amd64.deb
內 *.deb    複製到 ./下載/
 
$ sudo apt install ./下載/cnrdrvcups-ufr2-uk_5.60-1.01_amd64.deb
 
---------------------
~$ sudo apt-get install ./linux-UFRII-drv-v560-m17n-04/linux-UFRII-drv-v560-m17n/x64/Debian/cnrdrvcups-ufr2-uk_5.60-1.04_amd64.deb
 
~$ sudo apt install ./下載/linux-UFRII-drv-v560-m17n-04/linux-UFRII-drv-v560-m17n/x86/Debian/cnrdrvcups-ufr2-uk_5.60-1.04_i386.deb
 
 //查詢套件
~$ apt-cache pkgnames cnr
cnrdrvcups-ufr2-uk
 
~$ sudo apt autoremove cnrdrvcups-ufr2-uk
 
~$ sudo apt-get purge cnrdrvcups-ufr2-uk

------------------------
 //查詢套件
~$ dpkg -l cnrdrvcups-ufr2-uk
 

標點符號    全形

 中文(新酷音)
ctrl+1     /    ctrl+0   叫出各種符號選單 
shift+,   
shift+.   
shift+?     
shift+!   
shift+:   
shift+"    ; 

shift+(  (     
shift+)    
shift+[   
shift+]   
shift+z    
shift+x   
 
 
    +、   
    +[    
    +]      


----------------------------------------------------------------- 開始使用 --------------------------------

查詢 Ubuntu 版本資訊

$ uname -a
Linux kk-ubuntu 5.15.0-48-generic #54-Ubuntu SMP Fri Aug 26 13:26:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

 
//The  lsb_release command provides certain LSB (Linux Standard Base) and
       distribution-specific information.
$ lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:    jammy


查詢IP

$  ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:e0:4c:23:07:3a brd ff:ff:ff:ff:ff:ff
    inet 163.32.145.100/24 brd 163.32.145.255 scope global noprefixroute enp1s0
       valid_lft forever preferred_lft forever



概覽

Windows 鍵
 

在應用程式間切換

Alt + Tab
 

最大 / 小 化目前視窗

Windows 鍵 + 方向鍵上 / 下
 

關閉目前視窗

Alt +F4
 

擴展目前視窗到視窗的 左 / 右 半部

Windows 鍵 + 方向鍵左 / 右

切換 工作區(系統桌面的虛擬延伸)

Ctrl + Alt + 方向鍵左 / 右

叫出終端機 

Ctrl + Alt + T

擷取螢幕畫面

PrintScr






~~~~~~~~~~https://www.youtube.com/watch?v=GSskglPsCi0&t=173s

切換admin

~$ sudo su
[sudo] kk 的密碼:
root@kk-ubuntu:/home/kk# 

 
 
 

查看cpu、ram、process

$ top
 top - 10:19:35 up  2:12,  1 user,  load average: 1.26, 1.10, 0.93
Tasks: 256 total,   2 running, 254 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.5 us,  2.7 sy,  0.0 ni, 91.0 id,  1.8 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7823.9 total,    202.1 free,   2875.2 used,   4746.6 buff/cache
MiB Swap:   2048.0 total,   2047.2 free,      0.8 used.   3824.9 avail Mem

PID USER      PR  NI    VIRT        RES        SHR  S  %CPU  %MEM     TIME+  COMMAND   
 
 

查看記憶體

 $ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.6Gi       2.8Gi       346Mi       815Mi       4.5Gi       3.8Gi
置換:      2.0Gi       0.0Ki       2.0Gi


查看硬碟

$ df -h
檔案系統        容量  已用  可用 已用% 掛載點
tmpfs           783M  2.0M  781M    1% /run
/dev/sda3       457G   12G  422G    3% /
tmpfs           3.9G   92M  3.8G    3% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
/dev/sda2       512M  5.3M  507M    2% /boot/efi
tmpfs           783M  2.4M  781M    1% /run/user/1000




 -------------------------------系統管理

查看process

//a:顯示所有使用者執行的行程   u:顯示該行程的使用者帳號    x: 系統以daemon執行的行程    w:可完整顯示行程名稱
//print status
~$ ps auxw
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.1 166644 11520 ?        Ss   10:03   0:02 /sbin/init splash
...
kk          3032  2.7  2.0 1362392 123456 ?      Sl   10:36   0:03 rhythmbox
...


$ man ps
NAME
       ps - report a snapshot of the current processes.



刪除行程

//   -9 強制執行
~$ kill -9 3032


工作監控

~$ top


查看埠口

$ sudo apt install net-tools
[sudo] kk 的密碼: 
 
$ netstat -nap | less

 
 

系統升級

~$ sudo do-release-upgrade
~~~~~~~~~~



ubuntu for python in vscode

預設就有python
~$ python3 --version
Python 3.10.6

~$ python3
Python 3.10.6 (main, Aug 10 2022, 11:40:04) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print(3+6)
9
>>>
 
 
 
 
https://code.visualstudio.com/
下載    code_1.71.2-1663191218_amd64.deb

~$ sudo dpkg -i ./下載/code_1.71.2-1663191218_amd64.deb 

~$ sudo dpkg --get-selections code
code                        install
 
~$ sudo dpkg --get-selections | grep code
amd64-microcode                    install
chromium-codecs-ffmpeg-extra            install
code                        install
dmidecode                    install
intel-microcode                    install
iso-codes                    install
iucode-tool                    install
libavcodec58:amd64                install
libcodec2-1.0:amd64                install
libencode-locale-perl                install
libgeocode-glib0:amd64                install


~$ mkdir myPython
~$ cd myPython/
~/myPython$code .     //空格再一個點

開啟vscode且進入特定目錄內

 
 
 
安裝中文繁體、
Extensions-->Chinese (Traditional) Language Pack for Visual Studio Code
 
安裝python延伸套件
Extensions-->python v2022.18.2

開始撰寫程式
新增空白檔

檔名及副檔名
 程式碼完成後,執行
結果

 File --> Preferences --> Settings -->User (近似全域)
                Text Editor
 
 
                Files
 


 

 

Python IDLE on ubuntu

~$ python3
>>> print(3+6)
9
[1]+  停止                  python3             #ctrl+z

~$ sudo apt-get update

~$ sudo apt-get install idle3





 





建立virtual environments

~$ sudo apt install python3.10-venv python3-venv
 
 ~$ mkdir python/project01
 ~$ cd python/project01/
~/python/project01$ python3.10 -m venv venv_demo

~/python/project01$ ls
venv_demo
 
~/python/project01$ ls venv_demo/
bin  include  lib  lib64  pyvenv.cfg

~$ source python/project01/venv_demo/bin/activate
(venv_demo) kk@kk-ubuntu:~$ 



----------------
~$ ls python/proj01/demo/demo.py
~$ cd python/proj01/demo/
~/python/proj01/demo$ code .
~/python/proj01/demo$ 
 
ctrl+shift+p    -->setting    -->Preferences: Open User Settings (想成是全域)    -->

{
       // User Settings

       "window.zoomLevel": 1, // 視窗縮放
       "editor.fontSize": 22,
       "editor.lineHeight": 26,
       // "terminal.integrated.fontSize": 30, // terminal 字體大小
       // "editor.formatOnSave": true, // 當儲存時,是否自動格式化
       "files.autoSave": "onFocusChange", // 是否自動儲存檔案
   
       // 注意,win 用戶都要使用 "\\"
       //"python.defaultInterpreterPath": "C:\\Users\\twtru\\Anaconda3\\envs\\venv_temp\\python.exe", // 預設的 PYTHON 執行環境
   
       "extensions.ignoreRecommendations": true, // 是否忽略顯示建議的套件
       "files.encoding": "utf8", // 設定預設編碼
       "files.trimTrailingWhitespace": true, // 儲存的時候,會幫你自動過濾多餘的空格
       "files.autoGuessEncoding": false, // 是否自動猜測檔案的編碼
       "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
       // "workbench.welcome.enabled": false, // 使否關閉 vscode 歡迎的顯示頁面
       "workbench.startupEditor": "newUntitledFile",
       "explorer.confirmDelete": false,
   
       // "workbench.colorTheme": "One Dark Pro", // 需安裝 One Dark Pro
       "workbench.iconTheme": "vscode-icons",  // 需安裝 vscode-icons
   
}




ctrl+shift+p    -->setting    -->Preferences: Open Workspace Settings (只在你的工作目錄內才會生效 ( 工作目錄內會多出一個資料夾 .vscode  )    -->
 
{
        // Workspace Settings

    // virtual environments 中的 python 執行檔
    // "python.defaultInterpreterPath": "/python/proj01/bin/python.exe",

"python.pythonPath": "C:\\Users\\twtru\\OneDrive\\work\\venv\\venv_demo\\Scripts\\python.exe",

    // 可以設定你放全部的 venvs 環境的根目錄資料夾
    //"python.venvPath": "C:\\Users\\twtru\\OneDrive\\work\\venv",
"python.venvPath": "/python",
    "python.terminal.activateEnvironment": true, // 自動啟動環境
    "python.linting.pylintEnabled": true,  // 需要 pip install pylint,檢查格式碼
    "python.linting.enabled": true,  // 需要 pip install pylint
}





VMware Workstation  Player

ASUS:BIOS --> SecureBoot --> OSType --> OtherOS

 
 https://www.vmware.com/latam/products/workstation-player/workstation-player-evaluation.html
 
~$ ls -l 下載
-rw-rw-r-- 1 kk kk  522168353 12月 12 09:00 VMware-Player-Full-17.0.0-20800274.x86_64.bundle
 
~$ sudo chmod +x 下載/VMware-Player-Full-17.0.0-20800274.x86_64.bundle
~$ ls -l 下載
-rwxrwxr-x 1 kk kk  522168353 12月 12 09:00 VMware-Player-Full-17.0.0-20800274.x86_64.bundle

~$ sudo ./下載/VMware-Player-Full-17.0.0-20800274.x86_64.bundle
Extracting VMware Installer...done.
Installing VMware Player 17.0.0
...
 
~/下載$ sudo apt install gcc

~/下載$ sudo apt-get install build-essential
 
 
 
~~~~~~~~~~VMware Workstation 16.2.4 Player for Linux 64-bit

~$ sudo apt update && sudo apt upgrade
 
~$ sudo vmware-installer -u vmware-player
 
 
https://customerconnect.vmware.com/en/downloads/details?downloadGroup=WKST-PLAYER-1624&productId=1039&rPId=91446

~$ cd 下載
 
~/下載$ ls
VMware-Player-Full-16.2.4-20089737.x86_64.bundle

~/下載$ sudo sh VMware-Player-Full-16.2.4-20089737.x86_64.bundle
[sudo] kk 的密碼:
Extracting VMware Installer...done.

~/下載$ sudo apt install gcc

~/下載$ sudo apt-get install build-essential



-------------------------
win10安裝 Canon imageADVANCE C5550F 


















----------

https://customerconnect.vmware.com/en/downloads/details?downloadGroup=WKST-PLAYER-1624&productId=1039&rPId=91446


~$ ls 下載
VMware-Player-Full-16.2.4-20089737.x86_64.bundle

~$ sudo apt-get update
[sudo] kk 的密碼:

~$ sudo apt-get install -y  build-essential libaio1

~$ sudo apt-get install linux-headers-$(u)

~$ sudo reboot now


~$ cd 下載
~/下載$ ls
VMware-Player-Full-16.2.4-20089737.x86_64.bundle

~/下載$ sudo chmod +x VMware-Player-Full-16.2.4-20089737.x86_64.bundle
[sudo] kk 的密碼: 

~/下載$ ls -al
-rwxrwxr-x  1 kk kk 533193714  9月 30 10:32 VMware-Player-Full-16.2.4-20089737.x86_64.bundle
 
~/下載$ sudo ./VMware-Player-Full-16.2.4-20089737.x86_64.bundle
Extracting VMware Installer...done.
Installing VMware Installer 3.0.0
...



VirtualBox

 
 
移除
~$ dpkg -l
~$ sudo apt-get remove virtualbox-7.0



螢幕快照

PrintScr




打包tar、壓縮gzip
~~~~~~~~~~
 ~/圖片/螢幕快照$ ls
 10-18-30.png     10-19-25.png
 
  ~/圖片/螢幕快照$ tar zcvfp test223.tar.gz 10-18-30.png 10-19-25.png
 
 ~/圖片/螢幕快照$ cp test223.tar.gz ~/

 
~$ ls
  test223.tar.gz

~$ tar zxvfp test223.tar.gz
10-18-30.png      10-19-25.png
 
~$ ls
 10-18-30.png     10-19-25.png   
 
 
 
 

//打包 tar Tape ARchive

//c:建立 tar ball    v:顯示打包過程,會減緩執行速度,盡量不加    
//p:保留檔案原先存取權限    f:將打包結果存成檔案
//tar cvpf 目的檔   來源目錄或檔案
~$ tar cvpf snap.tar snap
 
~$ ls
snap  snap.tar  

//解開打包
~$ tar xpf snap.tar
 
 

//gzip

~$ tar zcpf snap.tar.gz snap
~$ ls
snap  snap.tar.gz  
 
//解壓縮
~$ tar zxpf snap.tar.gz
 
 
 
 
-------
打包
~$ tar cpf snap.tar snap
snap  snap.tar  
 
壓縮
~$ gzip snap.tar
~$ ls
snap    snap.tar.gz 
 
解壓縮
~$ gunzip snap.tar.gz
 
 
 

//bzip2

~$ tar jcpf snap.tar.bz2 snap
~$ ls
snap   snap.tar.bz2 

//解壓縮
~$ tar jxpf snap.tar.bz2
 
 
-------
打包
~$ tar cpf snap.tar snap
snap  snap.tar  
 
壓縮
~$ bzip2 snap.tar
~$ ls
snap    snap.tar.bz2
 
解壓縮
~$ bunzip2 snap.tar.gz
 
 

 
 

//zip

/*目錄底下所有檔案
~$ zip snap.zip snap/*
  adding: snap/firefox/ (stored 0%)
  adding: snap/snapd-desktop-integration/ (stored 0%)
  adding: snap/snap-store/ (stored 0%)
 
~$ ls
snap  snap.zip 
 
~$ unzip snap.zip
 


//rar

~$ sudo apt-get install rar
~$ rar a snap.rar snap
 
~$ ls
snap  snap.rar

~$ rar x snap.rar



//磁碟備份 dar Disk ARchive
 
 
 
 

~~~~~~~~~~copy


~$ cp -a vmware/Windows\ 10\ x64/. vmware/Windows\ 10\ x64\bk








======================Ubuntu 指令介紹    PCUser 翁卓立
//手冊
~$ man ip
//文件
~$ info ip
// 輔助
~$ ip --help
 
若指令名稱不記得,到存放指令的目錄查找
~$ ls /bin
~$ ls /sbin
~$ ls /usr/bin
~$ ls /usr/sbin
 
清除螢幕
~$ clear
 
 列出檔案
 ~$ ls /bin
 
切換目錄
kk@kk-ubuntu:~$ cd /bin
kk@kk-ubuntu:/bin$  

顯示目前目錄    print working directory
kk@kk-ubuntu:/bin$ pwd
/bin
 
回到家目錄
kk@kk-ubuntu:/bin$ cd ~
kk@kk-ubuntu:~$ 
 
 建立目錄
~$ mkdir -p dir1/dir2
~$ ls dir1/dir2 

建立檔案、更新檔案時間
~$ touch dir1/dir2/read.txt
~$ ls dir1/dir2/read.txt
dir1/dir2/read.txt
 
編輯文字檔
~$ vi dir1/dir2/read.txt
 
顯示檔案內容concatenate
~$ cat dir1/dir2/read.txt
this is my doc for test
以下是內文部份
測試
測試
測試
測試
測試

文字測試結束!
 
尋找檔案
//find 開始搜尋目錄 -name 檔名
 ~$ find -name read.txt
./dir1/dir2/read.txt

顯示檔頭
 ~$ head -2 ./dir1/dir2/read.txt
this is my doc for test
以下是內文部份
 
顯示檔尾
~$ tail -1 ./dir1/dir2/read.txt
文字測試結束!

資料夾、檔案佔用大小
~$ du -h ./dir1
8.0K    ./dir1/dir2
12K    ./dir1
 
~$ du -h ./dir1/dir2/read.txt
4.0K    ./dir1/dir2/read.txt
 
已掛載檔案系統使用量
~$ df -h
檔案系統        容量  已用  可用 已用% 掛載點
tmpfs           783M  2.1M  781M    1% /run
/dev/sda3       457G   24G  411G    6% /
tmpfs           3.9G   11M  3.9G    1% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
/dev/sda2       512M  5.3M  507M    2% /boot/efi
tmpfs           783M  2.4M  781M    1% /run/user/1000
 
複製目錄及底下檔案
~$ cp -R ./dir1/dir2 ./dir1/dir22
kk@kk-ubuntu:~$ ls ./dir1
dir2  dir22
 
移動目錄檔案
~$ mv ./dir1/dir22 ./
 
~$ ls ./dir1
dir2
 
~$ ls ./
dir1   dir22

若移動位置相同,則可作為更改檔名用
~$ mv ./dir22 ./dir2233
~$ ls
dir1     dir2233 
 


-------------------------------
~$ mkdir test1
~$ touch test1/readme.txt

~$ ls test1/
readme.txt

~$ rmdir test1
rmdir: 刪除 'test1' 失敗: 目錄不是空的

~$ rm test1/readme.txt
~$ rmdir test1
~$ ls


~$ mkdir test2
~$ touch test2/readme.txt
~$ ls test2/readme.txt
test2/readme.txt

// 強制刪除目錄與底下檔案
~$ rm -ir test2
rm: descend into directory 'test2'? y
rm:是否刪除一般空白檔案 'test2/readme.txt'? y
rm:是否刪除目錄 'test2'? y
kk@kk:~$ ls

 
rm - remove files or directories
 
OPTIONS
       Remove (unlink) the FILE(s).

       -f, --force
              ignore nonexistent files and arguments, never prompt

       -i     prompt before every removal

       -r, -R, --recursive
              remove directories and their contents recursively
 
-------------------------------



~$ ls /
bin    dev   lib    libx32      mnt   root  snap      sys  var
boot   etc   lib32  lost+found  opt   run   srv       tmp
cdrom  home  lib64  media       proc  sbin  swapfile  usr

// 截取字串
~$ ls / | grep b
bin
boot
lib
lib32
lib64
libx32
sbin
 
//僅 b 開頭
~$ ls / | grep "^b"
bin
boot

//僅 t 結尾
kk@kk:~$ ls / | grep "t$"
boot
mnt
opt
root
 
// b 或 e 開頭
~$ ls / | grep "^[be]"
bin
boot
etc
 
// t 或 n 結尾
~$ ls / | grep "[tn]$"
bin
boot
mnt
opt
root
run
sbin



~$ ls / | grep bin
bin
sbin
 
~$ ls / | grep -w bin
bin

 
 
 
~$ ls /bin
'['                                   mousetweaks
 aa-enabled                           mscompress
 aa-exec                              msexpand
 aa-features-abi                      mt
...
 
//分頁顯示 less 或 more
 ~$ ls /bin | grep '^[mx]' | less
 
 
 
 
 
-------------------------------

//path 環境變數目錄中尋找可執行檔
~$ which ip
/usr/sbin/ip

//類似
which 但還會搜尋man page的額外目錄與指令
~$ whereis ip
ip: /usr/bin/ip /usr/sbin/ip /usr/share/man/man7/ip.7.gz /usr/share/man/man8/ip.8.gz


-------------------------------權限管理
~$ ls -l
總用量 40
drwx------ 5 kk kk 4096 11月  8 12:43 snap
drwxr-xr-x 2 kk kk 4096 11月  8 12:42 下載
drwxr-xr-x 2 kk kk 4096 11月  2 11:44 公共
drwxr-xr-x 3 kk kk 4096 11月 10 08:08 圖片
drwxr-xr-x 2 kk kk 4096 11月  2 11:44 影片
drwxr-xr-x 2 kk kk 4096 11月  2 11:44 文件
drwxr-xr-x 2 kk kk 4096 11月  2 11:44 桌面
drwxr-xr-x 2 kk kk 4096 11月  2 11:44 模板
drwxr-xr-x 2 kk kk 4096 11月  2 11:44 音樂
 
 
d   rwx   r-x   r-- 2 kk kk 4096 11月  8 12:42 測試
檔案屬性:-檔案、 d目錄、l 連結檔
擁有者 u 存取權限:rwx   4+2+1
群組 g 存取權限:r-x   4+0+1
其它使用者 o 存取權限r--   4+0+0
 
除 RWX權限外,還有setuid 、 setgid 、 sticky  bit三種特殊權限
 
//更改讀取權限 
~$ touch read.txt
~$ ls -l
-rw-rw-r-- 1 kk kk    0 11月 10 11:14 read.txt
 
~$ chmod 710 read.txt
~$ ls -l
-rwx--x--- 1 kk kk    0 11月 10 11:14 read.txt
 
~$ chmod g+w,o=r read.txt 
~$ ls -l
-rwx-wxr-- 1 kk kk    0 11月 10 11:14 read.txt
 
//chown
 
//chgrp
 
 
 
 
//查詢線上使用者
~$ who
kk       tty2         2022-11-11 10:03 (tty2)

 
//我是誰
~$ whoami
kk


//最後登入時間。顯示使用者在何時登入、登入後所停留時間
//still logged in 此使用者仍在線上,reboot 當時執行一次重新開機
~$ last
kk       tty2         tty2             Fri Nov 11 10:03   still logged in
reboot   system boot  5.15.0-52-generi Fri Nov 11 10:03   still running
kk       tty2         tty2             Fri Nov 11 09:48 - down   (00:14)
reboot   system boot  5.15.0-48-generi Fri Nov 11 09:48 - 10:03  (00:15)
//切換使用者   su
 
//取得管理權限   sudo
 
 //磁碟分割    fdisk
 
//製作檔案系統   mkfs
 
 
//掛載磁碟   mount
 
 
 //卸載磁碟   umount
 
 
//檢查檔案系統   fsck
 

//關機   shutdown

 //重新開機   reboot
 
 
 //新增群組   addgroup
 
 
//delgroup
 
 
//adduser
 
//deluser
 
 
 
//顯示使用者所屬群組   groups
~$ groups kk
kk : kk adm cdrom sudo dip plugdev lpadmin lxd sambashare

~$ groups root
root : root



//顯示某群組的成員   members

 
//修改使用者屬性   usermod
 
 
//修改密碼   passwd
 
 
//預約執行   at    (只能執行1次,無法定期執行)
~$ at 15:06
warning: commands will be executed using /bin/sh
at Fri Nov 11 15:06:00 2022
at> tar cfv snap.tar ./snap
at> <EOT>
job 2 at Fri Nov 11 15:06:00 2022
//<EOT>   ctrl+D  結束編輯模式
 
//查詢目前已建立的預約行程
~$ atq
4    Fri Nov 11 15:06:00 2022 a kk
 
~$ ls
snap      snap.tar   
 
~$ rm -f snap.tar
 
 
 
//定期執行   crontab    (定期執行)
 
若第1次使用,要設定編輯器
~$ crontab -e
no crontab for kk - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /bin/ed

Choose 1-3 [1]: 2
E1187: Failed to source defaults.vim
Press ENTER or type command to continue

 
重新選擇編輯器
~$ select-editor

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /bin/ed

Choose 1-3 [1]: 1
 
 
//每天午夜12點執行 
分鐘   小時    每月第幾天    月份    星期幾    命令
m        h           dom                mon   dow        command
0 0 * * * sudo apt-get update && sudo apt-get upgrade
 
 //查詢目前已設定的行程
~$ crontab -l 

//移除已設定的工作
~$ crontab -r
 
~$ crontab -l
no crontab for kk

//若只想移除某一項工作,可再度執行 crontab -e   將不打算執行的行加上註解字元 # ,刪除該行
 
 
 
//背景執行   bg
 
 
//前景執行   fg
 
 
//服務管理   service 
 
//~$ sudo /etc/init.d/cron
 * Usage: /etc/init.d/cron {start|stop|status|restart|reload|force-reload}

 
~$ sudo service --status-all
[sudo] kk 的密碼:
 [ + ]  acpid
 [ - ]  alsa-utils
 [ - ]  anacron
 [ + ]  apparmor
 [ + ]  apport
[ + ]  cron
...

//[ + ]目前運作中     [ - ]未執行      [? ]狀態不明 
 
 
~$ sudo service cron stop
~$ sudo service --status-all
 [ + ]  acpid
 [ - ]  alsa-utils
 [ - ]  anacron
 [ + ]  apparmor
 [ + ]  apport
 [ + ]  avahi-daemon
 [ - ]  bluetooth
 [ - ]  console-setup.sh
 [ - ]  cron
 ...
 
 ~$ sudo service cron start
~$ sudo service --status-all
 [ + ]  acpid
 [ - ]  alsa-utils
 [ - ]  anacron
 [ + ]  apparmor
 [ + ]  apport
 [ + ]  avahi-daemon
 [ - ]  bluetooth
 [ - ]  console-setup.sh
 [ + ]  cron
 ...
 
 
//設定時間
~$ date
西元2022年11月14日 (週一) 10時56分46秒 CST
 

//萬年曆
~$ sudo apt install ncal
[sudo] kk 的密碼:

 ~$ cal
      十一月 2022        
日 一 二 三 四 五 六  
       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      


~$ cal 06 2022
      六月 2022         
日 一 二 三 四 五 六  
          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 


 
-------------------------------網路指令

~$ sudo apt-get install net-tools
~$ ifconfig
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 163.32.145.99  netmask 255.255.255.0  broadcast 163.32.145.255
        inet6 2001:288:8241:1:55db:7e4a:3cc6:e3d  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::4ff1:bbcd:3ec4:46fb  prefixlen 64  scopeid 0x20<link>
        inet6 2001:288:8241:1:fa47:84b4:2d88:6fe2  prefixlen 64  scopeid 0x0<global>
        inet6 2001:288:8241:1::283  prefixlen 128  scopeid 0x0<global>
        ether 00:e0:4c:23:07:3a  txqueuelen 1000  (Ethernet)
        RX packets 154291  bytes 116971669 (116.9 MB)
        RX errors 0  dropped 203  overruns 0  frame 0
        TX packets 87383  bytes 20460163 (20.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 7867  bytes 851788 (851.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7867  bytes 851788 (851.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


//查詢主機路由表
~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         163.32.145.254  0.0.0.0         UG    100    0        0 enp1s0
163.32.145.0    0.0.0.0         255.255.255.0   U     100    0        0 enp1s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp1s0


~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=113 time=6.99 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=113 time=7.01 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=113 time=6.95 ms
^C


//列出目前主機與被測主機間,經過的路由器IP
~$ sudo apt-get install traceroute
~$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  _gateway (163.32.145.254)  0.078 ms  0.069 ms  0.074 ms
 2  10.241.3.153 (10.241.3.153)  0.918 ms  0.893 ms  0.872 ms
 3  192.192.69.250 (192.192.69.250)  1.117 ms  1.101 ms 192.192.69.248 (192.192.69.248)  29.690 ms
 4  192.192.69.240 (192.192.69.240)  1.941 ms  1.924 ms 192.192.71.252 (192.192.71.252)  2.238 ms
 5  192.192.61.154 (192.192.61.154)  2.955 ms  2.940 ms  2.924 ms
 6  192.192.61.24 (192.192.61.24)  6.751 ms 192.192.61.32 (192.192.61.32)  6.115 ms 192.192.61.24 (192.192.61.24)  6.728 ms
 7  192.192.61.184 (192.192.61.184)  7.802 ms^C
 


//目前主機有多少網路連線、系統開放的通訊埠
~$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN     
tcp        0      0 pc99.chihjh.kh.ed:34994 17.111.232.35.bc.g:http TIME_WAIT  
tcp        0      0 pc99.chihjh.kh.ed:40862 ec2-34-213-121-12:https ESTABLISHED



~$ hostname
Myubu



~$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
--2022-11-23 10:12:55--  https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
正在查找主機 dl.google.com (dl.google.com)... 2404:6800:4012:2::200e, 172.217.160.78
正在連接 dl.google.com (dl.google.com)|2404:6800:4012:2::200e|:443... 連上了。
已送出 HTTP 要求,正在等候回應... 200 OK
長度: 93320612 (89M) [application/x-debian-package]
儲存到:‘google-chrome-stable_current_amd64.deb’

          google-chrome-stable_c  13%[======>                                                  ]  11.71M  9.71MB/s               ^C






-------------------------------驗證工具

MD5訊息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位元(16個字元(BYTES))的雜湊值(hash value),用於確保資訊傳輸完整一致。


SHA-1(英語:Secure Hash Algorithm 1,中文名:安全雜湊演算法1)是一種密碼雜湊函式,美國國家安全局設計,並由美國國家標準技術研究所(NIST)發布為聯邦資料處理標準(FIPS)[3]。SHA-1可以生成一個被稱為訊息摘要的160位(20位元組)雜湊值,雜湊值通常的呈現形式為40個十六進位數。


SHA-2,名稱來自於安全散列演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼雜湊函數演算法標準,由美國國家安全局研發[3],由美國國家標準與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演算法標準了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。





-------------------------------Shell
 提供介面讓使用者可以操作電腦的特殊程式。或稱為命令列直譯器
Command-Line Interpreter CLI
 UNIX / Linux 常見的 Shell 有 bash 與 tcsh


 
 
-------------------------------重導 > 重導後出檔案,不存在:建立
                                                                               檔案,   存在:覆蓋原內容

 

~$ man dpkg > myDpkg.txt 

~$ cat myDpkg.txt
dpkg(1)                                                   dpkg suite                                                   dpkg(1)

NAME
       dpkg - package manager for Debian

SYNOPSIS
       dpkg [option...] action

WARNING
       This manual is intended for users wishing to understand dpkg's command line options and package states in more detail
       than that provided by dpkg --help.


 
 
 
-------------------------------重導 >> 重導後出檔案,不存在:建立

                                                                         檔案,   存在:添加到原內容後面

 

 

-------------------------------標準輸入 stdin 、標準輸出 stdout 、標準錯誤 stderr



-------------------------------環境
 ~$ env
SHELL=/bin/bash
SESSION_MANAGER=local/Myubu:@/tmp/.ICE-unix/1126,unix/Myubu:/tmp/.ICE-unix/1126
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
SSH_AGENT_LAUNCHER=gnome-keyring
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LANGUAGE=zh_TW:zh



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




~~~~~~~~~~以安裝 OpenShot 程式為例

安裝 AppImage

 
 ~$ ls -l 下載/OpenShot-v3.0.0-x86_64.AppImage
-rw-rw-r-- 1 kk kk 236278976 12月 14 10:16 下載/OpenShot-v3.0.0-x86_64.AppImage

$ sudo chmod u+x 下載/OpenShot-v3.0.0-x86_64.AppImage
[sudo] kk 的密碼: 

~$ ls -l 下載/OpenShot-v3.0.0-x86_64.AppImage
-rwxrw-r-- 1 kk kk 236278976 12月 14 10:16 下載/OpenShot-v3.0.0-x86_64.AppImage


~$ sudo apt-get install libfuse*
正在讀取套件清單... 完成
...
 
~$ sudo ./下載/OpenShot-v3.0.0-x86_64.AppImage
Loaded modules from: /tmp/.mount_OpenShTWtYl0/usr/bin
...
 
 
 
-----------------------------------------
 修正ubuntu 22.04 1播放mp4 影音有問題
~$ sudo apt-get install ubuntu-restricted-extras
 

 
----------------------------------------- Ubuntu DVD to ISO
kk@ubun:~$ dd if=/dev/cdrom of=kk.iso bs=2048
輸入 1776843+0 個紀錄
輸出 1776843+0 個紀錄
3638974464位元組(3.6 GB,3.4 GiB)已複製,257.202 s,14.1 MB/s
kk@ubun:~$ ls
kk.iso  snap  下載  公共  圖片  影片  文件  桌面  模板  音樂
 

























































































 


 

 


 

 

2022年1月11日 星期二

網路指令

 Winows10


PS C:\Users\kk> ping  /?

使用方式: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
            [-r count] [-s count] [[-j host-list] | [-k host-list]]
            [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
            [-4] [-6] target_name

選項:
    -t             Ping 指定的主機,直到停止。
                   若要查看統計資料並繼續,請按 Control-Break;
                   若要停止,請按 Control-C。
    -a             將位址解析為主機名稱。
    -n count       要傳送的回應要求數目。
    -l size        傳送緩衝區大小。
    -f             在封包中設定 Don't Fragment 旗標 (僅 IPv4)。
    -i TTL         存留時間。
    -v TOS         服務類型 (僅 IPv4。此設定已過時,而且對 IP 標頭中的
                   服務類型欄位沒有影響)。
    -r count       記錄路由以供計算躍點 (僅 IPv4)。
    -s count       供計算躍點的時間戳記 (僅 IPv4)。
    -j host-list   鬆散的主機清單的來源路由 (僅 IPv4)。
    -k host-list   嚴格的主機清單來源路由 (僅 IPv4)。
    -w timeout     每個回覆的等候逾時 (單位為毫秒)。
    -R             也使用路由標頭測試反向路由 (僅 IPv6)。
                   根據 RFC 5095,已不再使用此路由標頭。如果使用此標頭,某些
                   系統可能會捨棄回應要求。
    -S srcaddr     要使用的來源位址。
    -c compartment 路由區間識別碼。
    -p             對 Hyper-V 網路虛擬化提供者位址執行 Ping。
    -4             強制使用 IPv4。
    -6             強制使用 IPv6。



PS C:\Users\kk> ping  www.google.com

Ping www.google.com [2404:6800:4012:1::2004] (使用 32 位元組的資料):
回覆自 2404:6800:4012:1::2004: 時間=35ms
回覆自 2404:6800:4012:1::2004: 時間=24ms
回覆自 2404:6800:4012:1::2004: 時間=29ms
回覆自 2404:6800:4012:1::2004: 時間=31ms

2404:6800:4012:1::2004 的 Ping 統計資料:
    封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
大約的來回時間 (毫秒):
    最小值 = 24ms,最大值 = 35ms,平均 = 29ms



PS C:\Users\kk> ping -4 www.google.com

Ping www.google.com [172.217.160.100] (使用 32 位元組的資料):
回覆自 172.217.160.100: 位元組=32 時間=20ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=18ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=7ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=11ms TTL=114

172.217.160.100 的 Ping 統計資料:
    封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
大約的來回時間 (毫秒):
    最小值 = 7ms,最大值 = 20ms,平均 = 14ms



PS C:\Users\kk> ping  172.217.160.100

Ping 172.217.160.100 (使用 32 位元組的資料):
回覆自 172.217.160.100: 位元組=32 時間=31ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=51ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=36ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=45ms TTL=114

172.217.160.100 的 Ping 統計資料:
    封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
大約的來回時間 (毫秒):
    最小值 = 31ms,最大值 = 51ms,平均 = 40ms




PS C:\Users\kk> ping  -a 172.217.160.100

Ping tsa03s06-in-f4.1e100.net [172.217.160.100] (使用 32 位元組的資料):
回覆自 172.217.160.100: 位元組=32 時間=15ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=17ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=24ms TTL=114
回覆自 172.217.160.100: 位元組=32 時間=25ms TTL=114

172.217.160.100 的 Ping 統計資料:
    封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
大約的來回時間 (毫秒):
    最小值 = 15ms,最大值 = 25ms,平均 = 20ms









C:\Users\kk>arp /?

顯示和修改位址解析通訊協定 (ARP) 使用的 IP 對
實際位址轉譯表格。

ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]

  -a            質詢目前的通訊協定資料來顯示目前的
                ARP 項目。如果指定 inet_addr,只會顯示指定電腦的
                IP 及實體位址。如果有多個網路介面使用 ARP,便會顯示每個 ARP
                表格的項目。
  -g            與 -a 相同。
  -v            以詳細資訊模式顯示目前的 ARP 項目。將會顯示
                所有無效項目和回路介面上的項目。
  inet_addr     指定網際網路位址。
  -N if_addr    顯示 if_addr 指定之網路介面的 ARP
                項目。
  -d            刪除 inet_addr 指定的主機。使用萬用字元 * 取代 inet_addr
                可刪除所有主機。
  -s            新增主機並將網際網路位址 inet_addr 與實體位址
                eth_addr 相關聯。實體位址是
                6 個以連字號分隔的十六進位位元組。該項目
                永久不變。
  eth_addr      指定實體位址。
  if_addr       如果存在,這會指定介面的網際網路位址,
                應修改此介面的位址轉譯表格。
                如果不存在,將會使用第一個適用的介面。
範例:
  > arp -s 157.55.85.212   00-aa-00-62-c6-09  .... 新增靜態項目。
  > arp -a                                    .... 顯示 ARP 表格。




C:\Users\kk>arp -a

介面: 172.31.147.32 --- 0x10
  網際網路網址          實體位址               類型
  172.31.147.254        e8-1c-ba-c9-09-68     動態
  172.31.147.255        ff-ff-ff-ff-ff-ff     靜態
  224.0.0.2             01-00-5e-00-00-02     靜態
  224.0.0.22            01-00-5e-00-00-16     靜態
  224.0.0.251           01-00-5e-00-00-fb     靜態
  224.0.0.252           01-00-5e-00-00-fc     靜態
  239.255.255.250       01-00-5e-7f-ff-fa     靜態
  255.255.255.255       ff-ff-ff-ff-ff-ff     靜態

2022年1月2日 星期日

ALPHA Camp Blog 技術主題

https://tw.alphacamp.co/javascript-web-development-topics

認識演算法(Algorithm)與運算思維(Computational Thinking)

什麼是運算思維(Computational Thinking)?

微軟研究院全球副總裁周以真(Jeannette Wing)對運算思維的定義如下:
「 運算思維是一個思考的程序。它的目的是闡明問題,並呈現其解決方案,因而讓「運算器」(包括機器與人) 能夠有效率地執行。」

為什麼要談運算思維呢?因為程式設計基本上就是和電腦溝通。更確切地說,學習寫程式就是學習如何下指令給電腦執行。因此,在學習程式語言之前,我們必須先了解、熟悉撰寫程式背後的「思考模式」

為什麼要學運算思維?

培養運算思維能訓練邏輯思考、提升問題解決能力。你會學習如何拆解問題,一步一步找到最有效的解決方法。學習運算思維也有助於了解電腦的運作模式,也就是電腦如何「思考」和執行指令。有了這些知識,你就更能有效運用科技解決問題。

無論你想解決什麼問題,運算思維能幫助你分析問題、找到核心議題,並採取適合的解決方法或工具(例如程式語言)。需要和工程師或技術團隊合作時,發揮運算思維能促進彼此之間的溝通、增加你的工作效率,也有助培養跨領域的技能。

運算思維的四大步驟定義如下:

1. 拆解 (decomposition)
將複雜的問題或系統分解成更⼩、更易於管理的問題。

2. 辨識規律 (pattern recognition)
將每個⼩問題分別檢視,思考之前是否有解過類似的問題。

3.抽象化 (abstraction)
抓出重要的細節,將它轉化爲解決⽅案中的步驟。

演算法 (algorithm)設計

歸納出簡單的步驟或原則來解決每個⼩問題。在這個階段,你會定義要給電腦的輸入,以及電腦傳回的輸出。你也會定義電腦將執行的演算法。
輸入 --> 演算法 --> 輸出

如果以這四個步驟套回去剛剛的案例:其實在日常生活中,我們常常會用到運算思維。重要的是讓自己習慣用這個思考過程 (thinking process) 去拆解問題,然後把解決方案 (也是演算法) 透過程式碼去跟電腦溝通,讓電腦執行。

運算思維並不能回答我們遇到的所有問題,但提供了一個模式,讓我們能遵循清楚的流程,有系統地描述問題並加以解決。不只如此,運算思維也幫助我們找到能輕鬆轉換成程式碼的解決方法。所以,我們應該從日常生活的問題開始,培養運算思維的能力。

什麼是演算法(Algorithm)?

「演算法是一系列有條理的步驟,能用於計算解決問題做出決定。」
演算法的重點在於,如果環境和輸入不變,每次執行同一組指令時, 會得到相同的輸出。除了電腦程式之外,食譜和樂譜也是演算法的例子。

設計演算法

在設計演算法前,必須清楚定義輸入輸出
舉例來說,烤蛋糕時,你首先需要正確份量的原料(輸入),之後你會按照食譜(演算法)製作,最後烤出蛋糕(輸出)。

如何知道自己的演算法是否正確?

檢測演算法的方式之一是將輸出未知的輸入放進演算法中。從輸出結果可以觀察演算法的效用,看看演算法是否產生理想輸出。如果沒有的話,我們能觀察輸出的規律,進而修正演算法,直到獲得理想輸出為止。

演算法類型

演算法就和問題一樣有許多種類。以下是電腦科學領域常見的幾種演算法:
  • 簡單遞迴演算法 (Simple recursive algorithms:):這些演算法使用遞迴計算來找答案。這個方法用於解決古典問題,例如「計算到 n 次方」。

  • 回溯法 (Backtracking):為了找到解決方法,一個問題先劃分為多個計算用的路徑。如果路徑方向錯誤,便回到上一個位置,從另一個方向開始計算。常見的使用案例需要從大量數據中找到特定資訊。這個方法通常用來找出每一條路徑。如果一條路徑不包含目標資訊,則演算法會回到上一個連接點。

  • 動態法 (Dynamic): 這個演算法的獨特之處在於演算法會記憶之前解決過的問題,並藉由之前解決問題的經驗更快找到類似問題的解決方法。如果之前你計算過 n 的 1,000,000 次方,這個演算法不需從頭重新計算,而是能根據之前計算 n 的 1,000,001 次方的答案,更快找到解答。

  • 分而治之法 (Divide and conquer):排序是分而治之演算法常見的類型。這種演算法將一系列數字切分為多個部分,然後在每個部分進行比較排序。所有部分之後合併起來,整個組合會再次進行比較排序。這種方法的操作速度比只排序不分割的演算法還要快上好幾倍。

  • 暴力法 (Brute force):這是駭客最常使用的演算法。如果駭客想要駭入你的帳戶,大概會一次就嘗試所有可能的密碼組合。之所以稱為暴力演算法,是因為這個方法靠電腦速度暴力破解密碼。

  • 貪婪法 (Greedy):貪婪演算法和暴力演算法類似。這個解決方法會根據當前狀況找出最佳解決方法,常用來尋找與決定行駛路線。演算法不會計算抵達目的地的所有可能路線,只選擇距離下一個檢查點最短的路線,而且不會考慮檢查點之後的其他路線。

如何評估演算法?

演算法除了能否正確解決問題之外,還有「好、壞」之分嗎?答案是有的。不同的演算法,雖然都能正確達成目標,但還是有效能 (efficiency) 之分。主要的考量點有兩個:

時間複雜度 (Time complexity) - 它代表一個演算法的執行時間。針對同一個問題,有些演算法會比別的用更短的時間(也是更快速)去解決問題。

空間複雜度 (Space complexity) - 它指的是要執行該演算法 (或是程式碼) 所需的記憶體量。

可以理解,效能越好的演算法,它所需要的時間會越短、空間也越少。衡量時間、空間複雜度的方法我們叫 BigO notation. 你可能看過像這種符號:

總結

軟體開發其中一個核心技能,就是把我們想解決的問題 (或想完成的事情),整理成有條理的指令,再用電腦的邏輯與語言去跟它溝通,讓它用最有效的方法去執行。當你認識並開始深入學習演算法和運算思維,你也更能夠順利地和電腦溝通、更有效地解決問題。







前端 JavaScript | HTML | CSS| Bootstrap | RWD | DOM | API | AJAX | Postman | jQuery

後端 HTTP |  HTTPS | Node.js | MongoDB | Git | SQL |  NoSQL | Docker | React

其他 VSCode | Web App | Leetcode




Bootstrap 是什麼?

Bootstrap 是一個由 HTML、CSS 和 JavaScript 寫成的前端框架,核心的設計目標是達成RWD響應式與行動優先,也就是讓你的網站排版可以自動適應螢幕大小。它預先做好一套網站的基礎建設,讓你能在框架的基礎上進行開發,不需要再去煩惱瑣碎的設定。



什麼是 Ajax? 搞懂非同步請求 (Asynchronous request)概念

Ajax 是 Asynchronous JavaScript and XML 的縮寫
Asynchronous:非同步
JavaScript:使用的程式語言
XML:Client 與 Server 交換資料用的資料與方法,近年由於 JSON 等格式的流行,使用 Ajax 處理的資料並不限於 XML。

Ajax 並不是單一的技術,而是一套綜合性的瀏覽器端網頁開發技術,因 Google 在 2005 年推出 Gmail 服務時採用此技術大獲成功而知名。

非同步

當你在使用 DOM 事件時,其實你已經在運用非同步的概念,你不知道事件什麼時候會發生,但你可以先把要發生的函式準備好,等到事件發生時,就進行處理。
click event ----->> function
上述這種流程稱為「非同步」。由於 JavaScript 可以把函式當成值來傳遞,因此執行程序可以非同步的發生。

當我們在串接第三方 API 時,由於要等待遠端伺服器回應,等待的時候有可能會大幅影響到使用者的體驗,因此「非同步請求」變得更加重要。

同步請求 v.s. 非同步請求

同步請求 (Synchronous request): 
客戶端 (client) 對伺服器端 (server) 送出 request ,並且在收到伺服器端的 response 之後才會繼續下一步的動作,等待的期間無法處理其他事情。這個作法並不理想,因為通常伺服器端的運算速度比本地電腦慢上好幾倍。

非同步請求 (Asynchronous request):
客戶端 (client) 對伺服器端 (server) 送出 request 之後,不需要等待結果,仍可以持續處理其他事情,甚至繼續送出其他 request。Responese 傳回之後,就被融合進當下頁面或應用中。

Ajax 實現非同步請求 (Asynchronous Request)

在非同步請求 (Asynchronous request) 還沒被開發之前,如果我們要瀏覽一則留言,就必須向 Server 重新 request 一個完整的頁面。等待頁面切換的這段時間畫面往往會卡住不動,直到接收 response,才會重新渲染 (render) 畫面。
而 Ajax 技術的出現,讓瀏覽器可以向 Server 請求資料而不需費時等待。當瀏覽器接收到 response 之後,新的內容就會即時地添入原本網頁。這也是為什麼當我們瀏覽 Facebook、Twitter 內容時,不會看見整個網頁一直重新整理。

最早期的 Ajax 會利用一個 XMLHttpRequest 物件 (簡稱為 XHR ) 來實作,首先建立了一個 XMLHttpRequest 物件,並使用 .open() 開啟一個 URL,最後使用 .send() 發出 request。

由於 XHR 使用起來很麻煩,所以實務上很少直接使用原生的 XMLHttpRequest。取而代之的方法有很多種,過去較流行的是 jQuery 的 $.ajax(),然而在 JavaScript 日趨成熟之後,許多新的替代方案應運而生,例如 HTML5 提供了 Fetch API,而我們使用的 axios 是一個非常受歡迎的 JavaScript 函式庫,他有許多重要功能如:
  • 廣泛的瀏覽器支持
  • 可支援 Node.js 從後端發送的 Http request,這意味著 axios 可以兼用於前端與後端專案。
  • 直接將回應的 JSON 資料轉換成 JavaScript 的 Object,這十分方便!

使用 AJAX 提高使用者體驗

在一般的情境下,瀏覽器每次發出請求,都會接收到一個完整的 HTML 網頁,而伺服器回傳新網頁、瀏覽器重新演算網頁的過程,有一小段空白的等待時間。若使用者在網路不穩定的地方連線,或者傳遞的資料量龐大時,這一小段的空白時間就會嚴重影響到使用者體驗。
另外,從效率考量,有些請求/回應其實只更新了局部的畫面,不需要每次都重新載入一個全新的網頁。因此,為了提升使用者體驗、並提高網頁的效率,而有了 AJAX 技術。透過 AJAX 技術,client 可以向 server 發出非同步請求,索取局部內容的資料進行抽換,大幅度降低每次請求與回應的資料量,從而提高了瀏覽速度。
使用 AJAX 不僅可以讓使用者在不刷新畫面的情況下繼續操作,不會有在操作途中「中斷」與「等候」的時間,創造了更佳的使用者體驗。






認識JSON

資料格式是 Web API 的要素之一,API 的設計者可以自行決定資料回傳的格式,而這個格式稱之為 —— Response Format
HTTP 是 Server 及 Cilent 資料傳遞時所使用的溝通媒介,而 HTTP 使用 HTML 作為最初網路伺服器與電腦瀏覽器間傳遞資料的格式,但如今使用者可以在電腦、手機,甚至是穿戴式裝置上使用網路,不同的裝置也讓處理資料的方式更多元,所以 HTML 不再是唯一用來傳遞資料的格式。
在使用 Web API 交換資料時,目前最常見的回應格式有二:

XML:Extensible Markup Language

是一種標記式 (markup) 語言,使用 < > 定義標記,標記的頭尾之間夾帶著內容,可以想像成是 HTML 標籤語法的延伸。

JSON: JavaScript Object Notation 的縮寫

它參考了 JavaScript 中物件結構的表示方式。
與 XML 相較之下,JSON較為輕量、易於閱讀,幾乎所有網頁開發相關的語言都有解析 JSON 資料的函式庫,故本課程將使用 JSON 作為 Web API 資料交換的主要格式。
JSON 看起來很像 JavaScript 的 object,但其實是不同的資料格式,使用的時候需要經過解析,下文介紹 JSON 的使用方法。
JSON 的語法建立在 JavaScript 對於 ArrayObject 的表示方式,同樣地,JSON 的資料結構中通常也會運用 array 和 object 的嵌套關係,例如:

外層是 array,裡頭包含其他 object
外層是 object,裡頭還有其他 object
以上兩種模型可以被自由地混合使用。除了 Array 和 Object,JSON 還可以處理字串 (String)、數字、布林值 (Booleans) 以及空值 (null)。

你可以運用 JavaScript 來撰寫 JSON。例如:

{
 "name": "John",
 "age": 29,
 "employed": false,
 "car": null,
 "friends":
 [
   { "name":"Mary", "status":"close friends" },
   { "name":"Robert", "status":"close friends" },
   { "name":"Linda", "status":"acquaintance" }
 ]
}






現在的前端都在用 JavaScript「框架」?前端框架的功能與優點

目前的三大框架:ReactVueAngular;或著也可以到 GitHub 上搜尋 Awesome Javascript,其中的 Framework 數量也是琳瑯滿目;但到底為什麼好像全世界都在用「框架」呢?

沒有框架的日子

先回想一下在沒有框架的時候,開發者的日常會長什麼樣子吧。
那時最流行的「套件」非 jQuery 莫屬了,語法簡潔、直覺好用的元素選取器,語法便捷的事件監聽註冊,豐富的開發者生態系產出大量的開源套件,以及最重要的,弭平瀏覽器 XHR 差異的 ajax 函式,將複雜的瀏覽器差異藏在套件中,讓開發者只需要專注在想實作的邏輯即可。

透過好用的元素選取器及事件監聽,開發者們可以依據使用者的行為,靈活操作 DOM 元素的結構及樣式,jQuery 的這些特色直到 2019 的現在,都仍是很實用的功能,甚至 程式碼本身 也有許多值得開發者學習的地方;但隨著專案規模逐漸增大,程式複雜度不斷上升,直接操作 DOM 的缺點也就逐漸浮出檯面:
  • 難以維護
HTML、CSS、JavaScript 無法維持原先的各司其職,因為需要透過 JavaScript 處理互動內容,勢必要將結構、樣式寫到 JavaScript 的部份中,也就因此造成架構耦合度提高,程式碼管理困難。
  • 效能低落
在 Reflow 及 Repaint 是什麼? 中有提到 Render Tree 的概念,當 DOM 被改變,勢必要觸發整個 Reflow & Repaint 的流程,頻繁的改動觸發重複渲染,便會讓頁面效能被消耗殆盡。

框架的功能

既然有前述的問題,自然會有強者試圖解決它。現今的「框架」其實就是一種提升開發效率、降低維護難度的開發架構。主流的框架如 React、Vue 等,大都擁有這些特性:
  • 資料與 UI 分離
在原先,我們想要顯示一筆資料,可能必須寫死在 HTML 的結構中,若是動態的資料,可能要透過 JavaScript 將資料動態塞入 DOM 元素上。但在 Vue 中,相對來說會比較容易閱讀及維護吧?透過 Vue 的寫法,讓頁面結構的部份仍然由 HTML 決定,並由資料來決定畫面該如何呈現。由資料決定畫面 ,這就是現代框架至關重要的核心概念;將資料從介面中抽取出來,每個畫面都是對資料處理過後的呈現。
  • 模組化的 UI
一個網站總是會有一些重複出現的元素,例如按鈕、輸入表單、表格、對話框等等,像是 FaceBook 的按讚按鈕,可能一個頁面出現數十個都不為過;而在現代框架的概念中,我們會把這些重複出現的元素稱為 組件(Components),每個組件內包含了組件自己需要用的結構、樣式、邏輯。
例如前述的例子,我們可以將 .card 這個元素抽成單獨的組件,再從外部組件引入它,這樣一來,各組件只需要處理組件內的事,外部引用的組件來決定怎麼使用、提供什麼資料給組件,藉由簡單的切分權責,加上前述的由資料決定畫面,就能讓各個組件的任務單一,並且能被重複使用。甚至現在有許多完成度很高的前端 UI 組件庫,讓開發者有如玩樂高一樣,能快速地用組件堆出想要的畫面,大幅度降低了組織畫面所需要的時間,讓工程師能更專注在處理商業邏輯上。
  • 提升效能
如同前述,在複雜的頁面中,如果頻繁透過操作 DOM 的方式改變畫面,可能會造成全頁面的 Reflow 及 Repaint;不過在使用框架時,開發者不用太擔心這個問題。
原因是在各主流框架的實作中,幾乎都包含了 Virtual Dom 的概念,也就是用 JavaScript 物件來表達當前的頁面結構;藉由與 UI 分離的資料及 Virtual Dom 之間的關係,當資料變動時,事先計算好這次畫面需要變動的地方,如此一來便能抵銷掉無意義的更動,並重複利用已存在的 DOM 元素;當真的要進行 DOM 更新時,也會一次將所有需要更新的局部組件更新,讓效能的耗損盡可能降低。

結語

現代的瀏覽器已經逐漸符合標準規範,使得 jQuery 的重要性漸漸式微;框架的橫空出世,也無疑為前端工程帶來的巨大的轉變。從原先在乎檔案功能的關注點分離,變成組件權責單一的關注點分離;從單純的頁面呈現,到越來越複雜的頁面流轉資料串接
當前端開發者社群的能量越來越強大,也代表著網頁前端需要接手處理的事情越來繁雜;幸好得以透過框架強大的功能,大幅度的減輕開發者的負擔。當然,框架同時也代表著限制,唯有理解框架背後的核心思想,才能在限制中找到最適合的方向。





SQL/NoSQL是什麼?認識資料庫管理系統DBMS

SQL (Structured Query Language 結構化查詢語言) 是一種專門用來管理與查詢關聯式資料庫(Relational database)的程式語言。
NoSQL資料庫的意思是 "Not Only SQL",也就是不限定為「關聯式資料庫」的資料庫管理系統的統稱。
今天,大部分的人提到「資料庫」的時候,通常指的其實是資料庫管理系統(database management system,簡稱 DBMS):一套讓我們能方便使用資料庫的軟體,作為使用者(或是使用資料庫的應用程式)與資料庫之間溝通的平台。

關聯式資料庫(Relational Database Menagement System, RDBMS)有三個特質:

  • 資料是以一個或是多個資料表 (table) 的方式存放。
在關聯式資料庫裡,每一筆資料都是在 table 中的一個 record,然後再把不同的 table 集合起來,就成為一個關聯式資料庫。
Record --> Table --> Database

  • 資料之間有明確的關聯。
關聯式資料庫一般都用來儲存結構化的資料,而資料之間大多會有清楚的關聯。

  • 關聯式資料庫以 SQL 語言操作
SQL (Structured Query Language 結構化查詢語言) 是一種專門用來管理與查詢關聯式資料庫的程式語言。透過 SQL,我們能在關聯式資料庫裡新增、查詢、更新和刪除資料,同時也能建立和修改資料庫模式。

NoSQL 非關聯式資料庫

隨著電腦、行動裝置、與互聯網的普及,網路應用程式的流量大幅地增長,同時 互聯網也進入「使用者生產內容 (user generated content)」為主流的時代。對於 Youtube、Facebook 這些社交網站來說,每分每秒需要處理的資料量是過去一般網站的非常多倍。
而從使用者的角度來看,他們在這些平台上對於資料的需求也跟過去不太一樣。資料庫的主要功能,從過去的「能夠無錯誤地同步處理結構清楚的資料」,到現在慢慢有新需求誕生:「處理高速大量產生的資料,但不需要即時同步,也不需絕對地零錯誤。」為了呼應這個需求,NoSQL 資料庫就隨之興起了。


Not Only SQL (NoSQL)

NoSQL 的意思是 "Not Only SQL",也就是不限定為「關聯式資料庫」的資料庫管理系統的統稱,在操作上,NoSQL 並不支持 SQL 語法 與 SQL 的邏輯。所以,NoSQL 資料庫通常不使用關聯模型,也並不需要固定的結構 (也就是 schema-free)。但有需要時, NoSQL 也可以使用關聯模型與 schema。
NoSQL 將聚集後的資料,作為儲存的最小單位,透過縝密豐富的資料結構,有利於將資料分散到多個節點;比起資料的關聯,NoSQL 更關注資料所代表的人(例如使用者)與物(例如一篇分享在社交平台上的文章)的「狀態」變動,例如文章被分享、按讚等。


文件資料庫 (document database)

文件資料庫是NoSQL資料庫的一種,顧名思義,是把資料存放成「文件 (documents)」,這些文件會組成為「集合 (collection)」並放在一起,在文件資料庫 (database)裡,文件會存成 JSON 格式,而資料物件會由「屬性-值」 (attribute-vaule pair) 或陣列組成。圖示如下:。
Documents  -->  Collections  -->  Database