• Linux 一條龍架站 ft.常見指令

安裝 Linux through Ubuntu Server

下載Server版

destop版也可以,但容量差很~大

直接看網友文章~
VirtualBox 安裝 Ubuntu Server 設定與教學-使用 subiquity 安裝程式

系統更新

sudo apt-get update
sudo apt-get upgrade

安裝基本net-tool、openssh、git、MariaDB(mysql)、MongoDB

sudo apt install net-tools (=> ifconfig 可以查看ip)
sudo apt-get install openssh-client
sudo apt install git
sudo apt install mariadb(mysql)-server
sudo apt install mongodb

安裝Python

python3 --version
sudo apt install python3-pip

Python 套件
sudo pip list
sudo pip install pymysql
sudo pip install selenium
sudo pip install pandas……

設置root密碼

sudo passwd root

建立使用者

sudo adduser newusername
sudo passwd newusername
- PS /etc/default/useradd (可以看到創建使用者的規則)

切換到使用者,試試看能不能登入

su - newusername

刪除使用者

sudo passwd sudo userdel newusername

創群組,把使用者加入

sudo groupadd groupname
sudo usermod -aG groupname newusername (加到特定組別)
sudo usermod -aG sudo newusername (加到sudo組,就可以擁有sudo權限)
- PS cat /etc/group  (查看所有GROUP訊息)
- PS id <username> (查看特定用戶的身分訊息)

刪除群組

sudo groupdel groupname

直接給予使用者root權限

sudo visudo
%<username> ALL=(ALL) ALL

也可以創文件群組

沒特別設置時,文件的群組通常是文件創建者的主要群組,但可以更改文件的群組,來控製文件的訪問權限

chgrp newgroup myfile.txt
- PS chown newowner:newgroup filename (一起更改文件所有者和群組)

搭配grep

sudo grep emp1 /etc/group   (在 /etc/group 文件中搜尋包含 emp1 的行)
sudo groupadd -g 1100 devb  (創建一個名為 devb 的群組,同時指定群組ID(GID)為 1100)

設立時區、語言

sudo dpkg-reconfigure tzdata
sudo dpkg-reconfigure locales   ( zh_TW.UTF-8 UTF-8)

crontab 設置排程

crontab-e
sudo systemctl status cron (查看crontab狀態)
sudo systemctl restart cron (正常修改完crontab -e是不用重啟的。)
30 10 * * * echo "hello world" >> /home/catalina/hello_01.txt (每天的10:30)
0 */6 * * * echo "hello world" >> /home/catalina/hello_01.txt (每六小時)
30 22 * * *  python3 ~/ptt.py >> ~/cron_ptt.log 2>&1 (22:30運行Python腳本ptt.py,並輸出到cron_ptt.log)
ps aux | grep ptt.py (確認所有python運行狀態)
cat cron_ptt.log (查看log紀錄)

練習

mkdir scripts  (/home/cata下,創建一個資料夾,專門用來放shell script 檔案)
cd scripts     (/home/cata/scripts)
vi date_1.sh   (資料夾中創建一個.sh檔案,/home/cata/scripts/date_1.sh)

[進入後輸入資料,目的是獲取當前日期和時間,輸入到指定檔案]
#!/bin/bash
mdate=`date`
echo $mdate >> /home/cata/date_1.txt  (> 覆蓋 >> 附加)

crontab -e (設定排程、log檔)
0 20 * * * /bin/bash /home/cata/scripts/date_1.sh >> /home/cata/scripts/date_1.log 2>&1

直接看網友文章補充~
Ubuntu 排程設定 :Crontab 排程使用教學


Linux 常見指令

查看現在位置

pwd

到指定位置

cd 
cd ..(回到上一層)
cd - (回到前一步驟用的目錄)
cd ~ (回到home/)

複製資料

cp <來源> <目的>  (複製檔案)
cp-r <來源> <目的>  (複製資料夾)

刪除資料

rm <檔案>  (刪除檔案)
rm -r <檔案>  (刪除資料夾)
rm -rf <檔案>  (強制刪除檔案)

移動資料

mv <原路徑> <新路徑>  (移動檔案 剪下 貼上)
mv <原檔名> <新檔名>  (重新命名)

假設home/catalina/file_1 要移去 home/josh/
=> 現在在home/catalina => mv file_1 /home/josh/
=> 現在在home/josh => mv /home/catalina/file_1 .

查看資料夾,列出子目錄和文件

ls
ls -l   (簡稱ll,詳細列表(long listing))
ll -h or ls -h   (使用容易觀看單位,KB、MB 等單位,而不是字節數)
ll -lh or ls -lh  (詳細列表+容易觀看單位)
- PS ll AAA/BBB or ls AAA/BBB,例如: ls -lh /var/lib/mysql/test/
 (可以直接查看指定位置資料夾)

印資料夾檔案目錄到特定文件

ls /bin/ > bin1.txt

假設我在/home/catalina 操作ls /bin/ > bin1.txt,bin1.txt /home/catalina,而非 /bin

查看單一文件

cat <filename>
less <filename>  (分頁查看)
- PS history | less   (查看歷史指令)

打開單一文件

vi or vim <filename>

進到文件後
o 新增一行
yy 複製
30yy 複製30行
u 上一步
dd 刪除
p 貼上
G 跳到最後一行
esc + : + q! (跳出,不儲存)
esc + : + wq (跳出,儲存)

印進檔案

echo "hello linux!" > hello.txt

複製到新檔案

cat hello.txt > hello2.txt

創建資料夾

mkdir <filename>
- PS mkdir /home/catalina/AAA/BBB/CCC  (原本沒有的資料夾,會顯示錯誤)
- PS mkdir -p /home/catalina/AAA/BBB/CCC  (加了p,原本沒有的資料夾,會自動被建立)

刪除整個資料夾

sudo rm -rf /home/catalina/AAA/BBB/CCC

清空畫面

clear

導向到log

對的到right.log,錯的到wrong,log

ls hello.txt xxxx 1> right.log 2> wrong.log

純打包 package.tar

tar -cf package.tar bin*

tar -tf package.tar      (顯示內容)

壓縮打包 package.tar

tar -czf gzip_package.tar bin*     (使用gzip技術)
zip gzip_package.zip -r .  
tar -cjf bzip2_package.tar bin*    (使用bzip技術)
tar -cJf xz_package.tar bin*    (使用xz技術)

解壓縮

安裝套件

sudo apt-get install zip unzip

建立資料夾,解壓縮至資料夾

mkdir unzip_folder
unzip gzip_package.zip -d unzip_folder

練習

wget  {網址}                      (下載檔案)
unzip Daily_2023_09_24.zip -d ./        (解壓縮檔案)
less Daily_2023_09_24.csv           (查看檔案)
grep TX Daily_2023_09_24.csv | less      (搜尋關於TX)
grep ,TX Daily_2023_09_24.csv | less    (搜尋關於,TX)

chmod命令 => 更改文件和目錄的權限

所有人可讀,只允許文件擁有者寫入

chmod 644 [example.txt]

只允許文件擁有者讀

chmod 400 [example.txt]

只允許文件擁有者讀+寫入

chmod 600 [example.txt]

文件所有者(User)具有讀取和寫入權限(rw-)
所屬組(Group)沒有權限(—)
其他用戶(Others)沒有權限(—)

folder下所有文件,只允許文件擁有者讀+寫入

chmod -R 700 myfolder

只允許文件擁有者讀+寫入+執行

chmod 771 [script.sh]

文件所有者(User)具有讀取、寫入和執行權限(rwx)。
所屬組(Group)具有讀取、寫入和執行權限(rwx)。
其他用戶(Others)具有讀取和執行權限(r-x)

查詢登入紀錄

last -5   查詢登入紀錄 (最近五筆)
last -5 <username> 查詢登入紀錄 (特定使用者)
last -s -7dyas  查詢登入紀錄 (七天內)

查看用戶訊息

 w   (查看目前登入的用戶訊息)
 w <username>   (查看指定的登入紀錄、詳細訊息)
 sudo cat /etc/passwd (查看所有用戶的登入紀錄、詳細訊息)

移動檔案

mv my_file ../  (到上一層)

設置 mysql(MariaDB) 參考

前面安裝好了,直接啟動

sudo systemctl start mariadb

查看狀態: sudo systemctl status mariadb
開機時直接啟動: sudo systemctl enable mariadb

切換到MariaDB(mysql)

sudo mysql -uroot -p

更改root密碼

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

創建使用者、使用者密碼

CREATE USER 'username' IDENTIFIED BY 'password';

給予用戶權限

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';   (所有權限)
GRANT SELECT, INSERT ON mydb.* TO 'username'@'%';
select Host,User,authentication_string from mysql.user (查詢權限)

ALL PRIVILEGES:執行所有操作
SELECT:檢索數據。
INSERT:插入新數據
UPDATE:更新數據
DELETE:刪除數據
CREATE:創建新數據庫和表
DROP:刪除數據庫和表
ALTER:更改表結構
GRANT OPTION:將其擁有的權限授予其他用戶
SHOW DATABASES:查看可用的數據庫列表
SHOW TABLES:查看特定數據庫中的表列表
CREATE USER:創建新用戶
SUPER:root權限
REPLICATION CLIENT:複製客戶端狀態
REPLICATION SLAVE:複製伺服器
FILE:讀取和寫入系統文件
PROCESS:查看所有正在運行的進度
SHUTDOWN:關閉數據庫服務器
CREATE TEMPORARY TABLES:創建臨時表
LOCK TABLES:鎖定表,防止其他用戶對表進行更改
EXECUTE:執行存儲過程
REFERENCES:引用外鍵
CREATE ROUTINE:創建儲存過程和函數
ALTER ROUTINE:更改儲存過程和函數
EVENT:創建和管理事件
TRIGGER:創建觸發器

如果用AWS/GCP要外部連線

下載 putty gen ,輸入主機的外部IP產金鑰,再到AWS/GCP設定金鑰即可

直接看網友文章補充~
[教學] 使用 PuTTYgen 產生 SSH 連線 RSA、DSA 公鑰與私鑰


設置 MongoDB 參考

前面安裝好了,直接啟動

sudo systemctl start mongodb

查看狀態: sudo systemctl status mongodb
開機時直接啟動: sudo systemctl enable mongodb

切換到MongoDB

mongo --username your_username --password your_password --authenticationDatabase admin

創建使用者、使用者密碼

mongo
use admin

db.createUser(
  {
    user: "root",
    pwd: "your_root_password",
    roles: [ { role: "root", db: "admin" } ]
  }
)

給予用戶權限

db.grantRolesToUser("catalina", [
  { role: "read", db: "mydb" },
  { role: "readWrite", db: "mydb" }
])

read: 讀取操作(find)。
readWrite: 讀取+寫入操作(find、insert、update、remove)
dbAdmin: 在指定數據庫上執行管理操作,如索引、查看統計信息等
dbOwner: 在指定數據庫上執行任何操作,類似於root權限
userAdmin: 可以管理數據庫中的用戶,如創建和刪除用戶、更改用戶密碼
clusterAdmin: 執行集群級別的操作,如復制集和分片集群的管理
backup: 備份數據庫
restore: 執行恢復數據庫
changeStream: 使用 changeStreams 監控數據庫的變化
readAnyDatabase: 在任何數據庫上執行讀取操作
readWriteAnyDatabase: 在任何數據庫上執行讀取和寫入操作
userAdminAnyDatabase: 在任何數據庫上管理用戶
dbAdminAnyDatabase: 在任何數據庫上執行管理操作
clusterManager: 具有集群管理權限
restoreAnyDatabase: 恢復任何數據庫

比較
use admin

// 創建用戶並為其分配 restore 角色(僅限於 mydb 資料庫)
db.createUser({
  user: "backupuser",
  pwd: "backupuser_password",
  roles: [
    { role: "restore", db: "mydb" }
  ]
})
-------------------------------------------------------------
use admin

// 創建用戶並為其分配 restoreAnyDatabase 角色(允許在任何資料庫上執行恢復操作)
db.createUser({
  user: "adminuser",
  pwd: "adminuser_password",
  roles: [
    { role: "restoreAnyDatabase", db: "admin" }
  ]
})

更改密碼

db.changeUserPassword("root", "new_password")
db.auth("root", "new_password") (確認是否更改成功)

設置 Apache2、PHP、NOIP

Apache2: 配置Web 服務器

安裝、啟動

sudo apt update
sudo apt install apache2
sudo service apache2 start

PHP 安裝、啟動

sudo apt install php

Apache 讀 css/js/php 檔要改文件

/etc/apache2/httpd.conf
or
/etc/apache2/apache2.conf

改好後重啟

sudo systemctl restart apache2

NOIP:設置個人化網址 參考

安裝、啟動
註冊NOIP

安裝客戶端

apt install make
apt install make gcc

建立NOIP資料夾

cd ~
mkdir noip
cd noip

下載、解壓縮、安裝客戶端

wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz 
tar vzxf noip-duc-linux.tar.gz
cd noip-2.1.9-1
sudo make
sudo make install

會遇到詢問

Do you wish to run something at successful update? 回答 [N] (y/N)
如果成功,會設置新的no-ip2.conf ,查看 sudo vim /usr/local/etc/no-ip2.conf 文件

啟動NOIP

sudo /usr/local/bin/noip2
sudo /usr/local/bin/noip2 -S  (查看啟動後狀態)

設置開機自動啟動NOIP

sudo crontab -e
最後一行加:@reboot /usr/local/bin/noip2 (如果是本機機台,每次開機都要執行一次sudo /usr/local/bin/noip2,因此設開機自動執行)

關閉NOIP

sudo killall noip2

確認是否綁定IP成功

ping -no-ip hostnanme

設置動態DNS設定檔

sudo apt install ddclient
sudo vi /etc/ddclient.conf
(進設定檔後,protocol=dyndns2
use=web, web=checkip.dyndns.com, web-skip='[NOIP設置的網址,0000.ddns.net]'
server=members.dyndns.org
login=group_3
password='[NOIP設置的密碼]')

啟動DNS

sudo systemctl start ddclient

如果換NOIP網址,要重新配置 NO-IP、改DNS設定檔

sudo /usr/local/bin/noip2 -C
sudo systemctl start ddclient

放置 Web code 到指定位置

以上都完成後,html/css/js 或 php 檔案放到指定位置就能成功配置了

/var/www/html/index.html

設置 NFS、SAMBA

NFS: 讓遠端機台使用者們可以共享特定資料夾 參考1 參考2

加載、安裝NFS

sudo modprobe nfs 
sudo modprobe nfsd
sudo apt install nfs-kernel-server 
sudo apt-get install rpcbind

啟動NFS

sudo systemctl start rpcbind

查看狀態

sudo systemctl status rpcbind

查看監聽極端口

sudo netstat -tulnp | grep rpc.mountd
sudo netstat -tuln | grep :2049

設置防火牆

sudo ufw allow from [your ip] to any port nfs

設置共享資料夾及權限

/home/share/ 
140.137.219.56(rw,sync,no_subtree_check,crossmnt,fsid) 140.137.219.0/24(ro,sync,no_subtree_check)  (ro 只讀,rw 讀寫權限)
sudo exportfs -r

掛載在指定的資料夾

sudo mount -t nfs ip:<分享位置> <掛載位置>
sudo mount -t nfs [your ip]:/home/NFS/ /home/catalina/nfs_share/

掛載成功後,可以直接使用putty連線

cd /home/catalina/nfs_share

SAMBA: 用於在不同操作系統之間(Linux/Unix系統與Windows系統)文件共享 參考

安裝SAMBA

sudo apt-get install samba

更改設定檔

sudo gedit /etc/samba/smb.conf
第一個 [global],加上
workgroup =WORKGROUP
也可以加上,可以使用Symbolic Links及禁用Unix文件
wide links = yes
follow symlinks = yes
unix extensions = no


第二個 [設置要分享資料夾的名稱]
comment = Share
path = /home/share
read only = no
writable = yes
browseable= yes
create mask = 777
directory mask = 777
valid users = username

重啟

sudo /etc/init.d/smbd restart

查看虛擬機IP

ifconfig

本機端電腦

安裝smbclient連線

sudo apt install smbclient

設帳號密碼

sudo smbpasswd -a <username>

使用smbclient,連接到Samba共享

smbclient //[your ip]/share -U  <user>

掛載Samba,共享到本地目錄

smbclient//<ip>/<share fold> -U <user>  [SAMBA] : 密碼,英文名

掛載位置

sudo mount -t cifs //140.137.219.94/share /home/ivy/share -o username=ivy,password=ivy

設置防火牆,不影響samba執行

sudo ufw allow Samba 
sudo ufw status
sudo ufw disable
sudo ufw status

重啟

sudo /etc/init.d/smbd restart

查看狀態

systemctl status smbd  (/home)

查看設定檔

sudo testparm  (/home/share)

Catalina
Catalina

Hi, I’m Catalina!
原本在西語市場做開發業務,2023 年正式轉職資料領域。
目前努力補齊計算機組織、微積分、線性代數與機率論,忙碌中做點筆記提醒自己 🤲

文章: 43

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *