2021年12月29日 星期三

Applying Your Linux Skills to macOS: Terminal BASH and Common Commands

 This article is part two in a series about using Linux skills when working in a mac operating system. Check out the other articles in the series:

As you now know from my introductory article, macOS is a flavor of UNIX, similar to Linux. But unlike Linux, macOS does not support virtual terminals by default. Instead, you can use the Terminal app (/Applications/Utilities/Terminal) to obtain a command line terminal and BASH shell.

Alternatively, you can type >console as the username at the macOS login prompt (no password needed) to obtain a login prompt that allows you to log directly into a command line terminal and obtain a BASH shell.

After you obtain a BASH shell, you can run many of the same commands you’ve become accustomed to on Linux. It’s also important to note that the same syntax rules that you used on Linux apply to BASH on macOS:

  • All commands are case sensitive.
  • Regular options (-h) and POSIX options (--help) are listed for most commands.
  • The manual pages (man who) and the info pages (info who) list most command documentation. The help command displays BASH function help (help echo).
  • Commands may be chained using semicolons (date; who).
  • The Standard Output of one command may be sent to the Standard Input of another command using a pipe ( | ) symbol (ps aux | less).
  • The Standard Output and Standard Error of a command may be redirected to a file (ls –l /Users > usersfile 2> errorfile).
  • Single quotes protect all special shell characters, double quotes protect most shell characters (variables are one exception), backquotes perform command substitution (echo The date is `date`) and backslash protects the next character (echo You owe \$4.50).
  • The ~ metacharacter represents the user’s home directories.
  • Tab completes commands and file paths.
  • Ctrl+C cancels a command by sending a SIGINT kill signal to the foreground process.
  • Wildcard metacharacters may be used with commands, and regular expressions may be used within text utilities.
  • BASH control structures and functions may be used to create BASH shell scripts.

NOTE: If you wish to perform system administration as the root user, you must first enable the root user using the Directory Utility app (in /System/Library/CoreServices/Applications). Once you open this app, simply select Change Root Password from the Edit menu.

Common macOS Commands

Below are some common macOS commands, organized by general function. Bookmark this page so you can refer back to it often. Although most options to these commands are identical between Linux and macOS, be sure to view the manual page for commands that you will use in the future.

System Documentation Commands in macOS

  • man Displays/searches the manual page database
  • apropos Searches the manual page database by keyword
  • info Displays/searches the info page database
  • help Displays help on BASH functions

File Management Commands in macOS

  • pwd Displays the current directory
  • cd Changes the current directory
  • ls Lists files
  • file Displays file type
  • locate Finds files using a predefined database
  • which Searches the PATH variable for files
  • find Finds files on the filesystem based on certain criteria
  • cp Copies files and directories
  • mv Moves/renames files and directories
  • rm Removes files and directories
  • rmdir Removes empty directories
  • mkdir Creates empty directories
  • ln Creates hard links; the –s option is used to create symbolic links
  • chown Changes ownership for files and directories
  • chgrp Changes group ownership for files and directories
  • chmod Changes the permissions (mode) on files and directories
  • umask Changes the UMASK variable used to determine default permissions

Text Tools in macOS

  • cat Views (concatenates) the contents of text files to the terminal screen
  • more Views the contents of text files page by page
  • less Views the contents of text files page by page with advanced text features
  • head Displays the beginning of a text file
  • tail Displays the end of a text file
  • sort Sorts lines in text files
  • wc Counts the number of lines, words and characters in a text file
  • grep Searches text files for regular expressions
  • egrep Searches text files for regular expressions (including extended ones)
  • sed Edits text files using search-and-replace functions
  • awk Edits and formats text using predefined functions
  • ·vi (vim) The vi text editor (common to all UNIX systems)
  • emacs The GNU Emacs text editor
  • ·nano A small easy-to-use text editor based on the UNIX pico editor

Filesystem Administration in macOS

  • mount Mounts a filesystem to a mount point directory – alternatively, you can use the mount_filesystem commands (where filesystem is the name of an appropriate filesystem) – see man mount for details.
  • umount Unmounts a filesystem from a mount point directory
  • pdisk May be used to create Apple disk partitions
  • newfs_type Creates a new filesystem on a device (type = apfs, hfs, udf, exfat, msdos)
  • fuser Determines the users accessing a certain file, directory or terminal
  • df Displays disk free space by filesystem
  • du Displays disk free space by directory
  • quota Displays quotas for a certain user
  • edquota Edits user quotas
  • repquota Displays a report on quotas by user
  • quotacheck Updates quota limits on the filesystem

Disk quotas are configured differently in macOS. In Linux, you enable quotas using the appropriate option in /etc/fstab. However, /etc/fstab is not available in macOS. Instead, you must create two files in the root of the filesystem that you wish to enable quotas on (.quota.ops.user and .quota.ops.group).

Shutdown and System State in macOS

  • shutdown Shuts down or reboots the system at a specified time
  • halt Shuts down the system immediately
  • reboot Reboots the system immediately

Compression, Backup and Software in macOS

  • compress Compresses files using a Lempel-Ziv algorithm
  • gzip Compresses files using a standard Lempel-Ziv algorithm
  • bzip2 Compresses files using a block-sorting algorithm
  • tar Used to create small tar archives and tarballs
  • cpio Used to create full filesystem backups using a variety of options
  • make Manages software compiling using gcc and Makefile settings
  • gcc The GNU C compiler used to compile software

BASH Management in macOS

As in Linux, macOS stores its variables in environment files. The /etc/profile and /etc/bashrc files are used by default on the system. Each user can also create their own ~/.bash_profile and ~/.bashrc files. In addition, ~/.bash_logout may be used to perform tasks at shell exit. Here are more BASH management commands for macOS.

  • set Displays all variables in your shell
  • env Displays exported variables in your shell
  • alias Creates special alias variables
  • unalias Removes special alias variables
  • export Creates and exports variables
  • ulimit Sets BASH limits for users (e.g., maximum number of user processes)

Process Management in macOS

  • ps Displays system and user processes (supports BSD-style options only)
  • top Displays top processes and system statistics
  • kill Sends kill signals to processes by process identification number (PID)
  • killall Sends kill signals to processes by name
  • jobs Displays background processes
  • fg Moves a background process to the foreground
  • bg Moves a foreground process to the background
  • nice Changes the priority of a process as it is started
  • renice Changes the priority of a running process
  • at Schedules commands to run at a later time
  • atq Views at jobs
  • atrm Removes an at job
  • crontab Edits user cron tables (used to repetitively schedule commands)

User and Group Administration in macOS

User and group administration differs slightly in macOS from Linux. There are no useradd or userdel commands. Instead, you must use the System Preferences utility to create user accounts properly. User information is stored in a directory database under the /var/db directory. The /etc/shadow file does not exist and the /etc/passwd and /etc/group files exist only to provide information to apps.

  • whoami Displays the current user name
  • who am i Displays your username and computer information
  • groups Displays the current user’s group memberships
  • id Prints the User ID (UID) and Group IDs (GIDs) for the current user
  • chfn Changes the user description used by the finger command
  • finger Displays user description information
  • chsh Changes the shell for a user account
  • passwd Changes the password for the current user (the root user may change other user's passwords by specifying the username as an argument)
  • who Displays who is on the system
  • w Displays who is on the system and what they are doing

Common Unix Printing System (CUPS) Printing in macOS

  • lp Prints a file (lpr is supported for BSD compatibility)
  • lpstat Views print jobs and printer status (lpq and lpc are supported for BSD
  • compatibility)
  • cancel Removes a print job from the print queue (lprm is supported for BSD
  • compatibility)
  • cupsaccept Allows jobs to enter a print queue
  • cupsreject Prevents jobs from entering a print queue
  • cupsenable Allows jobs to be sent to the printer from the print queue
  • cupsdisable Prevents jobs from leaving the print queue

Network- and Security-Related Commands in macOS

Network devices have different names in macOS. The first ethernet adapter is called en0 (typically wired ethernet), and the second is called en1 (typically wireless ethernet). Ensure that you use System Preferences to change any network parameters, as they are not stored in text files as they are on Linux systems. For example, the /etc/resolv.conf file still exists in macOS and lists DNS servers configured in System Preferences, but it is not used by the system – it is merely there in case an app queries it. The only network-related file that is used actively and may be edited is /etc/hosts (for local host name resolution). Here are more network- and security-related commands in macOS.

  • ifconfig Displays and configures TCP/IP network interfaces
  • ping Tests connectivity between hosts
  • whois Queries domain name registration information
  • arp Views and manages the address resolution protocol (ARP) cache
  • netstat Views TCP/IP network statistics and the routing table
  • route Manages the TCP/IP routing table
  • traceroute Traces an IP packet across routers
  • hostname Sets the system host name
  • host Resolves host names to IP addresses and vice versa
  • nslookup Resolves host names to IP addresses and vice versa
  • dig Resolves host names to IP addresses and vice versa
  • su Switches your user account to another account
  • sudo Performs tasks as another user via entries in the /etc/sudoers file
  • last Displays a detailed list of previous user logins
  • tcpdump Captures packets on a network interface

System and Miscellaneous Commands in macOS

  • date Displays the current date and time
  • exit Exits out of the shell (logout)
  • echo argument Displays the argument to the terminal screen
  • clear Clears the screen
  • uname option Displays system information specified by the option–a specifies all information
  • uptime Lists system statistics and uptime
  • cal Lists the calendar for the current month
  • banner Prints an ASCII banner
  • iostat Displays input/output (I/O) statistics for the system

Now you’ve got the macOS basics down, and you know the common commands. In the next installment, I’ll be discussing apps. Stay tuned!

Round out your IT skillset with CompTIA Linux+.

資料來源:https://www.comptia.org/blog/applying-your-linux-skills-to-macos-terminal-bash-and-common-commands

2021年12月20日 星期一

程式優化寫法

 

  1. unsigned/signed
    一般情況下,在使用signed類型時compiler會考慮其為正數和負數的情況,因此在不會出現負數的環境中,使用unsigned會避免負數的開銷,從而節省ROM。


  2. 資料形態選擇適當範圍的資料類型,助於產生更精簡的指令。


  3. 浮點常數浮點常數默認為double類型,如果計算所需要的精度不需太高,可以將它強制轉為float,如:(float)3.14


    編譯器不會給浮點運算常量折叠,所以,如果有兩個浮點常數需要計算,可以把結果先算出來:


  4. const陣列把const陣列定義成全域會比局域的節省RAM:


  5. 算術運算
    位與運算(&)代替取模運算(%)一般情況下,“&”操作比“%”操作簡單,在某些特殊情況下,如果可以使用“&”代替“%”,則會降低指令的開銷。


  6. 程式結構
    switch語句代替if else語句當程式中存在多層嵌套的if  else語句,如果多重判斷可轉為switch語句,可以試著轉為switch語句,以便節省ROM
  7. 重複多次的運算可以用迴圈代替當程式中存在多次重複的運算,而且都有規律性,可以用迴圈代替。



  8. 使用預處理命令維護原始程式碼有時候為了維護的方便,希望同一份源碼滿足不同環境的要求,如果用硬編碼的方式,可能會消耗很多的ROM,此時若利用條件編譯的特性,就能輕鬆的實現:



  9. 函式呼叫
    避免不必要的函式呼叫若某函式被多次調用,但其返回值並無差異,應考慮用變數接收函式返回值,使用時做為替代。



  10. 封裝頻繁使用的代碼為函式如果在程式中存在某段代碼被多次使用,在可能的情況下,應將這段代碼封裝起來獨立成為函式,以便節省指令



  11. 如果函式只在本文檔調用,可以定義成static



  12. 全局變數的分配對無擴展指令架構的MCU,RAM  BANK0以外的地址只能用間接定址的方式訪問,下例可以看出,間接定址的指令比直接定址多出5條,所以,當RAM bank0溢出時,用戶可以選擇把較少用到的變數定義到其它bank,比較常用的變數定義在bank0。



  13. 中斷服務程式一般,如果兩個函式沒有調用關係,那它們的局域變數是可以分配到同樣的地址,但中斷服務程式不會與主函式共用局域變數的地址,所以,為了減少RAM的使用,中斷程式可以儘量簡單,不宜寫得太過複雜。


資料來源:https://www.holtek.com.tw/documents/10179/178484/Holtek_C_compiler_V3_Users_Guide(950).pdf

2021年12月15日 星期三

Win10 儲存集區 的讀寫效能比較 Storage Space

三種 Win10 儲存集區 的效能比較

三種 Win10 儲存集區 的讀寫效能比較,當你在建立儲存集區 ,其實就是建立 Windows 作業系統的【 軟體 RAID 】,而這種【 軟體 RAID 】( Win10 storage space )並不支援當成電腦的系統碟,只能當資料碟。另外,當建立儲存空間之前,請先完成建立儲存集區,因為儲存空間是配置於儲存集區上。詳細儲存空間、儲存集區的定義,可以參考微軟網站: 儲存空間直接存取概觀

這一篇文章就來看電腦系統的記憶體容量大小( 8GB, 16GB, 24GB ),會不會對不同的 Windows 10 儲存空間 ( Storage Space )類型,造成讀寫效能的影響。

Win10儲存集區的實驗條件

電腦規格

使用的電腦與作業系統,其實都跟前一篇文章一樣 ( 記憶體容量大小會影響SSD的效能嗎? ):

  1. 記憶體: DDR4-2133 8 GB
    • 記憶體單通道: DDR4-2133 8 GB x 1 
    • 記憶體雙通道: DDR4-2133 8 GB x 2
    • 記憶體單通道: DDR4-2133 8 GB x 3
  2. 作業系統: Windows 10 家用版 64 位元
  3. 測試軟體: CrystalDiskMark 
  4. SSD固態硬碟:
    • KingSton: SUV400S37/240G SSDNow UV400 240 GB, SATA 6G
    • SanDisk: SDSSDXPS-240G-G25 240GB 固態硬碟, SATA 6G
    • Micron: 美光Micron Crucial BX500 240GB SATAⅢ固態硬碟, SATA 6G

建立三種儲存集區

如何建立 Win10 storage space 與 儲存集區,可以參考另一篇文章的建立儲存集區流程的圖文: 儲存空間 : 用 Acer E5-575G 來實現磁碟陣列

在這裡會分別測試以下儲存集區中的儲存空間讀寫效能:

  • 簡單(無備援): Simple
  • 雙向鏡像: Two-way mirror
  • 同位: Parity

簡單(無備援): Simple

下圖是這次實驗的簡單(無備援): Simple 儲存空間細節,因為三顆SSD的容量大小都是223GiB(240GB),所以整個儲存空間大小就是223GiB * 3 = 669GiB。

這種儲存空間就是將資料儲存在N (N≧2) 個以上的硬碟,組合成一個大的儲存空間,但是缺點是完全沒有更正錯誤的能力,只要有一個硬碟故障,就會造成所有存放在硬碟裡面的資料毀損,就無法挽回。

所以,這種儲存集區下的儲存空間適合暫存資料 (例如,視訊轉譯檔案)、影像編輯器草稿檔案,以及中繼編譯器物件檔案。

05_-Win10-儲存集區-的讀寫效能比較-簡單-500x572-1
簡單(無備援): Simple 儲存空間 容量大小

雙向鏡像: Two-way mirror

下圖是這次實驗的雙向鏡像: Two-way mirror 儲存空間細節,因為三顆SSD的容量大小都是223GiB(240GB),所以整個儲存空間大小就是223GiB * 3 * 0.5 約 331GiB。其中*0.5是因為雙向鏡像的儲存空間會將原始資料,儲存兩份相同的資料在這個空間當中。所以,當其中一顆SSD損壞時,可以插入另一顆新的SSD到電腦中,Windows 會自動維護資料的完整性,將資料復原成兩份。缺點就是,這種儲存空間的容量是全部硬碟容量的一半,但是可以換來最佳的資料保護目的。

06_ Win10 儲存集區 的讀寫效能比較 雙面鏡像 500x574
雙向鏡像: Two-way mirror 儲存空間 容量大小

同位: Parity

下圖是這次實驗的同位: Parity 儲存空間細節,因為三顆SSD的容量大小都是223GiB(240GB),所以整個儲存空間大小就是223GiB * 3 *0 .667約 442GiB。

這種儲存空間有點小複雜,所以只要會使用就好了。簡單說,它提供

  • 更好的儲存效率: 與雙向鏡像相比,可以使用比較多的容量。因為一個是可以使用總儲存空間容量的一半;而一個是可以使用總儲存空間容量的三分之二。
  • 具備容錯能力: 與雙向鏡像一樣,可以允許一顆SSD損壞,資料還可以正確存在。
07_ Win10 儲存集區 的讀寫效能比較 同位 500x580_U0826
同位: Parity 儲存空間 容量大小

>>> 你可能會有興趣: 【使用情境】影片錄影搭配 Storage Space,讓工作更有效率!

Win10 儲存集區 的讀寫效能結果

比單顆 SSD 效能好一點

跟前一篇文章單顆 SSD 效能比較的話 ( 記憶體容量大小會影響 SSD 的效能嗎 ? ),效能有好一點,尤其是【 4KiB Q8T8 】這一個項目。不過,卻是三種儲存空間中,連續讀取速度( Sequential Read )效能最差的一個。

02_ Win10 儲存集區 的讀寫效能比較 簡單 1024X512
Windows 10 儲存集區: 簡單(無備援, Simple)的讀寫效能比較

雙通道記憶體效能提升並不明顯

雙向鏡像 ( Two-way mirror ) 的寫入速度明顯比簡單 ( 無備援 Simple ) 來的差。不過讀取速度卻是明顯提升很多。

另外,在雙向鏡像 ( Two-way mirror ) 的儲存空間下,記憶體容量越大,連續讀取速度 ( Sequential Read ) 會越好,不過,幅度卻不是很大。與記憶體跑單通道或雙通道,沒有太直接的關係。

03_ Win10 儲存集區 的讀寫效能比較 雙面鏡像 1024X512
Windows 10 儲存集區: 雙向鏡像 ( Two-way mirror )的讀寫效能比較

適合跑雙通道記憶體

很明顯地看到,連續讀取速度 ( Sequential Read ) 優於其他兩種儲存空間;不過,寫入速度卻是最差的一種儲存空間。

04_ Win10 儲存集區 的讀寫效能比較 同位 1024X512_U0826
Windows 10 儲存集區: 同位 ( Parity ) 的讀寫效能比較

>>> 你可能會有興趣: 【免費軟體】Macrium、Acronis 無法備份 Storage Space的資料, 不過這套可以!

Win10 儲存集區 的心得

你懂你的需求嗎?

像我們這種一般使用者而言,哪一種儲存集區的儲存空間適合自己呢?

我是將手邊堪用又捨不得丟掉的幾顆小硬碟 ( 500 GB ) ,建立【 簡單 ( 無備援 ) :  Simple 】 來二次利用。畢竟現在大家家裡都不只一台電腦 ( 桌上型電腦 + 筆記型電腦 ) ,可以將資料備份到其他台電腦的硬碟 ( 也許是 1 TB 或 4 TB 硬碟中 ) ,甚至還可以把重要的資料,設定成電腦開機就同步到雲端。而且這種儲存空間整體的 讀 、 寫效能,是最適合我的使用習慣了。 

而想要了解更詳細的 4 種 Storage Space types 讀寫效能的數據,可以參考: Storage Space in Windows 10: performance result,裡面有詳細的 4 種類型讀寫效能數據,可以讓你參考。例如:

  • Storage Space types:
    • Simple
    • Two-way mirror
    • Three-way mirror
    • Parity
  • Outstanding I/Os: 1 ~ 32
  • Data size: 512Byte, 4KByte, 16KByte, 32KByte, 64KByte, 256KByte, 512KByte, 1024KByte
  • Test pattern:
    • Sequential
      • Read, Write
    • Random
      • Read, Write

Storage Space無法做開機碟,那麼硬體 RAID 可以嗎?

想要建立開機碟的話,有兩個選擇: 一個是使用主機板 RAID,另一個是使用硬體 RAID CARD。不過以價格來考慮的話,會優先推薦先使用主機板RAID。有興趣的話,可以參考這篇文章: 主機板RAID 0/1/5/10 的讀寫效能 


資料來源:https://hipay0.com/performance-comparison-for-windows-10-storage-space/

2021年12月14日 星期二

Web AR.js

本篇文章紀錄我根據TechBridge 技術共筆部落格製作webAR的過程與碰到的難處。

AR.js成果展示
webAR成果

AR.js介紹

AR.js是一款融合了 artoolkit、three.js、WebGL 和 WebRTC 等技術的工具。

先說優點:

AR.js 使用了 A-Frame (基於 Three.js) 以及 JSARTookit5,而這兩個技術主要皆是利用 WebGL 為主,因此大多現行的瀏覽器都能直接支援,不需要特殊的 API。這大概也是為何 AR.js 能在 GitHub 上擁有一萬多顆星星,遠勝過上列其他套件的原因。

TechBridge 技術共筆部落格

缺點:

AR.js雖然快速好用,但也不是萬能的目前只能支援以Marker定位的方式運行webAR,即是需要在鏡頭內放置一個設定好的 Marker圖片讓其辨識。如果想要以偵測平面或其他非Mark的方式運行webAR就必須研究WebXR Device API

應用AR.js

首先,AR.js有提供了一個專門製作Marker的工具AR.js Marker Training,在這個網頁可以製作自己想要的Marker圖片,製作完成後點選Download Marker會給你一個副檔名為patt的Marker。

接下來準備想要呈現的3D模型,可以到 Poly 或是 sketchfab 下載 gltf 格式的 3D 模型。

最後,進入AR.js的程式部分,Coding部分很簡單,只有幾行的html:

最先的兩段先匯入Libraries:

<script src="https://aframe.io/releases/0.9.2/aframe.min.js"></script>
<script src="https://cdn.rawgit.com/jeromeetienne/AR.js/1.7.5/aframe/build/aframe-ar.js"></script>

在 <a-scene /> 中,我們指定一個 attribute arjs,並且設定 sourceType 為 webcam,相關 attribute 設定其實來自 artoolkit system,有需要可以到 GitHub 的列表查看。

接著我們透過 <a-marker /> 放入我們製作的 marker,副檔名為 .patt,這邊的 type attribute,如果你是單純用 barcode 的話,可以設為 type=barcode,但若是客製化的 marker,就要設為 type=pattern

最後在 <a-entity /> 上頭設定我們想要呈現的 AR 3D Model,gltf-model attribute 設定模型的路徑,再透過 position 與 rotation 來調整你的模型出現在鏡頭的位置。


資料來源:https://z0935323866.medium.com/%E5%88%A9%E7%94%A8ar-js%E8%A3%BD%E4%BD%9Cwebar-3479abb5f62b 


Example

https://sharebyboss.github.io/test_arjs/