目前分類:Learing (37)

瀏覽方式: 標題列表 簡短摘要

研究好一陣子的flutter,頁面陸續完成中!!

flutter初體驗,頁面陸續完成中。 

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

 

flutter初體驗,頁面陸續完成中。

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

 

flutter初體驗,頁面陸續完成中。

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

 

 flutter初體驗,頁面陸續完成中。

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

 

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

呼叫範例 HtmlTableToJson("targetTable")

回傳結果範例

[{"LABEL2":"C4","LABEL3":"T1","PARAMETER_TYPE":"1"
 ,"VALUE1":"1000.00","SUBTOTAL":"","REMARK":"OK","ATTACHMENT":""},    
 
 {"LABEL2":"C4","LABEL3":"T1","PARAMETER_TYPE":"1"
 ,"VALUE1":"2000.00","SUBTOTAL":"","REMARK":"OK","ATTACHMENT":""}]

 

Javascript Function 實作如下(考量table有merge cell的議題的寫法)

=====================================================================

function HtmlTableToJson(tableid){
            var jsondata = [];
            var heads = [];
            $("#"+tableid+' thead th').each(function(index,item){
                heads.push($(item).attr("name"));
            });
            var tmpRowdata = {}; //考量table有merge cell的議題的寫法,所以需要這個變數
            $("#"+tableid+' tbody tr').each(function(index, item){
                var rowdata = {};
                $(item).find('td').each(function(index,item2){
                    for (let i = 0; i < heads.length; i++) {
                        if (item2.innerHTML.indexOf(heads[i]) >= 0) { 
                            if ($(item2).find('[jsonval]').length > 0) {
                                tmpVALUE1 = $(item2).find('[jsonval]').val(); //input欄位的取值方式
                            } else {
                                tmpVALUE1 = item2.innerText; //其餘欄位取值方式
                            }
                            if ($(item2).find('[number]').length > 0) {
                                tmpVALUE1 = tmpVALUE1.replace(/,/g, ""); //遇到數值欄位自動將千分號去掉,例如1,000 -> 1000
                            } 
                            tmpRowdata[heads[i]] = tmpVALUE1; //將資料塞入object(若遇到merge cell,會自動取得同群組的merge cell值)
                            rowdata = JSON.parse(JSON.stringify(tmpRowdata)); //以deep copy的方式取得資料
                        }
                    }
                });
                if (Object.keys(rowdata).length > 0) {
                    jsondata.push(rowdata); //將資料集合至同一個array
                }
            });
            return jsondata;
        };

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

 

 

Table格式如下

=====================================================================

<table width="100%" id="targetTable" style="border-collapse: separate;">
    <thead>
        <tr style="background-color:white;top:150px;position:sticky;border-bottom: 1px solid;">
            <th name="LABEL2" style="text-align: center;border: 1px solid">Stage</th>
            <th name="LABEL3" style="text-align: center;border: 1px solid">子項</th>
            <th name="PARAMETER_TYPE" style="text-align: center;border: 1px solid">參數類別</th>
            <th name="VALUE1" style="text-align: center;border: 1px solid">單價</th>
            <th name="SUBTOTAL" style="text-align: center;border: 1px solid">Sub-Total</th>
            <th name="REMARK" style="text-align: center;border: 1px solid">Remark</th>
            <th name="ATTACHMENT" style="text-align: center;border: 1px solid">附件</th>
        </tr>
    </thead>
    <tbody>

        <tr>
        </tr>
    </tbody>
</table>

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

 

 

Table的部分列資料由以下生成

=====================================================================

function drawTable(jsonObj) { 
            var table = document.getElementById("targetTable");
            for (var i = 0; i < jsonObj.length; i++) {
                var tmpObj = jsonObj[i];
                var row = table.insertRow(-1);
                var cell = row.insertCell();
                tmpStr = (tmpObj.LABEL2 == null ? '' : tmpObj.LABEL2);
                cell.style.borderBottom = "1px solid";
                tmpStr = '<div name="LABEL2">' + tmpStr + '</div>';
                cell.innerHTML = tmpStr;

                cell = row.insertCell();
                cell.style.borderBottom = "1px solid";
                tmpStr = (tmpObj.LABEL3 == null ? '' : tmpObj.LABEL3);
                cell.innerHTML = '<div style="text-align:center;" name="LABEL3">' + tmpStr + '</div>';

                cell = row.insertCell();
                cell.style.borderBottom = "1px solid";
                cell.innerHTML = '<div style="text-align:center;" name="PARAMETER_TYPE">' + (tmpObj.PARAMETER_TYPE == null ? '' : tmpObj.PARAMETER_TYPE) + '</div>';
                cell = row.insertCell();
                cell.style.borderBottom = "1px solid";
                cell.innerHTML = '<input name="VALUE1" number="" jsonval="" type="text" style="text-align:right;width:100%;" value="' + toFormatNum(tmpObj.VALUE1 == null ? '' : tmpObj.VALUE1) + '">';
         
                cell = row.insertCell(); //Sub - Total 
                cell.style.borderBottom = "1px solid";
                cell.innerHTML = '<div name="SUBTOTAL" style="text-align:right;">' + toFormatNum(tmpObj.SUBTOTAL == null ? '' : tmpObj.VALUE1) + '</div>';

                cell = row.insertCell(); //Remark
                cell.style.borderBottom = "1px solid";
                cell.innerHTML = '<input name="REMARK" jsonval="" type="text" style="text-align:right;width:100%" value="' + (tmpObj.REMARK == null ? '' : tmpObj.REMARK) + '">';

                cell = row.insertCell(); //附件
                cell.style.borderBottom = "1px solid";
                cell.innerHTML = '<input name="ATTACHMENT" type="button" value="上傳附件">';
            }
        }

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

  • 高級語言:可讀性高,容易撰寫,ex. Object-Oriented Language當中的Java。
  • 編譯原理的五個步驟
  1. 詞法分析
    • 基本字 ex. begin for
    • 標識符 ex. 變數名稱
    • 常數
    • 運算符 ex.+ - *
    • 界符 ex. , ; {}
  2. 語法分析
  3. 中間代碼生成
  4. 優化
  5. 目標代碼產生
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

重新閱讀ASP.Net MVC相關資訊後,溫故知新~

參考影片來源:https://www.bilibili.com/video/BV1ri4y1c7em/?p=17&spm_id_from=pageDriver

  • 好用的工具1:ILSpy 可以將dll還原為原始的code。
  • 好用的工具2:ViewState decoder 可以將WebForm的ViewState屬性內的值由 "一串英數夾雜的文字" 轉為 "使用者可以看得懂的文字"。

 

  • http  get method:參數會顯示在URL。
  • http post method:參數不會顯示在URL。

 

  •  cookie機制:無法儲存過多的信息,亦無法跨不同的瀏覽器,其生命週期即瀏覽器的生命週期,當瀏覽器重啟,cookie就自動刪除了,但可以透過設定Expires屬性變更其生命週期。
  • session機制:cookie是將資料儲存在客戶端,session是將資料儲存在服務器端,且session有自動銷毀機制,一段時間內瀏覽器與服務器沒有任何的交互,session會定時銷毀,ex. 登錄功能。

 

  • html頁籤的id屬性for DOM操作使用,name屬性for 傳送資訊到後端使用。

 

  • AJAX:是一種進行頁面局部非同步刷新的技術。利用javascript進行封裝,減少繁瑣的程式碼。

 

  • Bootstrap5網頁排版(切版):
    • 不再依賴JQuery
    • 不支援IE瀏覽器

 

  • ashx:是一種由Microsoft開發的ASP.NET Web Handler File。
  • aspx(vs. ashx):aspx是一個特殊的ashx,屬於page類,實現了IHttpHandler接口,目的是生成HTML。
    • 可透過<% C# code %>符號在aspx網頁寫入C# code 或call C# 的function取得function執行結果。
    • aspx使用ViewState屬性將http模擬成有狀態的形式。但ViewState屬性會造成網頁資源佔用,拖慢網頁速度,故能不使用就盡量不使用(可將EnableViewState設置為"false",可於全頁面禁用或針對控件禁用)。
  • WebForm 開發模式:Code Behind 開發模式(Tag 與 Code分離,但Code與Tag的耦合度仍高) vs. Code Inline 開發模式(Tag 與 Code會在同一個檔案)。
  • cshtml:使用Razor模板搭配C#語法。
  • MVC Controller:控制器的三個原則:非靜態類,實現IController接口,必須以Controller結尾命名。
  • MVC使用補充說明:
    •  "<%= %>" vs. "<%: %>":"<%: %>"會在遇到特殊字元時,將特殊字元轉為代碼,可保頁面安全性,惟若寫成 "<%: Html.Raw() %>" 或 "<%: new HtmlString() %>" 或 "<%: new MvcHtmlString() %>",效果將與前者無異;"<%= %>"會輸出原始文字,若為script,會有相應的效果,網頁可能有安全性的疑慮。

 

  • IsPostBack使用時機。
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

Linux下安裝軟件:

  • 源碼包形式:(解包方式 tar -zxvf *.tar.gz 或 tar -jxvf *.tar.bz2)
    • config/configure/bootstrap(配置)-> make/bootstrapd(編譯)-> make install/bootstrapd install(安裝)
    • 指定安裝的路徑 --prefix=路徑
    • 需要依賴的路徑 --with-PACKAGE名=包所在的路徑
    • 不需要依賴 --without-PACKAGE名
      • ex. ./configure --prefix=/usr/local/ncurses(配置)
      •     make(編譯)
      •     make install(安裝)
  • 二進制包形式(rpm形式)
    • rpm -qa|grep 關鍵詞
    • rpm -e 關鍵詞 --nodeps
    • rpm -ivh 完整名稱
    • rpm -Uvh 完整名稱
    • rpm -qf 文件路徑(查詢指定文件屬於哪個包)
  • yum傻瓜式安裝
    • yum list(列出當前已經裝的和可以裝的軟件)
    • yum search 包名(搜索指定的關鍵詞的包)
    • yum [-y] install 包名(-y表示安裝過程中不需確認,若沒有,會有需要確認的動作)
    • yum [-y] update 包名(此處若沒有指定包名,會更新所有的包)
    • yum [-y] remove 包名
    • 若mysql透過yum安裝,數據庫儲存目錄為/var/lib/mysql,配置文件目錄為/etc/my.cnf

 

補充縮寫全名:
LAMP:  Linux + Apache + MySQL + PHP
LNMP:  Linux + Ngine  + MySQL + php-fpm
LNMPA: Linux + Nginx  + MySQL + PHP + Apache

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

Linux網路基礎:

  • LAN(Local Area Network)
  • MAN(Metropolitan Area Network)
  • WAN(Wide Area Network)
  • IP(Internet Protocol):
    • 留用的內部私有地址(私有地址屬於非註冊地址)
    •     A:10.0.0.0--10.255.255.255
    •     B:172.16.0.0--172.31.255.255
    •     C:192.168.0.0--192.168.255.255
  • 網卡(硬體,負責數據的封裝和解封),MAC地址為網卡的物理地址或稱之為設備編號,默認是全球唯一的,為16進制。
    • ipconfig可列出相關資訊
    • OSI參考模型,ip地址是基於第三層(網路層),MAC地址是基於第二層(數據連接層)

 

網路相關命令:

  • "ping 主機地址(ip地址或主機名或域名)": 檢測當前主機與目標主機之間是否可連通(有些服務器禁ping,此命令就無效果)
  • "netstat -tanlp": 查看網路的連接訊息,-t表示tcp協議,-n表示將字母轉化成數字,-l表示列出狀態為監聽,-p表示process相關訊息,-a表示all
  • "traceroute 主機地址": 找出當前主機與目標主機之間的所有路由器(會給沿途各個路由器發送icmp數據包,路由器可能不會響應),該命令不是內置命令,需要安裝,類似於Windows下"tracert 主機地址"
  • "arp":(Address Resolution Protocol)根據ip地址獲取MAC物理地址的協議
  • "arp -a":查詢本地緩存的MAC地址
  • "arp -d 主機地址":刪除指定的緩存紀錄
  • "tcpdump": 抓取數據包
  • "tcpdump port 數字" 或 "tcpdump host ip地址" 或 "tcpdump -1 網卡設備名稱"

 

shell基礎: Linux默認的shell是/bin/bash

  • shell編寫規範:
    • #!/bin/bash: 指定shell解釋器的路徑,此亦為默認路徑
    • shell相關指令
  • 文件命名規範:
    • 文件名.sh
  • 使用流程:
    • 1.touch/vim  創建.sh文件
    • 2.編寫shell代碼
    •     #!/bin/bash
    •     echo 'hello world!'
    • 3.執行shell腳本  "./文件名.sh"或 "/bin/bash 腳本的路徑"
    • 備註79-85(待完成)
       
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

rpm管理: 類似於Windows上的電腦管家中的軟件管理,主要是對Linux服務器上的軟件包進行管理操作,包含查詢/卸載/安裝。

  • 查詢某個軟件的安裝情況 rpm -qa|grep 關鍵詞,-q表示查詢,-a表示全部
  • 卸載某個軟件 rpm -e 軟件的名稱(當存在依賴關係又不想解決這個問題 rpm -e 軟件的名稱 --nodeps)
    • lsblk查看設備的訊息,Name為名稱,Size為設備大小,Type為類,mountpoint為掛載點。
    • 解掛載: umount 當前設備的掛載點(路徑)
    • 掛載: mount 設備的原始地址 要掛載的位置(路徑),設備的原始地址"/dev/設備名稱",要掛載的位置"/mnt/指定的資料夾"
  • 安裝某個軟件 rpm -ivh 軟件的完整名稱,-i install,-v顯示進度,-h表示以"#"形式顯示進度

 

cron/crontab計畫任務: 

  • crontab 選項,選項-l表示列出計畫任務列表,-e表示編輯,-u表示指定的用戶名(未指定則用當前用戶),-r表示刪除計畫任務列表
  • 編輯計畫任務的規則語法格式,以行為單位,一行為一個計畫: "分 時 日 月 周 需要執行的命令",ex. 0 0 * * * reboot表示每天的0點0分執行reboot指令,
    • 分的範圍0~59,時的範圍0~23,日1~31,月1~12,周0~7(0&7表示星期日)
    • *則表示取值範圍中的每一個數字
    • -則用做區間表達式
    • /則表示每多少個,例如每10分鐘一次,在分的位置寫*/10
    • ,表示多個取值,例如1點及6點均要執行,在時的位置寫1,6
  • 配置文件位於/etc/cron.deny(管理員可透過此文件拒絕特定用戶設定計畫任務),在裡面每一行寫一個用戶名
    • 配置文件位於/etc/cron.allow(此文件本身不存在,須自己創建,透過此文件允許特定用戶設定計畫任務),在裡面每一行寫一個用戶名
    • 補充: 白名單優先級高於黑名單,同時存在兩個名單中,會默認允許。

 

Linux權限管理: 分為3種身份owner/group/others及3種權限read/write/execute

  • 權限設置 chmod 選項 權限模式 檔案或資料夾,選項-R表示遞迴設置權限(for資料夾使用)
  • 字母形式選項: u表示user,g表示同組用戶,o表示其他用戶,a表示所有人,若未指定會默認給所有人;+表示增加權限,-表示刪除權限,=表示將權限設置成具體的值
    • ex. chmod u+x,g+rx,o+r 文件名稱(表示所有者擁有全部權限,同組用戶有讀和執行權限,其他用戶只有讀取)
    • ex. chmod u=rwx,g=rx,o=r 文件名稱
  • 數字形式選項: r=4, w=2, x=1,排列組合去產生,0表示沒有任何權限,1表示可執行,2表示可寫,3表示可寫可執行,4表示可讀,5表示可讀可執行,6表示可讀可寫,7表示可讀可寫可執行。
    • ex. 上述範例可更改為 chmod 754 文件名稱

 

屬主(所屬的用戶)與屬組(所屬的用戶組)設置:

  • chown -R username 檔案(更改檔案所屬用戶,若為資料夾且需要遞迴才需要加上-R)
  • chgrp -R groupname 檔案(更改檔案的所屬用戶組,若為資料夾且需要遞迴才需要加上-R)
  • chown -R username:groupname 檔案 (可同時更改所屬用戶與所屬用戶組)

 

延伸議題:

  • reboot/shutdown/init/halt/user管理,在一般用戶身份操作不了,但有些特殊情況又需要有執行權限,又不能提供root用戶的密碼,可使用sudo(switch user do)命令來進行權限設置,sudo可以讓root事先定義某些特殊命令誰可以執行。
    • 默認sudo中是沒有除root之外用戶的規則,需要先配置sudo,sudo配置文件路徑為 /etc/sudoers
    • 配置sudo文件需使用"visudo"指令,無法使用vim指令
      • 1
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

設置主機名(hostname或hostname -f)

  • hostname 暫時的名稱 <-切換用戶後才會看到效果(只是暫時改名,重啟後會還原)
  • 永久設置主機名(需要重啟): 
    • cat /etc/sysconfig/network,將內部的HOSTNAME改掉
    • 然後修改hosts文件,將新的HOSTNAME指向本地(設置FQDN),才能被訪問,檔案位置在/etc/hosts

 

chkconfig服務配置: 類似Windows下的電腦管家之類的安全輔助工具,提供開機啟動項的一個管理服務
若非開機就啟動的服務,需要透過此去添加或者透過此刪除開機啟動項的項目

  • chkconfig --list 查詢,其中0-6表示各個啟動級別
  • chkconfig --del 服務名
  • chkconfig --list|grep httpd 過濾後只查詢指定的資料
  • chkconfig --add 服務名(但並非安裝的所有軟件都有服務名)
  • 設置服務在某個級別下開機啟動/不啟動: chkconfig --level 連在一起的啟動級別 服務名 on/off (ex. 35,會在3,5級別添加)

 

ntp服務: 用於對電腦的時間同步管理操作

  • (一次性)ntpdate 時間服務器的域名或ip地址(ip地址查看: http://www.ntp.org.cn/pool.php)
  • service ntpd start: 設置時間同步服務(或者 /etc/init.d/ntpd start)

 

防火牆服務(軟體防火牆): 

  • CentOS 6.5內服務稱之為 iptables;CentOS 7.x內服務稱之為 firewalld
  • 查看是否開機啟動 ps -ef|grep firewalld 或 chkconfig --list|grep firewalld
  • 服務啟動/重啟/關閉 service firewalld start/restart/stop或/etc/init.d/firewalld start/restart/stop
  • service firewalld status: 查看狀態
  • iptables -A INPUT -p tcp --dport 80 -j ACCEPT (允許訪問80 port)
    • -A添加規則,INPUT進站請求,-p protocol協議,--dport端口號,-j行為結果(Accept/Reject)
    • /etc/init.d/iptables save(將防火牆規則保存到配置文件)
       
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

網路設置: 網卡配置文件位置 /etc/sysconfig/network-scripts/ 下有(ifcfg-網卡名稱)ifcfg-ens33 & ifcfg-lo

  • ONBOOT: 是否開機啟動
  • BOOTPROTO: ip地址分配方式,DHCP表示動態主機分配協議
  • HWADDR: 硬體地址,MAC地址
  • 若需要重啟網卡 "service network restart" 或 利用/etc/init.d目錄描述的快捷方式 "/etc/init.d/network restart"
  • 若需要修改網卡的配置文件,但目錄不容易記住,可以利用創建捷徑的方式,方便以後查找 
    • "ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ifcfg-ens33" <- ln -s 原始路徑 快捷方式路徑
    • 透過 ls -l 可查詢上述快捷的特性,第一碼為l(link),且列出原始路徑
  • 如何重啟或停止單個網卡? "ifdown ifcfg-ens33" 停止網卡ens33;"ifup ifcfg-ens33" 開啟網卡ens33

 

ssh服務(secure shell協議):有兩個常用的作用,一是遠程連接協議,二是遠程文件傳輸協議。

  • 協議使用port: 默認是22(防火牆默認也是22),若需要修改,需修改ssh的配置文件 /etc/ssh/ssh_config,port範圍 0~65535,但不能使用別的服務已經佔用的port
  • 服務啟動/停止/重啟: "service sshd start/stop/restart" (ps -ef|grep ssh指令可查詢確認) 或 "/etc/init.d/sshd start/stop/restart"
  • 遠程終端: 終端工具可幫助維運人員連接遠程的服務器,例如xshell、secureCRT、Putty。
    • 先用ifconfig查詢虛擬機對應的ip位址,再透過Putty連線。
  • >文件傳輸(目前透過FileZilla): 有支持直接拖曳,或pscp.exe(直接丟至Windows資料夾下使用較方便)
        pscp [options] [user@]host:source target(下載到Windows)
        pscp [options] source [user@]host:target(上傳到Linux)
        pscp [options] -ls [user@]:host:filespec(列出遠程路徑下結構)
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

用戶管理:(管理員才有權限,用戶僅可以修改自己的密碼)

  • /etc/passwd: 儲存用戶的關鍵訊息,例如主組訊息
  • /etc/group: 儲存用戶群組的關鍵訊息,例如附加組訊息
  • /etc/shadow: 儲存用戶的密碼訊息
  • 添加用戶 "useradd 選項 用戶名稱",選項-g表示指定用戶的用戶主組;選項-G表示指定用戶的用戶附加組;選項-u表示用戶的uid,系統默認從500之後按順序分配uid,但仍可以通過該選項自定義。
    • ex. useradd mina,於/etc/passwd檢視是否有該用戶的訊息,或檢視是否存在該用戶的root目錄
    • ex. useradd -g 501 -G 500 -u 888 lisa 
    • 補充: /etc/passwd的格式: 用戶名:密碼佔位:用戶ID:用戶組ID:注釋:根目錄:解釋器shell,解釋器shell指的是等待用戶進入系統之後,用戶輸入指令之後,該解釋器會蒐集用戶輸入的指令,傳遞給內核處理。
      • ex. mina:x:1000:1000:mina:/home/mina:/bin/bash
  • 修改用戶 "usermod 選項 用戶名稱",選項-g & -G & -u與添加用戶用法相同,選項-l表示修改用戶名,"usermod -1 新名字 舊名字"
  • 設置密碼 "passwd 用戶名",Linux不允許沒有密碼的用戶登錄到系統
    • 補充: 切換用戶 "su 用戶名",若沒有指定用戶名,會切換到root
  • 刪除用戶 "userdel 選項 用戶名",選項-r表示刪除用戶的同時,刪除其根目錄;
    • 補充: 已經登錄的用戶,刪除會失敗,此時kill 該用戶的全部process id(ex. kill 3151),再進行刪除即可。


用戶組管理: /etc/group,文件結構為 "用戶組名:用戶組密碼:用戶組id:組內用戶名"

  • 用戶組添加: "groupadd 選項 用戶組名",選項-g類似用戶添加裡的"-u",可以自己設置一個自定義的用戶組ID
  • 用戶組編輯: "groupmod 選項 用戶組名",選項-g同上用法,"-n"類似用戶修改裡的"-l",可以設置新的用戶組名稱
  • 用戶組刪除: "groupdel 選項 用戶組名",注意,若刪除一個組,但該組是某個用戶的主組,則不允許刪除,需先將用戶移出,才能順利刪除。
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

實用功能:

  • vim代碼著色: 顯示 ":syntax on" 為默認狀態,關閉顯示 ":syntax off"。
  • vim中計算機的使用: 進入vim編輯模式,按下ctrl+R,然後輸入"=",游標會跳至最後一行,此時輸入計算內容後,結果會自動顯示在檔案內。

 

vim配置(重點)

  • vim配置文件有三種
    • a.檔案打開時末行模式下輸入的配置(暫時性的)
    • b.個人配置文件(~/.vimrc,需自行興建)
    • c.全局配置文件(vim自帶,/etc/vimrc)

 

其他

  • 別名機制: 創建屬於自己定義的命令,創建完成後帳號需要重新登入才能生效。(在vim ~/.bashrc映射檔內定義)
  • 退出方式: 在vim中退出編輯的檔案,":q" 或 ":wq"均可使用,":x"則是整合前述兩個指令,若檔案沒有異動,表示退出檔案,若檔案有異動,表示存檔並退出,同時達到兩個指令的效果。":x"優點是可避免未修改檔案,但檔案修改時間卻被更新的情況。


Linux自有服務: 用戶不需要獨立去安裝,系統安裝好後便有的服務

  • 運行模式/運行級別
    • init(initialize process),process id = 1,用ps -ef|grep init可查詢,要執行init process必須具備管理員權限
    • init 的配置文件為 inittab(系統運行級別runlevels的配置文件,/etc/inittab)
    •     0 - 表示關機級別(常見於快速鍵命令)
    •     1 - 表示單用戶模式
    •     2 - 表示多用戶模式,不帶NFS(Network File System)/不帶網路
    •     3 - 表示多用戶模式(純命令行模式,不帶桌面))
    •     4 - 沒有被使用的模式(保留模式)
    •     5 - X11,完整的圖形化界面模式
    •     6 - 表示重啟級別(常見於快速鍵命令)
    • "init 0" 表示關機;"init 3" 表示切換到不帶桌面的多用戶模式;"init 5" 表示切換到圖形界面;"init 6" 表示重啟電腦,換言之,調用init 的process,將數字傳遞給init process,process 再去讀取配置文件執行相應的操作。
  • 補充: 安裝圖形化介面 https://tw511.com/a/01/16763.html
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

vim介紹

  • vi類似於windows下的notepad,vim可視為vi的升級版本
    • 命令模式: 不能對檔案直接編輯,可以輸入快捷鍵進行操作(刪除行,複製行,移動游標,黏貼等等),此為打開檔案後默認的模式
    • 編輯模式: 可以對檔案的內容直接編輯
    • 末行模式: 可以在末行輸入命令來對檔案進行操作(搜尋/替換/保存/退出等等)
  • 打開檔案的方式:
    • vim 檔案: 打開指定的檔案
    • vim +數字 檔案: 打開指定的檔案,並且將游標移動到指定行
    • vim +/關鍵字 檔案: 打開指定的檔案,並且顯示關鍵字
    • vim 檔案1 檔案2 檔案3: 同時打開多個檔案
    • 補充: 以 ":files" 查看當前已經打開的檔案,%a表示當前正打開的檔案,#表示上一個打開的檔案,切換檔案則使用 ":open 檔案" 或 ":bn" 切換到下一個檔案 或 ":bp" 切換到上一個檔案
  • 命令模式:
    • 游標移動: shift + 6 或 shift + ^ 或 shift + 4 或 shift + $ 或 gg (good game) 或 G 或 crtl + b 或 Pg Up 或 ctrl + f 或Pg Dn
    • 複製游標所在行: yy 
    • 貼上: p 
    • 以游標所在行為準,向下複製指定行數: 數字yy
    • 可視化複製: ctrl + v 選擇行數後 yy p
    • 剪下貼上/刪除 游標所在行: dd
    • 剪下貼上/刪除 游標所在行為準,向下選取指定的行數: 數字dd
    • 剪下貼上/刪除 游標所在行,但下一行不上移: D
    • 撤銷: :u(非命令模式) 或u
    • 恢復: ctrl+r 取消之前的撤銷操作
    • 擴展: 快速將游標移到指定行(數字G),以當前游標為準上/下移動多行(數字+方向鍵),以當前游標為準向左/右移動n個字符(數字+方向鍵),末行模式下數字+Enter
  • 模式間的切換(重點)
    • 命令模式 + : 或 命令模式 + / => 末行模式,Esc鍵可退出
    • 命令模式 + i 或 a => 編輯模式,Esc鍵可退出
  • 末行模式:
    • :w => 儲存檔案
    • :w 檔案 => 另存新檔
    • :q => 退出
    • :wq => 存檔並退出
    • :q! => 強制退出
    • :!ls => 調用外部命令(本範例調用ls,原本開啟的檔案只是暫時被隱藏,檔案並沒有被退出)
    • /關鍵字 => 查找,在結果中利用N/n切換上/下一個結果
    • :nohl => (no highlight)取消高亮度顯示的搜索結果
    • 替換第一個: ":s/查找的關鍵字/新的內容" (strreplace) <- 只會替換找到的第一個
    • 替換游標所在行的所有項目: ":s/查找的關鍵字/新的內容/g" (strreplace) <- 會替換游標所在行符合條件的所有項目
    • 替換檔案內每一行的第一個項目: ":%s/查找的關鍵字/新的內容" <- 會替換檔案內每一行的第一個符合條件的項目
    • 替換檔案內所有項目: ":%s/查找的關鍵字/新的內容/g" <- 會替換檔案內所有符合條件的項目
    • 顯示行號: ":set nu"
    • 取消顯示行號: ":set nonu"

   

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

2. 高級指令

  • du -sh 目錄路徑: 查看目錄的真實大小。-s(summaries)表示只顯示匯總的大小,-h表示以較高可讀性的形式顯示。
  • find 路徑範圍 -name -type: 用於查找檔案。常用的參數如,-name按照檔案名稱進行搜索(支持模糊搜索)、-type按照檔案類型進行搜索。
    • 檔案類型: "-"表示文件(使用find的時候要用f替換之),"d"表示資料夾。例如find / -type f或find / -name *log。
  • service(重要): service 服務名稱 start/stop/restart,用於控制軟體的服務啟動/停止/重啟。
  • kill process的PID 或 kill process名稱。
  • ifconfig: 用於操作網卡相關的指令。
    • CentOS 7 下 ifconfig command not found => https://dotblogs.com.tw/grayyin/2018/08/23/135617
  • reboot: 重新啟動電腦,例如reboot 或 reboot -w,其中,加上-w表示模擬重啟,但是不重啟,目的僅是為了寫開機或關機日誌訊息。
  • shutdown: 表示關機,shutdown -h now或者shutdown -h 15:25分別表示立即關機或指定時間關機。(等同於init 0,halt,poweroff,都是關機的方式)
  • uptime: 輸出電腦的持續在線時間(從開機到現在運行的時間)。
  • uname: 獲取電腦操作系統的相關訊息,類似windows的systeminfo。
    • uname: >> Linux
    • uname -a: 表示獲取全部的系統訊息(類型,電腦名稱,內核版本,發佈時間,開源計畫)。
  • netstat -tnlp:  查看網路連接狀態,-t表示只列出tcp協議的連接,-n表示將地址從字母組合轉化成ip地址,並將協議轉化成端口號來顯示(可讀性相對沒有-n要好),-l表示過濾出State列中其值為LISTEN(監聽)的連接,-p表示顯示對應的process PID及其名稱。
  • man: 全稱為manual,包含Linux中全部命令的手冊,man 命令名稱 即可顯示,退出按下q鍵即可。

 

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

1. 進階指令

  • df: 查看硬碟的空間。
  • df -h: -h以較高可讀性的形式顯示。
  • free -m: 表示查看memory使用情況,-m可將memory單位設為mb。
  • head: "head -n 檔案路徑",用於查看文件的前n行,預設顯示前10行。
  • tail: "tail -n 檔案路徑",用於查看文件的末n行,預設同樣顯示末10行。
  • tail -f: 通過此指令查詢檔案的動態變化,一般用於查看系統日誌,若要退出,按下q鍵。
  • less: "less 要查看的文件",表示查看檔案時,會以較少的內容輸出,按下輔助功能鍵(數字+Enter或空白鍵+上下方向鍵)才能查看更多。
  • wc: "wc -lwc 要統計的檔案",用於統計檔案內容資訊(包含行數 -l,單字數 -w,bytes -c)。

 

  • date(重要): 用於操作日期或時間(讀取或設置)。
    • date (CST: 當地時間): Web Feb 15 08:31:39 EST 2023
    • date +%F: yyyy-MM-dd(注意: 大小寫必須正確)
    • date "+%Y-%m-%d": yyyy-MM-dd(注意: 大小寫必須正確)
    • date "+%F %T": yyyy-MM-dd HH:MM:SS(等同date "+%Y-%m-%d %H:%M:%S",大小寫必須正確)
    • date -d "-1 day" "+%Y-%m-%d": 獲取之前或之後的某個時間(+/-,year/month/day)     

 

  • cal: 用於操作日曆。
    • cal: 直接輸出當前月份的日曆(等同"cal -1")
    • cal -3: 表示輸出上一個月+本月+下個月的日曆
    • cal -y 2023: 表示輸出指定年份的日曆,此範例將輸出2023年的日曆
    • cal -s: 一星期的第一天為週日(默認值為週日開始顯示)
    • cal -m: 一星期的第一天為週一(默認值為週日開始顯示)
  • clear(等同ctrl + L): 清除終端中已經存在的命令和結果。(並非清除之前的訊息,只是將之前的訊息隱藏至最上面,可透過滾輪查看以前的訊息)。 
  • 管道(重要): |為管道符,位於backspace鍵下方,一般可以用於過濾/特殊用法/擴展處理。
    • 過濾:(不能單獨使用,必須配合指令一起使用,用於輔助)通過管道查詢指定目錄下包含 "y"字母的檔案名稱,"ls /|grep y"。
    • 特殊用法: 通過管道的操作,實現less的等價效果(less 檔案  可查看檔案 == cat 檔案|less)。
    • 擴展處理: ls /|wc -l 達到統計資料夾數量的效果。


   
2. 高級指令

  • hostname: 用於操作主機名稱(讀取或設置)。
    • hostname: (localhost.localdomain)表示輸出完整的主機名稱
    • hostname -f: (localhost)表示輸出當前主機名稱中的FQDN(全域名稱)
  • id: 查看用戶的基本訊息,如果不指定用戶,會默認當前用戶。
    • id:
    • id 用戶名稱:
  • whoami: who am I? 顯示當前登入的使用者名稱,方便shell腳本取得當前的用戶名稱。

   

  • ps -ef(重點): ps用於查看當前主機的process訊息;-e等同於"-A",表示列出全部的process;-f表示顯示全部的相關資訊(會更詳細記載process的相關訊息)。
    • 欄位UID: 用戶的id
    • 欄位PID: process的id
    • 欄位PPID: process的上一階id,PPID為PID的調用者。如果一個PID對應的PPID找不到,稱之為殭屍process。
    • 欄位C: cpu的佔用率,形式是%
    • 欄位STIME: process的啟動時間
    • 欄位TTY: 終端設備,發起process的設備識別符號,如果顯示"?"則表示該process由系統自動發起,非由終端設備發起。
    • 欄位TIME: process的執行時間
    • 欄位CMD: process的名稱或者對應的路徑
    • ps -ef|grep process名稱: 可以篩選要看的process

   

  • top: 用於查看主機的process佔用的資源。
    • PID: process的id
    • USER: process對應的用戶
    • PR: PageRank,即優先程度,google也用PR值判斷優先程度<SEO的核心>。
    • NI: nice cpu time(很少用)
    • VIRT: 虛擬內存,例如chrome運行時,申請500MB,實際使用320MB,此時虛擬內存為500MB 
    • RES: 常駐內存,上述案例,常駐內存為320MB
    • SHR: 共享內存,有些process運行時需依賴其他process同時運作,若實際使用320MB,但包含對其他process的調用,共用部分需要被扣除
    •         換言之,計算一個process實際使用的內存 = RES - SHR。
    • S: 表示process進行的狀態(S=睡眠,R=運行)
    • %CPU: 表示CPU佔用百分比
    • %MEM: 表示內存的佔用百分比
    • TIME+: 執行的時間
    • COMMAND: process的名稱或者路徑
    • 補充: 在運行top時,按下以下快捷鍵
      • M: 將結果按照內存(MEM)由大至小降序排序
      • P: 將結果按照CPU使用率由高到低降序排列
      • 1: 當主機擁有多個CPU,使用"1"快捷鍵來切換是否顯示各個CPU的詳細資訊
文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

1. 常用的Linux目錄:

bin: 全稱為binary,該目錄中都是二進制文件,文件皆可以執行
dev: 該目錄中存放的是外接設備,例如硬碟,光碟機。但外接設備是不能直接被使用的,需要通過掛載(分割出各個槽)才能使用。
mnt: 當外接設備需要掛載的時候,會掛載到mnt目錄下。
etc: 該目錄中存放的是配置文件。
home: 類似windows的user資料夾,即除了root用戶以外的其他用戶根目錄。
proc: 全稱為process,該目錄儲存的是linux運行時的process。
root: root用戶的根目錄。
sbin: 全稱為super binary,該目錄也是存放可以被執行的二進制文件,但僅止於擁有super權限的用戶(例如root)才能執行。
tmp: 該目錄儲存臨時的文件,資料夾內的文件用畢後,系統會自動刪除相應的文件。
usr: 該目錄存放用戶自己安裝的軟體,類似windows下的program Files資料夾。
var: 該目錄存放的是程序或系統的日誌文件。

 

2. 常用指令:

  • ls: 全稱為list,將列出當前工作目錄下所有資料夾與文件名稱。ls /資料夾名稱: 此為絕對路徑的寫法,例如 "ls /bin",將列出指定目錄下所有資料夾與文件名稱。
  • ls /資料夾名稱: 此為絕對路徑的寫法,例如 "ls /bin",將列出指定目錄下所有資料夾與文件名稱。
  • ls ./資料夾名稱: 此為相對路徑的寫法,例如 "ls ./bin",將列出當前目錄下指定資料夾項下所有資料夾與文件名稱。
  • ls ../資料夾名稱: 此為相對路徑的寫法,例如 "ls ../bin",將列出上一層目錄下指定資料夾項下所有資料夾與文件名稱。
  • ls -l 路徑: -1表示list,表示以詳細列表的形式進行展示
  • ls -la 路徑: -a表示顯示所有的文件/資料夾,包含隱藏的資料夾。
  • ls -lh 路徑: 列出指定路徑下的所有資料夾和文件,以列表的形式,且顯示檔案大小時,以可讀性較高的形式顯示。
  • pwd: 全稱為print working directory,打印當前工作目錄。
  • cd: 全稱為change directory,切換當前的工作目錄。
  • mkdir: 全稱為make directory,創建目錄。
  • mkdir -p 路徑: 可以一次性創建多層不存在的目錄。
  • mkdir 路徑1 路徑2 路徑3: 可以一次性創建多個(同一層)資料夾。
  • touch: 於當前目錄下,創建檔案或路徑,可同時創建多個。
  • cp: 全稱為copy,用於複製資料夾與檔案至指定的位置。
  • cp -r 被複製路徑 目的地路徑: -r表示連同被複製路徑項下的資料夾或檔案一併複製。
  • mv: 全稱為move,語法與cp指令相似(mv亦可以達到重命名的效果)。
  • rm: 全稱為remove,用於刪除檔案或資料夾。
  • rm -f: 在刪除的時候如果只有rm指令,會提示是否刪除,故可以添加-f表示force,便不會頻繁提示是否刪除。
  • rm -r: 同上,若刪除目錄時,需要連同項下的資料夾或檔案一併刪除,則需要添加-r,-rf表示不提示是否刪除。
  • vim: 是一種文本編輯器,vim 文件的路徑,可用以打開文件(文件可以存在,也可以不存在)。
    • *遇到找不到vim指令的錯誤訊息,已參考以下網址解決:https://blog.csdn.net/weixin_44542685/article/details/122576039
  • 輸出重定向: 例如"ls -la > ls.txt",一般命令的輸出是顯示在終端,若要將執行結果保存到檔案,便需要使用輸出重定向。
    • > 表示覆蓋原先的檔案內容
    • >> 表示追加資料在原先的檔案內容尾端
  • cat: 用於打開/查看檔案"cat 檔案的路徑+檔案的檔名"(與vim的差異: cat讀取檔案內容,無須像vim還要透過:q退出檔案);
  • cat: 亦可以對文件進行合併"cat 待合併的檔案1 待合併的檔案2 ... > 合併之後的檔案"。
  • 補充: drwx 的第一碼表示文件類型;在linux中隱藏檔一般都是以"."開頭;"~" 表示當前用戶的根目錄。
  • 補充: ls列出的結果顏色,藍色表示資料夾,黑色表示檔案,綠色表示擁有所有權限。
  • 補充: 當使用cp命令進行資料夾複製操作時,需要添加選項-r。
  • 補充: *稱之為任意的字符,可用以對一群相似名稱的檔案或資料夾進行同樣的處理。
  • 補充: 利用shift+:,並輸入q或wq,按下enter後可以退出vim的編輯模式。

 

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

學習新東西,先從安裝軟體開始!

1. 先安裝虛擬機VMware,並確認相關網路連線 (控制台\網路和網際網路\網路連線)

image  

image

image

 

2. 透過VMware載入CentOS的ISO檔,以便安裝CentOS

3. 完成Clone及Snapshot備份操作

image

image

 

今日先更新至此。

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

先提供Vue於網路可載到的API document : https://vuejs.org/api/,

接下來是簡易範例:

<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>

    <div id="app">
        {{message}}
    </div>
    
    <script type="text/javascript">
        var app = new Vue({
            el:'#app',
            data:{
                message:'hello world!!'
            }
        });
        
    </script>
</body>
</html>

 

效果如下!!

image

學習框架的好處就是,可以直接用別人已經寫好的套件,算是懶人的福音喔!

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

BPM學習,經過幾日的消化吸收,

的確,透過採購BPM系統,可以達到紙本作業快速自動化的效果(利用拖曳的方式,就可以輕鬆建立表單),但是,缺點是若有特殊的客製化需求,會被該系統原本的框架限制住。

而且市面上的產品琳瑯滿目,還是需要費心瞭解與篩選喔。

 

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

預祝新年快樂!!放長假前的最後一篇!!

先看看 "查股價" 的效果囉!

image

上圖顯示了個股的股價圖,但有些小細節還沒測試完成,以下是完成此任務的參考資訊:

https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0068.html
https://xiaoniuhululu.com/2021-10-20_python-github-api-upload-picture/

 

這個任務總算是用到較多的pandas來做資料的前置處理。

 

年後已完成的小細節:

股號與中文名稱的替換 -> 下載所有上市上櫃股號與名稱對照解決 ,

以及圖檔遇中文會顯示亂碼 -> 置入 simsun.ttc 解決 ,

剩下優化議題...繼續前進!!

 

比較需要資料分析與處理的議題:選股。(也是繼續慢慢前進囉!)

究竟何時可以把個個小功能,變成一個友善又美麗的使用者介面呢?

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

可能是放年假前的最後一篇文,這一次練習增加天氣預報資訊,還沒有弄成美美的版面,先提供簡易的文字訊息!

image

 

要完成這個項目,務必到中央氣象局 開放資料平台辦一個帳號喔!

辦完帳號,就可以利用API取得氣象資料囉!

我的參考範例來源https://ithelp.ithome.com.tw/articles/10244761

 

文章標籤

mina 發表在 痞客邦 留言(0) 人氣()

1 2