การใช้งานคำสั่ง Linux
เขียนโดย ดร.จักรกฤษณ์ แสงแก้ว วันที่ 5 ธันวาคม 2561
การล็อกอินผ่าน SSH โดยไม่ต้องใส่รหัสผ่าน
การล็อกอินเข้าไปยังคอมพิวเตอร์ปลายทางที่เป็นระบบปฏิบัติการลินุกซ์ ส่วนใหญ่สมัยก่อนจะใช้ Telnet ซึ่งใช้หมายเลขพอร์ตเบอร์ 23 ในเวลาต่อมาพบว่าโปรโตคอลตัวนี้ไม่ปลอดภัย จึงได้มีการเสนอโปรโตรคอลตัวใหม่ เรียกว่า SSH เพื่อเข้าไปควบคุมคอมพิวเตอร์ปลายทาง ซึ่ง SSH ตัวใหม่นี้จะมีหมายเลขพอร์ต คือ 22
สมัยนี้อะไรก็ง่ายไปหมด.. การรีโมทไปใช้คอมพิวเตอร์ปลายทางที่เป็นกราฟิกอินเตอร์เฟส (โต้ตอบด้วยภาพกราฟิก) ที่ได้รับความนิยมอย่างมากคือ Teamviewer ซึ่งก่อนหน้านั้น ผมมักจะใช้โปรแกรม AMMYY แต่ทุกวันนี้ไม่ได้ใช้ !!
ในโลกลินุกซ์นั้น เรามักนิยม รีโมท (remote : เข้าถึงเครื่องในระยะไกล) ด้วย SSH เพื่อเข้าไปจัดการ เช่น ติดตั้งโปรแกรมเพิ่มเติม เข้าไปลบไฟล์โน่นนี่นั่น.. สั่งเปิดเพลง หรือสั่งรีสตาร์ทเป็นต้น
ปกติแล้วการจะล็อกอินต้องมี username และ password และต้องกรอกทุกครั้ง ที่มีการเชื่อมต่อระหว่างกันและกัน !!
วันนี้นำเสนอ การไม่ต้องกรอกรหัสผ่านเข้าไปใน SSH Server มีขั้นตอนดังนี้
ในตัวอย่างนี้เครื่องปลายทาง (HOST) มีหมายเลข 192.168.0.100 และมี username : user1 ส่วนรหัสผ่านสมมติเป็น xxx
1. เครื่องลูกข่ายเปิดเทอร์มินัล และสังเคราะห์คีย์ ด้วยวิธี RSA
$ ssh-keygen -t rsa
จากนั้นกดแป้น Enter ผ่านไปจนจบขบวนการ
2. สร้างไดเร็คทอรี่ .ssh บนแม่ข่าย
$ ssh user1@192.168.0.100 mkdir -p .ssh
ให้ป้อนรหัสผ่านเข้าแม่ข่าย ในตัวอย่างนี้คือ xxx
3. อัพโหลดไฟล์ public keys เข้าไปในแม่ข่าย
$ cat .ssh/id_rsa.pub | ssh user1@192.168.1.100 'cat >> .ssh/authorized_keys'
4. กำหนดสิทธิ์ให้กับไฟล์ authorized_keys
$ ssh user1@192.168.1.100 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"
5. ทดสอบการล็อกอินจากลูกข่ายไปแม่ข่าย
$ ssh user1@192.168.1.100
ตอนนี้สามารถรีโมทเข้าไปเครื่องแม่ข่าย โดยไม่ต้องป้อนรหัสผ่านได้แล้วครับ
การหาไฟล์ mp3 ในเครื่องและเก็บผลลัพธ์ในไฟล์ชื่อ mp3.txt
1. เข้าไปที่ไดเร็คทอรี่ที่ต้องการ เช่น
$ cd /media/learning/2TB/mp3
2. เรียกคำสั่ง
$ find -name "*.mp3" > mp3.txt
คำสั่ง find คือ ค้นหาไฟล์
-name คือ พารามิเตอร์บอกว่าให้หาชื่อไฟล์
"*.mp3" คือ หาไฟล์อะไรก็ได้นามสกุล mp3
> mp3.txt คือ เอาผลลัพธ์ที่แสดงผลที่เห็นในหน้าจอ เก็บลงในไฟล์ชื่อ mp3.txt
3. เสร็จแล้ว เท่านี้ก็ได้รายชื่อไฟล์ mp3 มาแล้ว
ปล. ลินุกซ์ ทำงานเป็น pipe คือ ต่อ ๆ กันไปได้ ผลลัพธ์ของคำสั่งก่อนหน้า เอามาประมวลผลในคำสั่งที่อยู่ด้านหลังได้ ดังนั้น หากต้องการนับว่ามีทั้งหมดกี่ไฟล์ ให้ต่อท้ายด้วยคำสั่ง wc -l คือ word count และ -l คือ นับบรรทัดว่ามีกี่บรรทัด
ปล. หากต้องการให้เรียงผลลัพธ์ จากน้อยไปมาก ก ไป ฮ หรือจาก a ไป z ให้ pipe (ต่อ) ด้วยคำสั่ง sort ดังนี้
$ find -name "*.mp3" | sort > mp3.txt
การปิดฟังก์ชั่นบางฟังก์ชั่นของ PHP
แก้เไฟฺล์
/etc/php5/apache2/php.ini
ค้นหาบรรทัด disable_functions และแทรกฟังก์ชั่นที่ไม่ต้องการใช้งานเข้าไป ดังนี้
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,
หมายเหตุ :
ใน CentOS -> /etc/php.ini
ใน Ubuntu -> /etc/php5/apache2/php.ini
หลังจากแก้ไขให้ restart service อีกครั้ง
$ sudo service apache2 restart
การทำให้แอพลิเคชั่น Ontop !!
$ sudo apt-get install wmctrl
$ wmctrl -r :SELECT: -b add,above
ใช้เมาส์คลิ๊กแอพลิเคชั่นที่ต้องการให้อยู่ด้านบนเสมอ !!
เขียนข้อความลงบนหน้าจอโดยตรง (พื้นที่ Desktop)
$ sudo apt-get install libaosd-dev
$ sudo apt-get install aosd-cat
เรียกใช้งาน
$ echo "สถานะการณ์ปัจจุบัน" | aosd_cat -n "bitstream bold 55" -R yellow -t 2 -u 30000 -x 30 -y -660 -i -
การแชร์อุปกรณ์ USB ให้กับ Guest OS ใน Virtualbox
1) แก้ด้วยคอมมานไลน์
$ sudo adduser username vboxusers
ปล. เมื่อ username คือ ชื่อผู้ใช้งานระบบ
2) แก้ด้วย GUI (Graphics User Interface)
เลือก Menu -> Admininstration -> Users&Groups -> ManageGroups
เลื่อนสกอร์มาที่ ผู้ใช้ที่ชื่อ vboxUsers กด Properties และให้เช็คเลือกผู้ใช้ในกลุ่มเดียวกับ vboxUsers
การใช้งาน Rsync
$ sudo rsync -avz /var/lib/* /media/learning/SB@/var/lib/
$ sudo rsync -avz /home/learning/* /media/learning/SB@/home/learning/
การอัพโหลดไฟล์ไปยัง Remote Server
$rsync -avz * username@192.168.43.81:/media/learning/2TB/NANOPI-M1/NUI-IMAGES
คัดลอกไฟล์ทั้งฮาร์ดดีสก์ไปยังอีกลูก
$ sudo rsync -av --exclude '/mnt' --exclude '/media' --exclude '/proc' --exclude 'sys' /* /media/learning/SB@/
ข้อควรระวังเกี่ยวกับการใช้งาน RSYNC
1. ถ้าระบุชื่อไฟล์ด้วย asterisk (เครื่องหมาย *) มันจะไม่คัดลอกไฟล์ที่มีชื่อขึ้นต้นด้วยจุด ซึ่งคือ hidden file
2. ถ้าระบุด้วย . มันจะคัดลอกไฟล์ทุกอย่าง แต่มันจะกำหนดสิทธิ์ให้ไฟล์ที่ซ่อนเปลี่ยนเป็นชื่อผู้ใช้ที่สั่ง Rsync และถ้าใช้ sudo rsync มันจะเปลี่ยน hidden file เหล่านั้นให้เป็น root
3. ดังนั้น ให้แก้ด้วยการระบุด้วย path ลงไปเลย อย่าไปใช้เครื่องหมาย . หรือ ดาว เช่น
$ sudo rsync /home/ /mnt
การระบุด้วยแบบที่ 3 ซึ่งกำหนดเพียงพาร์ท จะทำให้มันคัดลอกไฟล์ทุกไฟล์รวมทั้งไฟล์ที่ขึ้นต้นด้วยจุดด้วยสิทธิ์ของผูุ้ล็อกอินเข้าระบบ
การตรวจสอบ IP ที่ต่อภายในวงเน็ตเวอร์คหนึ่ง ๆ
1. ใช้ arp-scan
$ sudo apt-get install arp-scan # การติดตั้ง
# sudo arp-scan 192.168.43.0/24 # ตรวจสอบไอพีในวง 192.168.3.1-255
2. ใช้ nmap
$ sudo apt-get install nmap
$ nmap -sP -PI 192.168.1.0/24 # ตรวจสอบไอพีในวง 192.168.1.1 ถึง 255
ปล. arp-scan จะแสดงทั้ง ip และ mac-address
การส่งไฟล์ ข้ามเน็ตเวอร์ค ด้วย pssh
การติดตั้ง $ sudo ap-get install pssh
เมื่อติดตั้ง pssh แล้วจะมีคำสั่งต่าง ๆ ที่เพิ่มเข้าในระบบปฏิบัติการ คือ
1. parallel-nuke
2. parallel-scp
3. parallel-ssh
4. parallel-rsync
5. parallel-slurp
สร้างรายชื่อคอมพิวเตอร์ใน ~/.pssh_hosts_files เช่น
root@192.168.43.100
root@192.168.43.101
root@192.168.43.102
root@192.168.43.103
เรียกคำสั่ง date ในทุก ๆ เครื่องในรายการ .pssh_hosts_files ด้วย
$ parallel-ssh -i -h ~/.pssh_hosts_files date
ผลลัพธ์จะแสดงดังนี้
[1] 18:10:10 [SUCCESS] root@192.168.43.100
Sun Feb 26 18:10:10 IST 2017
[2] 18:10:10 [SUCCESS] root@192.168.43.101
Sun Feb 26 18:10:10 IST 2017
[3] 18:10:10 [SUCCESS] root@192.168.43.102
Sun Feb 26 18:10:10 IST 2017
[3] 18:10:10 [SUCCESS] root@192.168.43.103
Sun Feb 26 18:10:10 IST 2017
การคัดลอกไฟล์ไปยังทุกโฮส
$ parallel-scp -h ~/.pssh_hosts_files demo.txt /tmp
ปล. คัดลอกไฟล์ demo.txt ไปไว้ที่ /tmp ของทุกโฮส
การลบโพรเซสใน parallel ใช้ parallel-nuke
$ parallel-pnuke -h ~/.pssh_hosts_files firefox
ปล. ลบโพรเซส filefox ที่กำลังอยู่ในทุก ๆ โฮส
สรุป
pssh เป็นเครื่องมือสำหรับการประมวลผลขนานผ่าน SSH ที่ทำงานกับ Server หลาย ๆ ตัวหรือภายในเน็ตเวอร์ค !! :) (y)
การค้นหารูปแบบสตริงด้วย Grep (Global Regular Expression Parser)
$ find -name "x*" -execdir grep -l "จักรกฤษณ สงแก้ว" {} +
เช็คจำนวนคอร์ ของซีพียู
$ nproc
แก้ปัญหา : "Resolving Host" ใน Chrome Browser !!
เน็ตใน มอ จะเกิดปัญหา Resolving Host บ่อย ๆ แก้โดยไปใช้ NS จาก GOogle ดังนี้
1. แก้ไขไฟล์ /etc/resolv.conf และเพิ่มสองบรรทัดนี้เข้าไป
nameserver 8.8.8.8
nameserver 8.8.4.4
2. รีสตาร์ทเน็ตเวอร์ค
$ sudo service networking restart
Bluefish ปิดวงเล็บให้อัตโนมัติ
สำหรับนักพัฒนาที่ต้องเขียนโค๊ดบ่อย ๆ อาจจะไม่ค่อยชอบการเปิดวงเล็บและปิดให้อัตโนมัติ เพราะต้องมาย้ายคีย์ลูกศรข้ามวงเล็บที่ปิด ทำให้เซ็งและไม่สะดวก
วิธีการ : เลือก Edit -> Preference -> Editor Settings -> เลือก Automatically Insert Closing Brackets ให้เป็น Never
การค้นหาไฟล์ที่มีขนาด 0 ไบต์และลบทิ้ง
1) ค้นหาด้วย find และส่งเป็นอาร์กิวเมนต์ให้อีกคำสั่่ง เช่น
$ find * -size 0 -print0 | xargs -0 rm
2) การใช้คำสั่ง find และอาร์กิวเมนต์ -delete เช่น
find * -size 0 -delete
3) การใช้คำสั่ง find และพารามิเตอร์ -empty เช่น
$ find * -type f -empty -delete
ปล. ต้องใส่ -type f เพราะว่าไดเร็คทอรี่มีขนาดเท่ากับ 0
4) การใช้คำสั่ง find ระบุพารามิเตอร์ -exec เช่น
$ find * -type f -empty -exec rm -f {} \;
การค้นหาไฟล์แล้วลบทิ้ง
find -name "*ชื่อไฟล์*" | xargs rm;
การย่อภาพด้วยคำสั่ง mogrify
โปรแกรม mogrify เป็นของ Image Magick (Open Source)
ทำหน้าที่ ย่อ/ขยายภาพ, ทำภาพเบลอ, ตัดขอบเขตในภาพ ฯลฯ โดยจะทำกับไฟล์ต้นฉบับ ในขณะที่คำสั่ง convert เมื่อประมวลผลภาพเสร็จจะสร้างเป็นไฟล์ใหม่
วิธีการดำเนินการ
$ mogrify -resize 30% *.jpg
หมายเหตุ : ไฟล์ภาพ .jpg ทุกไฟล์จะถูกย่อให้มีขนาด 30% :)
การแปลง PDF เป็น Text File
การแปลง PDF เป็น Text ทำได้หลายวิธี หนึ่งในนั้นคือ pdftotext
วิธีการดำเนินงาน
1. ติดตั้ง poppler-utils ด้วยคำสั่ง
$ apt-get install poppler-utils
2. เรียกใช้งานคำสั่ง pdftotext
$ pdftotext inputfile.pdf outputfile.txt
การค้นหาชื่อไฟล์ที่มีเนื้อหาตรงกับคำค้น
ถ้ามีไฟล์จำนวนมากและต้องการทราบว่า มีไฟล์ไหนบ้างที่มีคำที่เราต้องการอยู่ในไฟล์เหล่านั้น ใช้คำสั่ง ต่อไปนี้
$ find . -iname "*.html" -execdir grep -l "ปริญญาเอก" {} +
หรือ
$ grep -rl "ปริญญาเอก" *.html
R is to search recursively (following symlinks)
i is to make it case insensitive
l is just to list the name of the files.
ปล. ตัวอย่างด้านบนค้นหาคำว่า "ปริญญาเอก" จากไฟล์จำนวน 1 หมื่นไฟล์ พบทั้งสิ้น 171 ไฟล์ ใช้เวลาสืบค้นเพียงเล็กน้อย (เร็วกกว่าการค้นในระบบฐานข้อมูลเชิงสัมพันธ์หลายเท่า)
โปรแกรมขยายไฟล์ RAR
$ sudo apt-get install unrar
การใช้งาน
$ unrar x filename.rar
การสร้างไฟล์ ISO มีหลายวิธี ทั้งคอมมานไลน์ และกราฟิกอินเตอร์เฟส
- วิธีที่สะดวก ที่ผมเองก็พึ่งทราบวันนี้ คือ คลิ๊กขวาที่โฟลเดอร์ที่ต้องการ -> Compress -> เลือกเป็นชนิด ISO
การ Mount ไฟล์ ISO
คลิ๊กขวาไฟล์ ISO และเลือก Disk Image mounter
การใช้งาน Desktop Sharing (VNC server)
1. เรียก Desktop Sharing
2. กำหนด password
3. org -> gnome -> desktop -> remote-access -> uncheck “require-encryption”
4. เข้าใช้งาน remote server ด้วย vnc
- ระบุ IP เครื่องปลายทาง
- ป้อนรหัส :
เข้าใช้ Remote Desktop ได้แล้วครับ
การใช้ Teamviewer ใน Local Network
1. ดาวน์โหลดและติดตั้ง
> เวอร์ชั่น 12 ให้หาไฟล์และดาวน์โหลด teamviewer_12.0.71510_i386.deb
2. ติดตั้ง sudo apt install gdebi-core
3. ติดตั้ง teamviewer ด้วย sudo gdebi teamviewer*.deb
เปิด teamviewer เลือก -> Option -> General -> Incomming Lan Connection เปลี่ยนเป็น [ Accept หรือ Accept Exclusively]
เมื่อ Accept จะมีการใช้ ID จากแม่ข่ายของ Teamviewer
เมื่อ Accept Exclusively คือ ใช้ไอพีในวงแลนเดียวกันเป็นเครื่องปลายทาง
ข้อดีเทียบระหว่าง Teamviewer และ Desktop Sharing คือ ความเร็ว พบว่า teamviewer ทำงานได้เร็วกว่า Desktop Sharing ครับ
การ remote mount ด้วย sshfs
ขั้นตอนการทำงาน
1. เครื่องแม่ข่ายติดตั้งโปรแกรม openssh
$ sudo apt install openssh-server
2. เครื่องลูกข่ายติดตั้งโปรแกรม sshfs
$ sudo apt-get install sshfs
3. สร้างโฟลเดอร์ที่ต้องการ mount (เชื่อมต่อ)
$ mkdir /home/user1/test
4. ใช้คำสั่งเชื่อมต่อ remote drive มายัง local drive
$ sshfs username@ไอพีแม่ข่าย :/ไดเร็คทอรีแม่ข่าย /ไดเร็คทอรี่ลูกข่าย
เช่น
sshfs user1@10.100.55.100:/media/data /home/user1/test
[ป้อนรหัสผ่านเครื่องแม่ข่าย]
ตอนนี้สามารถเชื่อมต่อ remote drive มายัง local drive ได้แล้ว สะดวกมาก ๆ นะครับ
การใช้ Docker Container 2 ตัวที่แตกต่างกัน รัน IPython Notebook พร้อมกัน
- โปรแกรม Ipython notebook หรือ Jupyter Notebook เป็น Editor สำหรับแก้ไขโค๊ดโปรแกรมและแสดงผลลัพธ์ผ่านบราวเซอร์
- ในการใช้งาน Container หลาย ๆ ตัว ที่ใช้งาน Jupyter ซึ่งจะใช้พอร์ต 8888 ซึ่งจะชนกัน ดังนั้น เราสามารถใช้พอร์ตคนละพอร์ต ซึ่งจัดการโดย docker อัตโนมัติ
การดำเนินการ
1. รัน docker container ด้วย --net=host เช่น
$ docker run -it --net=host container1 bash
เมื่อเข้าสู่ Bash Shell ของ container1 สามารถเรียกใช้ jupyter notebook ได้ดังนี้
# jupyter notebook --allow-root
หลังจากนั้นโปรแกรมจะส่งลิงค์สำหรับเข้าใช้งาน jupyter เช่น
http://localhost:8888/?token=bdfa911ec46adb22e8e636de694860c9d56f662f855976aa
2. รัน docker container ลำดับที่ 2 ด้วยค่า --net=host เหมือนขั้นที่ 1
$ docker run -it --net=host container2 bash
หลังจากนั้นเรียก jupyter notebook ดังนี้
# jupyter notebook --allow-root
ข้อสังเกตสำหรับ container 2 จะแสดงหมายเลขพอร์ตที่ต่างจาก container1 เช่น
http://localhost:8889/?token=c335933be78a80e5bac55f32f468a7ca7ca260f5782733b9
สรุป :
- การใช้พารามิเตอร์ --net=host ช่วยให้ container ทั้งหมดเลื่อนพอร์ตเดียวกันออกไป ในตัวอย่างนี้ jupyter ใช้พอร์ต 8888 ดังนั้น คอนเทนเนอร์ที่ 2 เมื่อใช้พอร์ตเดียวกับจะถูกเลื่อนออกไปเป็นพอร์ตที่ว่างและนำออกมาใช้งาน เช่น 8889 เป็นต้น
- นอกจากนั้น --net-host จะทำให้คอนเทนเนอร์สามารถเชื่อมต่อกับอินเตอร์เน็ตจากเครื่อง Host ได้อีกด้วย
ปัญหา Ubuntu ไม่พบ WebCam ของ MSI : GP 7RFX Leopard Pro
1. ตรวจสอบ video driver ด้วยคำสั่ง $ ls /dev/vi*
ผล : ไม่พบไฟล์ Webcam Driver เช่น /dev/video0 เป็นต้น
2. ให้กดที่แป้นพิมพ์ Fn + F6
ผล : จะพบไฟล์ /dev/video0 หมายถึงสามารถใช้ webcam ได้แล้วครับ
อัพเดท virtualbox
sudo apt-get remove --purge virtualbox*
sudo apt-get install --reinstall virtualbox-5.2 dkms
การติดตั้ง VMware ลงใน Ubuntu 16.04 มีปัญหา GUI ไม่แสดงผล !!
$ sudo nano /etc/crontab
ใส่บรรทัดล่างสุดด้วยคำสั่ง
@reboot root lightdm
Reboot
ปล. ปัญหานี้ ติดมาตั้งแต่ตี 3 .. ทดลองแก้หลายวิธีมาก ๆ.. และแก้ได้ตอน 07.34 น.
นับว่าเป็นปัญหาที่โหดมาก.. ครับ
แก้ปัญหาเมาส์ติดตรงขอบระหว่างจอ
การใช้งานหลายหน้าจอ พบว่าเมาส์จะมาติดตรงขอบระหว่างจอแม้ว่าจะเลื่อนออกไปได้ ทำให้ไม่สะดวก แก้ไขได้ด้วยการเลือกเช็ค sticky edges = off
การควบคุมคีย์บอร์ดของ MSI GP72MVR - 7RFX Leopard Pro Notebook ใน Ubuntu Linux
การควบคุมสีสรรค์บนคีย์บอร์ดในระบบลินุกซ์ ทำได้ดังนี้
1. ดาวน์โหลดไฟล์
http://launchpadlibrarian.net/256614084/msi-keyboard_1.1-2_amd64.deb
https://launchpad.net/ubuntu/zesty/amd64/msi-keyboard/1.1-2
2. ติดตั้ง libhidapi
$ sudo apt-get install libhidapi-libusb0
3. ติดตั้ง msi-keyboard
$ sudo dpkg -i msi-keyboard_1.1-2_amd64.deb
ปล. เนื่องจากโปรแกรม msi-keyboard สื่อสารกับคอมพิวเตอร์ผ่าน HID จึงต้องการไลบรารี่ libhidapi
การขอความช่วยเหลือจากชุดคำสั่ง ใช้คำสั่งต่อไปนี้
$ man msi-keyboard
ตัวอย่างการตั้งค่าสีใช้งาน :
$ msi-keyboard -m normal -c left,red,high -c middle,purple,high -c right,sky,high
>> สีที่ใช้งานได้ คือ off red orange yellow green sky blue purple white
ปล. การใช้งาน msi-keyboard เป็นแบบ Command Line Interface ครับ
การเปลี่ยนขนาดของ Cursor-Size ให้ใหญ่
1. เรียกคำสั่ง dconf-editor
$ dconf-editor
เลือกเข้าไปตามลำดับ org.gnome.desktop.interface cursor-size และเปลี่ยนขนาดตามต้องการ
2. การออกคำสั่งด้วยคอมมานไลน์ใช้คำสั่ง gsettings ดังนี้
$ gsettings set org.gnome.desktop.interface cursor-size 50
ปล. เมื่อ 50 คือขนาด cursor-size
เวลาเปลี่ยนขนาด mouse pointer แล้วแต่ไม่สามารถใช้กับแอพลิเคชั่นอื่น ๆ (จะมีขนาดลดลงเท่าเดิม) แก้โดย
$ sudo nano /etc/X11/Xresources/x11-common
เพิ่มคำสั่งต่อไปนี้ลงไป
Xcursor.size: 22
Xcursor.theme: DMZ-Black
$ sudo reboot
หากต้องการเปลี่ยนขนาด pointer ให้ใช้คำสั่ง
$ gsettings set org.gnome.desktop.interface cursor-size 50
ตอนนี้ทุกแอพลิเคชั่นจะมีขนาด mouse pointer ขนาด 50 px
การแสดงข้อความแจ้งเตือนในลินุกซ์ด้วย notify-send
หากต้องการแจ้งเตือนเมื่อมีเหตุการใด ๆ กำลังเกิดขึ้นหรือสิ้นสุดลงสามารถใช้ notify-send เพื่อแสดงรายละเอียดช่วยให้เกิดอินเตอร์แอคทีฟระหว่างโปรแกรมและผู้ใช้ได้ง่ายขึ้น !!
$ notify-send -i /home/learning/temp/ico/address_book.ico 'ประกาศ' "ในน้ำมีปลา.. ในนามีข้าว.. "
ปล. แสดงไอคอน address_book.ico โดยหัวเรื่องแสดงคำว่า "ประกาศ" และรายละเอียดคือ " ในน้ำมีปลา.. ในนามีข้าว.. "
นำผลลัพธ์จากคำสั่งลินุกซ์มาแสดงผลโดยใส่เครือ่งหมาย ` (single quote เอียง)
$ notify-send -i /home/learning/temp/ico/address_book.ico "`ls | head`"
ปล. ตัวอย่างนี้คือผลลัพธ์ของคำสั่ง ls | head มาแสดงในแผ่นป้ายแจ้งเตือน
การกำหนดการตั้งค่าสำหรับ notify ด้วย notifyosdconfig
$ wget http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu/pool/main/n/notifyosdconfig/notifyosdconfig_0.3+22+201404260950~ubuntu16.10_amd64.deb
sudo dpkg -i notify-osd_0.9.35+16.04.20160415-0ubuntu1-leolik~ppa0_amd64.deb && sudo apt -f install
>>> restart the Notify OSD agent
$ sudo pkill nitify-osd
$ wget http://ppa.launchpad.net/leolik/leolik/ubuntu/pool/main/n/notify-osd/notify-osd_0.9.35+16.04.20160415-0ubuntu1-leolik~ppa0_amd64.deb
$ notifyosdconfig
ตัวอย่างนี้แสดงแผ่นป้ายแสดงการแจ้งเตือนเป็นสีแดง ด้านล่าง ความกว้าง 480px
ค้นหาไฟล์และย้ายไปไว้ที่ไดเร็คทอรี่หนึ่ง ๆ บนลินุกซ์ !!
ตัวอย่างค้นหาไฟล์ *.png ทั้งหมดและย้ายไฟล์เหล่านั้นไปไว้ที่ /tmp/img
1. สร้างไดเร็คทอรี่ /tmp/img
$ mkdir /tmp/img
2. ค้นหาไฟล์ *.png ทั้งหมดและย้ายไปไว้ที่ /tmp/img
$ find -name "*.png" -print0 | xargs -0 -I {} mv {} /tmp/img
การค้นหา "คำ" และ "รูปแบบคำ" ภายในไฟล์จำนวนมาก และแสดงเฉพาะรายชื่อไฟล์ที่พบ
$ find -name "*.html" -print0 | xargs -0 grep -l 'คำค้น'
การจับข้อมูลที่วิ่งผ่านเน็ตเวอร์คการ์ด + สกัดให้เหลือ 86 แอตทริบิวส์ มาตรฐาน CICIDS2017
1. จับข้อมูลที่วิ่งผ่านเน็ตเวอร์คการ์ดด้วย tcpdump
$ sudo tcpdump -n -nn -N -s 0 -i eth0 -G 60 -w 'raw-pcap/%Y-%m-%d-%H:%M:%S.pcap'
เมื่อ
-n : do not attempt to lookup IP addresses into domain names
-nn : do not convert protocol and port numbers to names
-N : do not attempt to qualify host names
-s 0 : capture the entire packet
-i : the interface to use
-G :capture network traffic every N seconds
-w : write raw data into the file
2. สกัดข้อมูล pcap ให้เหลือ 86 แอตทริบิวส์ (วิธี CICIDS2017)
$ java -Djava.library.path=jnetpcap -jar CICFlowMeter.jar ./intest.pcap/ ./out
ปล. pcap เก็บไว้ในโฟลเดอร์ intest.pcap และผลลัพธ์เก็บไว้ในโฟลเดอร์ out
ปล. ดาวน์โหลด CICFlow ได้ที่ https://github.com/ISCX/CICFlowMeter
แก้ไขปัญหาจอภาพ mga driver ของ Cisco : C200 M2
ปกติแล้ว server ไม่ต้องใช้กราฟิกมาก เน้นการให้บริการด้านหลัง แต่ปัญหาคือ เมื่อต้องใช้กราฟิก กลับทำงานช้ามาก ดังนั้น หัวข้อนี้จะแก้ปัญหาดังกล่าว
จากการกูเกิ้ล พบว่าสามารถแก้ปัญหาได้ดังนี้
1. ลบ xserver-xorg-video-mgs ทิ้งไป ด้วยคำสั่ง
$ sudo apt-get remove xserver-xorg-video-mga
2. ให้ stop lightdm ด้วยคำสั่ง
$ sudo service lightdm stop
ปล. ตอนนี้จะไม่มีหน้าจอแสดงผลเลย แต่การทำงานที่เป็น service ด้านหลังยังใช้งานได้ปกติ
3. ให้ SSH เข้าไปใน Server และสร้าง xorg.conf ด้วยคำสั่งต่อไปนี้
$ sudo X -configure
ปล. คำสั่งด้านบนจะสร้างไฟล์ xorg.conf ไว้ในไดเร็คทอรี่ /root
4. ย้ายไฟล์ดังกล่าวไปไว้ที่ /etc/X11 ดังนี้
$ sudo mv /root/xorg.conf.net /etc/X11/xorg.conf
5. ทำการเปิดเซอร์วิส lightdm ด้วยคำสั่ง
$ sudo service lightdm start
6. ตอนนี้สามารถใช้งานจอภาพโดยไม่ติดปัญหาเรื่องอาการหน่วงแล้ว
ปล. แต่ทว่า.. มันจะใช้ความละเอียดได้เพียง 640x480 พิกเซลซึ่งก็น้อยมาก
แก้ปัญหาไม่สามารถติดตั้ง Teamviewer ในลินุกซ์
ปกติในแต่ละดีสโตร (รุ่น) ลินุกซ์ที่ใช้จะมีสายพันธ์ที่แตกต่างกันไป แต่สำหรับ Server ที่ใช้อยู่นี้.. ติดปัญหาไม่เหมือนชาวบ้าน
จึงทดลองกูเกิ้ล ก็พบว่าผู้ที่เคยติดปัญหาเดียวกันแนะนำให้ติดตั้ง gdebi ซึ่งเป็นการติดตั้ง dpkg ด้วยกราฟิก ให้ติดตั้งดังนี้
1. sudo apt-get install gdebi
ปล. ลินุกซ์ตัวนี้ดื้อมาก ไม่ติดตั้งให้ดี ๆ เกิด Error จึงต้องบังคับให้มันติดตั้งด้วยพารามิเตอร์ -f ดังนี้
$ sudo apt-get -f install
2. ตอนนี้ก็ติดตั้ง gdebi เสร็จแล้วด้วยอาการบังคับ ต่อไปให้ติดตั้ง teamviewer.deb ด้วยคำสั่งต่อไปนี้
$ sudo gdebi teamviewer_12.0.71510_i386.deb
ปล. อย่าลืมดาวน์โหลดไฟล์ .deb มาก่อนติดตั้ง
3. เสร็จเรียบร้อย ตอนนี้เรียกใช้ teamviewer ได้แล้ว
$ teamviewer
อืม.. หากต้องการตรวจสอบว่าเครื่องของเรามี ID อะไรใช้คำสั่งต่อไปนี้
$ teamviewer --info
การใช้งานโปรแกรมตัดต่อตัดแต่งเสียงด้วย audacity ในลินุกซ์
เครื่องมือในกลุ่มโอเพ่นซอร์สมีหลายตัว สำหรับวันนี้ลองใช้ audacity กันครับ
1. ติดตั้ง
$ sudo apt-get install audacity
2. เรียกใช้งาน
$ audacity
การรีโมทไปยังคอมพิวเตอร์ระยะไกลด้วย SSH และรันโปรแกรมที่แม่ข่ายแต่แสดงผล Graphic ที่เครื่องต้นทาง
ในบางทีจำเป็นต้องการเข้าไปจัดการแม่ข่ายด้วยภาพกราฟิก (มีฟอร์มและหน้าต่างวินโดวส์)
1. ใช้พารามิเตอร์ -X เช่น
$ ssh -X user1@202.xx.xx.xx
2. เรียกโปรแกรม เช่น
$ sudo gparted-pkexec
ปล. gparted เป็นโปรแกรมจัดการพาทิชั่นด้วยกราฟิก ใช้งานง่าย
ปล. วันนี้ได้ฮาร์ดดีสก์ 8TB มาใหม่และต้องการรีโมทเข้าไปจัดการครับ
การเปลี่ยน mac address
# sudo ifconfig eth0 down
# sudo ifconfig eth0 hw ether 00:32:4A:71:3C:BB
# sudo ifconfig eth0 up
# sudo ifconfig eth0 |grep HWaddr
WLAN0
# sudo ifconfig wlan0 down
# sudo ifconfig wlan0 hw ether 00:a1:3c:2f:8c:03:ca
# sudo ifconfig wlan0 up
# sudo ifconfig wlan0 | grep HWaddr
SINGLE COMMAND
ifconfig eth0 down hw ether 00:e0:4c:00:92:22
ifconfig eth0 up
ปล. การเปลี่ยนค่า mac ใช้คำสั่ง ifconfig
ตัวอย่างนี้ทดลองเปลี่ยน mac ของ docker0 เป็น 00:e0:4c:00:92:22
การเข้ารหัสตัวอักษรด้วย iconv
ใน php จะมีฟังก์ชั่น iconv สำหรับแปลงการเข้ารหัสตัวอักษร เช่น
$t = iconv("tis-620","utf8","สวัสดีชาวโลก");
ในลินุกซ์มีคำสั่ง iconv เช่นกัน สามารถแปลงการเข้ารหัสไฟล์ไปมาระหว่างมาตรฐานได้ เช่น
$ iconv -f tis620 -t utf8 tdict.txt > tdict2.txt
ตัวอย่างด้านบนเป็นการไฟล์ tdict.txt ซึ่งเข้ารหัสเป็น ANSI ภาษาไทย หรือ TIS-620 และต้องการแปลงเป็น UTF8
อัพเดท ipython3 และ python3.5
เนื่องจากต้องการอัพเดทซอฟต์แวร์ในดีสโตรที่สร้างขึ้นให้อัพเดทตามเวอร์ชั่นที่พัฒนาบน Host OS ลองผิดลองถูกหลายรอบเพราะ OS คนละเวอร์ชั่นคนละอันเลยปวดหัวหน่อย สุดท้ายสรุปได้ดังนี้ครับ
1. อัพเดท
$ sudo apt-get update
2. ติดตั้ง python3.5
$ sudo apt-get install python3.5
3. ติดตั้ง pip installer
$ sudo apt-get install python3-pip
4. ติดตั้ง ipython3
$ sudo apt-get install ipython3
5. ติดตั้ง notebook ให้กับ ipython3
$ sudo apt-get install ipython3-notebook
6. ติดตั้ง selenium
$ sudo pip3 install selenium==2.53.6
7. เรียกใช้งาน
$ ipython3 notebook
8. สร้างดีสโตรใหม่ออกมาเป็นไฟล์ iso สำหรับนำไปบูตใช้งานและติดตั้งกับคอมพิวเตอร์เครื่องอื่น ด้วย systemback
สรุป :
ตอนนี้นำสคริปต์ไปรันบนเครื่องไหนก็ได้แล้วครับ เพราะตัวระบบฝังอยู่ใน ISO ตัวเดียว เมื่อ Live ISO ถูกเรียกขึ้นมาทำงานพวกเขาจะส่งข้อมูลไปที่ server เพื่อบอกว่าพวกเขาคือหมายเลขอะไรเนื่องจากเลขไอดีพวกนี้สังเคราะห์ขึ้นใหม่ทุกครั้งที่บูตระบบ เมื่อแม่ข่ายรู้ไอดีแล้วสามารถที่จะเข้าถึงลูก ๆ เหล่านั้นจากระยะไกลได้เลยแม้ลูก ๆ จะไม่ได้เป็นไอพีแท้ครับ
การใช้งาน tmux
ปกติการจะเข้าไปสั่งคอมพิวเตอร์แม่ข่ายให้ทำงานจะใช้ ssh เพื่อรีโมทเข้าไปเรียกใช้คำสั่งต่าง ๆ แต่เมื่ออินเตอร์เน็ตหลุดหรือไม่สามารถเชื่อมต่อกับแม่ข่ายได้ โปรแกรมที่สั่งเอาไว้ก็จะยุติการทำงานไปด้วย ดังนั้น โปรแกรม tmux จะมาช่วยแก้ปัญหานี้ครับ
ปล. แม้จะมีคำสั่ง nohup แต่เทียบกับ tmux แล้วส่วนตัวพบว่า tmux ค่อนข้างสะดวกมากครับ
1. ที่แม่ข่าย ติดตั้งโปรแกรม tmux เอาไว้
$ sudo apt-get install tmux
2. เครื่องลูกข่าย รีโมทไปหาแม่ข่ายด้วย ssh
3. เครื่องลูกข่ายสร้างเซสชั่นขึ้นมาใหม่ เพื่อทำงานหนึ่ง ๆ เช่น crawler1 (บ็อตตัวที่ 1) ใช้คำสั่งดังนี้
$ tmux new-session -s crawler1
ปล. ตอนนี้เซสชั่น crawler1 ถูกสร้างแล้วจากกนั้น เรียกคำสั่งเพื่อเรียกให้ crawler1 เริ่มทำงาน
4. เมื่อต้องการออกจากเซสชั่น โดยให้โปรแกรม crawler1 ทำงานต่อไป ให้กดแป้น ctrl + b + d
ปล. กด ctrl ค้าง ตามด้วย b และ d
จากนั้นปิดโปรแกรม ssh ออกไปเลย (ยุติการสื่อสารกับแม่ข่าย)
5. เมื่อต้องการจะเข้าไปดูว่า crawler1 ยังทำงานดีอยู่มั้ย ให้ล็อกเข้าแม่ข่ายด้วย ssh
5.1 หากต้องการแสดงรายชื่อเซสชั่นมีอะไรบ้าง ใช้คำสั่ง
$ tmux list-sessions
ผลลัพธ์จะแสดงรายชื่อเซสชั่นทั้งหมดออกมา
5.2 การเชื่อมไปหาเซสชั่นที่ต้องการ ใช้คำสั่ง
$ tmux attach -t crawler1
ปล. crawler1 คือชื่อเซสชั่นที่เราสร้างขึ้นมาเพื่อรัน crawler1
6. ตอนนี้เราก็จะพบว่าโปรแกรมยังคงทำงาน แม้ว่าเราจะปิดการสื่อสารระหว่าง ssh กับแม่ข่ายไปแล้วด้วยโปรแกรม tmux
ปล. การ attach นั้นมีข้อดีคือ 1) ถ้าเราล็อกเข้าแม่ข่ายด้วย ssh จากหลายเครื่อง และเรียก tmux attach -t ชื่อเซสชั่น จะพบว่าหน้าจอการประมวลผลจะถูกส่งไปยังคอมพิวเตอร์ทุกเครื่องที่เชื่อมเข้ามายังเซสซั่น
7. หากต้องการลบเซสชั่น สามารถใช้คำสั่ง
$ tmux kill-session -t ชื่อเซสชั่น
ปล. ถ้าต้องการลบทุกเซสชั่นของ tmux ให้ฆ่าโปรเซสนี้ด้วยคำสั่ง pkill -f tmux
8. หากต้องการแยกหน้าจอแนวตั้งให้กดแป้น ctrl + b + %
9. หากต้องการแยกหน้าจอแนวนอนให้กดแป้น ctrl + b + "
10. หากต้องการย้ายไปยัง tmux ตัวถัดไป (กรณีเปิดเอาไว้หลายหน้า)
- อันถัดไป ให้กดแป้น ctrl + b + }
- อันที่ผ่านมา ให้กดแป้น ctrl + b + {
11. หากต้องการให้แสดงหมายเลขจอแสดงผลว่าแต่ละจอมีเลขอะไร ให้พิมพ์ ctrl + b + q
สรุป
tmux เป็นซอฟต์แวร์ที่ช่วยจัดการ remote server ได้อย่างดี นอกจากนั้นยังจัดการแม่ข่ายหลายครื่องพร้อมกันด้วยการทำ synchronize (ส่งคำสั่งไปยังแม่ข่ายพร้อม ๆ กันหลาย ๆ เครื่องด้วยคำสั่งเดียวกัน) เป็นต้น
การค้นด้วยคำสั่ง find
ต้องการค้นหาไฟล์ที่มีขนาดน้อยกว่า 2 ไบต์และลบทิ้ง
$ find -name "*" -size -2c -exec rm {} \;
เมื่อ c คือไบต์, w คือ 2bytes, k = kilo(1024bytes) M=megabytes G=Gigabytes
เครื่องหมาย - หน้า 2c คือ ขนาดไฟล์ที่น้อยกว่า 2 ไบต์
ถ้าใช้ +2c คือ ไฟล์ที่มีขนาดมากกว่า 2 ไบต์
ถ้า -size 0 คือ ขนาดไฟล์ที่เท่ากับ 0 ไบต์
- พารามิเตอร์ -exec คือ ผลลัพธ์ที่ได้มาให้เอาไปเรียกคำสั่งด้านหลังให้เอ็กซีคิวส์ ปล. คำสั่งด้านหลังในตัวอย่างนี้คือคำสั่ง rm คือการลบไฟล์
การค้นหาไดเร็คทอรี่เปล่าที่ไม่มีไฟล์ในนั้น ใช้คำสั่ง
$ find . -type d -empty
การลบไดเร็คทอรี่ว่างเปล่าที่ไม่มีไฟล์ในนั้นทิ้งไป ใช้คำสั่ง
$ find -type d -empty -exec rm -rf {} \n
เมื่อ -exec คือการเอ็กซีคิวส์คำสั่งที่อยู่ด้านหลัง คือคำสั่ง rm -rf
{} คือ เซ็ตของผลลัพธ์ของคำสั่ง find
การค้นหาและเปลี่ยนนามสกุล ในตัวอย่างนี้เปลี่ยนไฟล์ apk เป็น zip
1. ใช้คำสั่ง find
$ find -name "*.apk" -exec rename 's/.apk$/.zip/' {} \;
เป็นการค้นหาไฟล์ .apk และเปลี่ยนเป็น .zip
ปล. วิธีนี้หากยุติการทำงานกลางคัน จะทำให้ไฟล์ .apk ยังคงเหลือ คือ จะเกิดขยะเพราะมันไม่ถูกลบจนกว่าจะจะบการทำงาน ดังนั้น วิธีนี้ยังไม่ประทับใจครับ
2. ใช้คำสั่ง find ร่วมกับ while ดังนี้
$ find -type f -name "*.zip" | while read f; do mv -v "$f" "${f%.*}.zip"; done
วิธีนี้นำผลลัพธ์ทีได้จากคำสั่ง find ส่งต่อ (pipe) ไปให้คำสั่ง while โดยจะทำการอ่านตัวแปร f โดยใช้คำสั่ง mv -v คือเปลี่ยนชื่อ $f (ค่าที่ป้อนเข้ามา) และเปลี่ยนเป็น .zip ด้วยรูปแบบ "${f%.*}.zip"
ปล. ส่วนตัวแล้ววิธีที่ 2 เป็นวิธีที่น่าสนใจครับ
VSCode (Visual Studio Code)
ในปัจจุบันนี้มี IDE (Integrated Development Environment) อยู่หลายตัว อาทิ ATOM, Sublime, Blue-Fish, Netbeans, Ipython และอื่น ๆ วันนี้มาลองใช้ VSCode จากค่ายไมโครซอฟต์ กัน ซอฟต์แวร์นี้พัฒนาโดยไมโครซอฟต์และเป็นโอเพ่นซอร์ส โปรแกรมขนาดเล็ก ทำงานบนระบบวินโดวส์, แม็ค, ลินุกซ์
ปล. ซอร์สโค๊ดของ VSCode เก็บไว้ที่ https://github.com/Microsoft/vscode
1. ดาวน์โหลดโปรแกรมที่ https://code.visualstudio.com/download
2. ระบบ linux ติดตั้งด้วย dpkg
$ dpkg -i code_1.27.2-1536736588_amd64.deb
3. เรียกใช้ผ่าน terminal ด้วยคำสั่ง $ code
สรุป
อย่างไรก็ดีแม้จะมี VSCode แต่ IDE ที่ผมยังคงใช้เป็นประจำมักจะเป็น IPython Notebook ครับ
การเมาท์พื้นที่เก็บข้อมูลจากกูเกิ้ลแอคเค้าของเรา กับโลคอลไดรว์ในระบบปฏิบัติการ ubuntu
1. ติดตั้ง gnome-control-center และ gnome-online-accounts
$ sudo apt-get install gnome-control-center gnome-online-accounts
2. เข้าไปที่ control panel -> setting -> personal เลือกไอคอน online accounts
3. เลือกกูเกิ้ล และป้อน account / password
4. เปิด file manager -> เลือกคลิ๊กที่ account (ด้านซ้าย)
ศึกษาเพิ่มเติม : https://www.maketecheasier.com/mount-google-drive-ubuntu.../
การสร้าง Guest OS โดยที่ใช้ Image ที่ซ้ำกันจะพบปัญหา "cannot register the hard disk with uuid already exists" เนื่องจากเลข id ของ Harddisk มันซ้ำกัน แก้ไขดังนี้
$ VBoxManage internalcommands sethduuid ./ชื่ออิมเมจ.vdi
การอ่านเขียน VDI (Virtual Disk Image) ของ VirtualBox
โปรแกรม VirtualBox เป็นเทคโนโลยีคอมพิวเตอร์เสมือน (virtualization) ซึ่งเป็นการจำลองชุดคำสั่ง (Instruction Sets) ของหน่วยประมวลผลกลาง ตลอดจนอุปกรณ์ฮาร์ดแวร์ต่าง ๆ และเชื่อมเข้าด้วยกันโดยอาศัยเพียงซอฟต์แวร์เท่านั้น
ระบบไฟล์ของ VirtualBox จะเป็นไฟล์ก้อนเดียว ที่เก็บระบบปฏิบัติการเอาไว้ภายในและมีคุณสมบัติที่น่าสนใจคือ Dynamic Allocated กล่าวคือ เมื่อกำหนดขนาดของฮาร์ดดีสก์แล้วจะไม่สร้างพื้นที่จริงลงบนโฮสคอมพิวเตอร์แต่จะเพิ่มขนาดตามที่ใช้จริง
ปัญหาคือความต้องการในการเข้าถึงไฟล์ VDI นั้นโดยปกติต้องเปิดผ่าน VirtualBox แต่ในหัวข้อนี้ต้องการเปิดผ่าน Linux เพื่ออ่านและเขียนไฟล์ลงใน VDI มีสาระสำคัญดังต่อไปนี้
เครื่องมือ
1. โปรแกรม qemu-kvm
การดำเนินการ
1. ติดตั้ง qemu-kvm
$ sudo apt-get install qemu-kvm
2. โหลดโมดูล nbd ลงในเคอร์เนลและพาทิชันสูงสุด 16 พาทิชั่น
$ sudo modprobe nbd max_part=16
ปล. การลบโมดูล nbd จากเคอร์เนลให้คำสั่ง sudo rmmod nbd
3. เชื่อมโยงอุปกรณ์ /dev/nbd0 กับไฟล์ VDI
$ sudo qemu-nbd -c /dev/nbd0 xp.vdi
4. แสดงพาทิชั่น
$ sudo partprobe
5. แสดงรายการพาทิชั่นในฮาร์ดดีสก์
$ ls -l /dev/nbd0*
6. ตรวจสอบขนาดของพาทิชั่นในไฟล์ VDI
$ sudo fdisk /dev/nbd0
7. การเชื่อมต่อฮาร์ดดีสก์ด้วยคำสั่ง mount
$ sudo mount -t ntfs -rw /dev/nbd0p1
สรุปขั้นตอน
sudo apt-get install qemu-kvm
sudo modprobe nbd max_part=16
sudo qemu-nbd -c /dev/nbd0 win2003-2015.vdi
sudo partprobe
sudo mount -t ntfs -rw /dev/nbd0p1
sudo mkdir /mnt/vdi
sudo mount /dev/nbd0p1 /mnt/vdi/
สรุป
การเชื่อมต่อฮาร์ดดีสก์เสมือน (VDI) เพื่อเข้าถึงไฟล์ต่าง ๆ นั้น.. อนุญาตให้ไม่เพียงแค่อ่านไฟล์ แต่ยังสามารถเขียนไฟล์ลงในดีสก์ได้อีกด้วย
การแก้ไขเลขไอดีฮาร์ดดีสก์ซ้ำกันใน Virtualbox
กล่าวนำ
การสร้าง Guest OS โดยที่ใช้ Image ที่ซ้ำกันจะพบปัญหา "cannot register the hard disk with uuid already exists" เนื่องจากเลข id ของ Harddisk มันซ้ำกัน แก้ไขดังนี้
วิธีดำเนินการ
$ VBoxManage internalcommands sethduuid ./ชื่ออิมเมจ.vdi
สรุป
ใช้งานได้แล้วครับ !!
การทำให้ wireless ที่อยู่ในคอมพิวเตอร์ของเรากลายเป็น Hotspot
1. ให้ยกเลิก WIFI โดยยกเลิกการเช็ค Enable Wifi
2. เลือกไปที่ Edit Connection...
3. เลือก "Add"
4. เลือก "WIFI" จากนั้นเลือก "Create"
5. ตั้งชื่อ hotspot ที่ต้องการ ในตัวอย่างนี้ใส่คำว่า "MSI" (เครื่องโน๊ตบุ๊คยี่ห้อ MSI)
6. เลือกเน็ตเวอร์คอินเตอร์เฟส เช่น wlan0
7. เลือกแท็ป security จากนั้นเลือก "WPA & WPA2 personal" และกำหนดรหัสผ่านของ hotspot ที่จะสร้าง
8. ไปยังแท็ป IPv4 จากนั้นเลือก Shared to other computers
9. กดปุ่ม save และปิด
11. เปิดเทอร์มินัล (Ctrl + Alt + t) จากนั้นพิมพ์คำสั่ง
$ sudo gedit /etc/NetworkManager/system-connections/[ชื่อฮ็อตสป็อตที่เราสร้างในตัวอย่างนี้คือ MSI]
แก้ไขคำว่า mode=infrastructure เปลี่ยนเป็น mode=ap
12. คลิ๊กเลือก Enable WIFI
ตอนนี้คอมพิวเตอร์โน๊ตบุ๊คจะกลายเป็น Hotspot และอนุญาตให้อุปกรณ์ต่าง ๆ เชื่อมต่อมายังคอมพิวเตอร์ผ่านเครื่อข่ายไร้สายได้เรียบร้อยแล้วครับ :) (y)
ทดสอบใช้มือถือเชื่อมต่อ WIFI โดยเลือก SSID ที่ชื่อว่า MSI ตอนนี้สามารถเชื่อมต่อกันได้แล้วครับ เย้ :)
โปรแกรม kazam สำหรับบันทึกวีดิโอภาพนิ่งบนหน้าจอคอมพิวเตอร์ทำงานในลินุกซ์
โปรแกรม Kazam ใช้สำหรับการบันทึกภาพนิ่งและภาพเคลื่อนไหวบนหน้าจอคอมพิวเตอร์ ใช้งานได้ฟรีไม่มีค่าใช้จ่าย
การติดตั้ง
$ sudo apt-get install kazam
คีย์ลัดประกอบด้วย
SUPER-CTRL-Q - Quit
SUPER-CTRL-W - Show/Hide main window
SUPER-CTRL-R - Start Recording
SUPER-CTRL-F - Finish Recording
การติดตั้งไดรว์เวอร์เครื่องพิมพ์ Brother HL-1110
1. ดาวน์โหลดไดรว์เวอร์ที่ลิงค์ต่อไปนี้
https://support.brother.com/g/b/downloadend.aspx?c=eu_ot&lang=en&prod=hl1110_us_eu_as&os=128&dlid=dlf006893_000&flang=4&type3=625&dlang=true
2. เข้าเป็น root และรันโปรแกรมดังนี้
$ sudo su
# bash linux-brprinter-installer-2.2.1-1 HL-1110
3. You are going to install following packages.
hl1110lpr-3.0.1-1.i386.deb
hl1110cupswrapper-3.0.1-1.i386.deb
OK? [y/N] ->y
หมาายเหตุ :
หลังจากเปิดเครื่อง กดปุ่ม power 3 ครั้งจะเป็นการพิมพ์ทดสอบ
- กด 7 ครั้งเปลียนจาก replace toner : Stop เป็น Continue (เมื่อกดแล้วให้รีสตาร์ท โดยกดแช่ไว้จนปิดเครื่องและกดอีก 1 ครั้งเพื่อเปิดเครื่อง)
การติดตั้ง RTL8811CU
ดาวน์โหลดซอร์สโค๊ดของ obda:c811 (RTL8811CU)
$ git clone https://github.com/whitebatman2/rtl8821CU.git
cd rtl8821CU
make
sudo make install
sudo modprobe 8821cu
ตอนนี้มี network interface เพิ่มอีกอันหนึ่งแล้ว ชื่อ wlx243c201fc1d6 Link encap:Ethernet HWaddr 24:3c:20:1f:c1:d6
การสร้าง UEFI Boot
1. โปรแกรม gparted ฟอร์แมต USB เป็น FAT32 (NTFS ไม่สามารถบูตได้)
2. เมาท์ USB
3. เมาท์ ISO
4. คัดลอกไฟล์จาก ISO ที่เมาท์แล้วทั้งหมดไปใส่ USB
5. ใน gparted ให้เลือก usb drive -> manage flags -> เลือก boot option
6. รีสตาร์ท
ปล. บูตด้วยโหมด UEFI (ตั้งค่าใน bios)
ถ้าใช้ไม่ได้ให้ใช้โปรแกรม winusb (ubuntu)
http://www.webupd8.org/2016/06/make-bootable-windows-10-usb-install.html
ถ้ายังไม่ได้อีกให้ใช้โปรแกรม WoeUSB (ฟอร์แมต usb ด้วย ntfs)
โปรแกรม WoeUSB นี่เพี้ยน (มีบั๊ก) คือ การ unmount ด้วย filemanager จะไม่สามารถเขียน ISO ลง USB ได้ (เพี้ยนมาก ๆ) ต้องแก้ไขด้วย
$ sudo umount /media/[your usb path]
$ sudo woeusb --target-filesystem NTFS --device Win10_1809Oct_English_x64.iso /dev/sda
การลบโปรแกรมที่กำลังใช้งานพอร์ต
1. ตรวจสอบว่าโพรเซสใดใช้พอร์ตด้วยคำสั่ง
$ sudo fuser -k 8083/tcp
ปล. ตัวอย่างด้านบนต้องการตรวจสอบพอร์ต 8083
2. ผลลัพธ์ที่ได้จะเป็นหมายเลข Process ID จากนั้นใช้คำสั่ง kill เพื่อลบโพรเซสนั้นทิ้งไป เช่น
8083/tcp: 26247
$ sudo kill 26247
การใช้งาน Termux
Termux เป็นโปรแกรมที่พอร์ตคำสั่งลินุกซ์ไปทำงานในระบบปฏิบัติการแอนดรอย์ด ทำให้มีความสะดวกในการรันโปรแกรมต่าง ๆ ของลินุกซ์ในมือถือ
การติดตั้ง termux
ให้ใช้มือถือแอนดรอย์ดเข้าไปยัง play store จากนั้นค้นด้วยคำว่า termux และติดตั้ง
การติดตั้งโปรแกรมลินุกซ์ภายใน termux
1. ใช้คำสั่ง pkg install ชื่อโปรแกรม เช่น pkg install htop
2. ใช้คำสั่ง apt-get install ชื่อโปรแกรม เช่น apt-get install htop
3. ใช้คำสั่ง apt install ชื่อโปรแกรม เช่น apt install htop
การตรวจสอบประวัติล็อกอินเข้าระบบด้วยคำสั่ง last
$ last
learning pts/19 10.160.74.158 Wed Nov 13 04:50 still logged in
learning pts/19 10.35.8.38 Mon Nov 11 18:43 - 18:44 (00:00)
learning pts/24 tmux(9290).%3 Sat Nov 9 00:00 - 01:13 (01:13)
learning pts/23 tmux(9290).%2 Fri Nov 8 23:59 still logged in
learning pts/22 tmux(9290).%1 Fri Nov 8 23:58 still logged in
learning pts/21 223.24.150.178 Fri Nov 8 23:58 - 01:20 (01:21)
learning pts/20 tmux(9290).%0 Fri Nov 8 23:57 still logged in
learning pts/19 10.160.74.158 Fri Nov 8 23:38 - 00:14 (00:36)
learning pts/19 223.24.184.118 Fri Nov 8 17:56 - 18:06 (00:10)
learning tty7 :0 Fri Nov 8 15:26 gone - no logout
reboot system boot 4.15.0-66-generi Fri Nov 8 15:25 still running
learning pts/8 10.160.74.158 Fri Nov 8 00:48 - 03:00 (02:12)
learning pts/9 10.160.74.158 Fri Nov 8 00:47 - 00:48 (00:00)
learning pts/8 10.160.74.158 Fri Nov 8 00:45 - 00:47 (00:02)
learning pts/9 10.160.74.158 Thu Nov 7 12:52 - 15:10 (02:18)
learning pts/9 10.160.74.158 Thu Nov 7 12:51 - 12:52 (00:00)
learning pts/8 10.160.74.158 Thu Nov 7 12:51 - 12:52 (00:01)
learning pts/18 202.28.34.208 Thu Nov 7 11:54 - 11:55 (00:00)
learning pts/18 202.28.34.208 Thu Nov 7 11:54 - 11:54 (00:00)
learning tty7 :0 Thu Nov 7 11:42 - 11:56 (00:14)
reboot system boot 4.15.0-50-generi Thu Nov 7 11:42 still running
learning tty7 :0 Thu Nov 7 11:38 - down (00:03)
reboot system boot 4.15.0-50-generi Thu Nov 7 11:38 - 11:42 (00:03)
wtmp begins Thu Nov 7 11:38:19 2019
การสำรองระบบด้วย RSync
$ sudo su
$ mkdir /backup
$ sudo rsync -aAXv / --exclude=/home/Systemback/* --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/run/* --exclude=/mnt/* --exclude=/media/* --exclude="swapfile" --exclude="lost+found" --exclude=".cache" --exclude="Downloads" --exclude=".VirtualBoxVMs"--exclude=".ecryptfs" --exclude="/8TB/*" --exclude="/backup/*" /backup
การติดตั้งใช้งาน WIFI AC 2.4Ghz/5.Ghz
$ sudo apt update
$ sudo apt install build-essential git dkms
$ get clone https://github.com/brektrou/rtl8821CU.git
$ cd rtl8821CU
$ chmod +x dkms-install.sh
$ sudo ./dkms-install.sh
$ sudo modprobe 8821cu
การสืบค้นด้วย Grep sort และ uniq
$ cat test.html | grep -o "[0-9]*.rar" | sort | uniq
» "[0-9]*.rar" คือ การค้นหาไฟล์ที่ตั้งชื่อด้วยตัวเลข
» sort คือ การเรียงลำดับผลลัพธ์จาก a ไป z
» uniq คือ การตัดผลลัพธ์ที่ซ้ำกันออกไป
การตรวจสอบเกตเวย์ด้วยคำสั่ง route
$ route -n
การตรวจสอบการใช้งาน port
$ netstat -tulnp | grep 3000
การลบพอร์ต
$ sudo kill -9 $(sudo lsof -t -i:80)
$ sudo kill -9 $(lsof -t -i :80,443)
หรือ
$ sudo fuser -n tcp -k 80
คำสั่ง blkid สำหรับการตรวจสอบหมายเลข ID ของ Harddisk
$ sudo blkid
ผลลัพธ์ :
/dev/sda1: UUID="70823386-2014-4c8f-85db-1f08b1f3a262" TYPE="ext4"
/dev/sda5: UUID="b96e74b5-f98d-441e-9bdc-2ca43466fac2" TYPE="swap"
/dev/sdb1: LABEL="sdc" UUID="13acfc38-9166-4056-be79-eb4fc21999e8" TYPE="ext4"
/dev/sdc1: LABEL="sdd" UUID="69b62012-adc7-41fa-8691-7ed01c65dd3a" TYPE="ext4"
/dev/sdc2: UUID="0fd24e1f-8d3a-404f-be37-256ba8e29c37" TYPE="ext4"
/dev/sdd1: UUID="85e51074-2722-4b89-a497-94c1c1123c65" TYPE="ext4"
การ uninstall : MySQL
sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
วิธีการที่สั้นกว่าทำได้ ดังนี้
sudo apt-get remove --purge mysql*
sudo apt-get autoremove
sudo apt-get autoclean
การ uninstall : Vesta Control panel
service vesta stop
apt-get remove vesta*
rm -f /etc/apt/sources.list.d/vesta.list
rm -rf /usr/local/vesta
การบังคับให้ umount
ในบางครั้งการ umount ไม่สามารถทำได้เพราะ device busy วิธีการบังคับ ทำได้ดังนี้
sudo fuser -cuk /home/dsdi/web/dsdi.msu.ac.th/public_html/data
sudo umount /home/dsdi/web/dsdi.msu.ac.th/public_html/data
การคัดลอกไฟล์และคงความเป็นเจ้าของไฟล์
sudo cp -rp /home/data /media/backup
ปล. -p คือ --preserve=mode, downership, timestamps
การสร้างไฟล์ ISO
การสร้าง ISO จากพาร์ท
$ sudo mkisofs –o backup.iso /home/tin/Documents/backup
ปล. คำสั่ง mkisofs จะเปลี่ยนชื่อไฟล์ตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ ซึ่งเปลี่ยนแปลงข้อมูลควรใช้ด้วยความระมัดระวัง
การสร้าง ISO จาก partition
$ sudo dd if= /dev/sdb of= diskimage.iso
การติดตั้งและใช้งาน 7z
7z เป็นการบีบอัดไฟล์แบบใหม่ สามารถคลายไฟล์ iso ได้ ดังนี้
sudo apt-get install p7zip-full
7z x backup.iso
การใช้ Tesseract และภาษาไทย
$ tesseract test.png test.txt -l tha
การตรวจสอบ gateway
$ netstat -r -n
ปล. ให้ตรวจสอบจากบรรทัด 0.0.0.0 จะพบหมายเลข IP ของ Gateway
$ netstat -r -n
ปล. ให้ตรวจสอบจากบรรทัด 0.0.0.0 จะพบหมายเลข IP ของ Gateway
$ route -n
ปล. ให้ตรวจสอบที่แถว Destination ที่เป็น 0.0.0.0 ในคอลัมน์ gateway
Raspberry Pi
การใช้กล้อง
1. $ sudo raspi-config
2. เลือก Interfacing Options
3. เลือก Camera -> กด Yes เพื่อเปิดใช้งานกล้อง
การควบคุมกล้องด้วย python ให้ติดตั้ง picamera ดังนี้
$ sudo apt-get install python-picamera
» การถ่ายภาพใช้คำสั่ง ต่อไปนี้
$ raspistill -o test1.jpg
$ raspistill -t 10000 -o pic1.jpg # ถ่ายภาพหลังจาก 10 วินาที
$ raspistill -p -o # แสดง preview อย่างเดียวไม่บันทึกภาพ
$ raspistill -vf -o test.jpg # ถ่ายภาพกลับแนวตั้ง
$ raspistill -vf -o test.jpg # ถ่ายภาพกลับแนวนอน
$ raspistill -vf -vh -o pic2.jpg # ถ่ายภาพกลับแนวตั้งและแนวนอน
$ raspistill -o test.jpg -w 640 -h 480 # ถ่ายภาพกำหนดความละเอียดภาพ
$ raspistill -o test.png -e png # เข้ารหัสภาพนามสกุล png
» การถ่ายวีดีโอใช้คำสั่ง ต่อไปนี้
$ raspivid -o test1.h264
$ raspivid -o test2.h264 -t 10000 # บันทึก 10 วินาที
การแปลงไฟล์เป็น .MP4
1. sudo apt-get install -y gpac
2) บันทึก แปลง และลบไฟล์
raspivid -t 30000 -w 640 -h 480 -fps 25 -b 1200000 -p 0,0,640,480 -o pivideo.h264
MP4Box -add pivideo.h264 pivideo.mp4
rm pivideo.h264
from picamera import PiCamera
import time
c = piCamera()
c.resolution = (640,480)
c.vflip = True
c.start_preview()
time.sleep(2)
c.start_recording("test.h264")
time.sleep(5)
c.stop_recording()
# การตั้งค่าเชื่อมต่อ wifi อัตโนมัติตอนเครื่องเปิดขึ้นมาทำงาน
pi@raspberrypi:/etc/network $ cat interfaces
source-directory /etc/network/interfaces.d
#auto low
#iface lo inet loopback
#iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
# ไฟล์ wpa_supplicant ดังนี้
pi@raspberrypi:/etc/wpa_supplicant $ cat wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=TH
network={
ssid="ssid"
psk="password"
key_mgmt=WPA-PSK
}
VestaCP
การตรวจสอบว่า additional ftp ถูกสร้างมั้ยได้ที่ไฟล์ /etc/passwd
การคัดลอกไฟล์ไปยัง Server ด้วย scp
scp -r /home/a/ username@domainname:/home/b/
การ mount ไฟล์ .img
sudo fdisk -l imgfile.img
ผลลัพธ์
imgfile.img1 * 63 266544 722233 C W95 FAT32
imgfile.img2 25679 25367890 245667890+ 83 Linux
sudo su
mkdir /mnt/disk1 /mnt/disk
mount -t vfat -o loop,offset=$((63 * 512)) imgfile.img /mnt/disk
mount -t ext4 -o loop,offset=$((25679 * 512)) imgfile.img /mnt/disk1
การขยายไฟล์ tar, tar.gz และ .bz2
$ tar -xvf ชื่อไฟล์.tar
$ tar -xvzf ชื่อไฟล์.tar.gz
$ tar -xvjf ชื่อไฟล์.tar.bz2
-x คือขยายไฟล์ eXract
-v คือแสดงรายชื่อไฟล์ขณะขยาย Verbose
-f คือ ระบุชื่อไฟล์ tarball
-z คือ ขยายไฟล์ที่สร้างด้วย gzip นามสกุล .tar.gz
-j คือ ขยายไฟล์ที่สร้างด้วย bzip2 นามสกุล tar.bz2
ขยายแค่ไฟล์เดียวออกมา
$ tar -xvf foo.tar พาร์ท/bar.txt
$ tar -xzvf foo.tar.gz พาร์ท/bar.txt
$ tar -xjvf foo.tar.bz2 พาร์ท/bar.txt
ขยายเฉพาะไดเร็คทอรี่ออกมา
$ tar -xvf foo.tar ไดเร็คทอรี่/images
$ tar -xzvf foo.tar.gz ไดเร็คทอรี่/images
$ tar -xjvf foo.tar.bz2 ไดเร็คทอรี่/images
การคัดลอกแบบเร็ว
- tar คัดลอกได้เร็วกว่า cp เพราะ cp จะเปิด อ่าน เปิด เขียน ปิด ทีละไฟล์ ส่วน tar จะใช้ multiple threads เพื่ออ่านและเขียนไฟล์ทำได้หลายหลายพร้อมกัน
- เข้าไปในไดเร็คทอรี่ที่ต้องการคัดลอก จากนั้นเรียกคำสั่งต่อไปนี้
tar cf - . | pv | (cd /output/directory && tar xvf -)
ปล. output/directory คือ ปลายทางที่ต้องการคัดลอกไฟล์
แปลงตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่
$ tr a-z A-Z < ./ebooks.txt > EBOOKS.TXT
การตรวจสอบหน่วยความจำหลักและรุ่นของแรม
sudo lshw -short -C memory
ผลลัพธ์:
H/W path Device Class Description
========================================================
/0/0 memory 64KiB BIOS
/0/40 memory 8GiB System Memory
/0/40/0 memory [empty]
/0/40/1 memory 4GiB DIMM DDR4 Synchronous 2400 MHz
/0/40/2 memory [empty]
/0/40/3 memory 4GiB DIMM DDR4 Synchronous 2400 MHz
/0/46 memory 256KiB L1 cache
/0/47 memory 1MiB L2 cache
/0/48 memory 6MiB L3 cache
/0/100/1f.2 memory Memory controller
การตั้งไอพีวิธีเก่าใน ubuntu 20.04
» สร้างไฟล์ เช่น setip.sh กำหนดสิทธิ์เป็น execute ด้วยคำสั่ง chmod +x setip.sh มีเนื้อไฟล์ดังนี้
ifconfig enp4s0 up
ifconfig enp4s0 202.28.34.204 broadcast 202.28.34.255 netmask 255.255.255.0
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
route add default gw 202.28.34.222 enp4s0
» ให้เพิ่ม setip.sh ลงในลงใน /etc/rc.local เพื่อทำงานตอนเริ่มต้นบูต
» เช่น /root/setip.sh
การยุติโปรแกรม tracker-miner-fs
» โปรแกรม tracker miner/extract/store จะทำงานอยู่เบื้องหลังโดยใช้ CPU 100% การยุติโปรแกรมทำได้หลายวิธี หนึ่งในนั้นคือเปลี่ยนโหมดไฟล์ให้ไม่สามารถ execute ได้
sudo chmod -x /usr/libexec/tracker-miner-fs
sudo chmod -x /usr/libexec/tracker-extract
sudo chmod -x /usr/libexec/tracker-store
การควบคุม IO บน Raspbery Pi
sudo gpio -g mode 17 out
sudo gpio -g write 17 1
ปล. หลอดไฟจะติดที่ gpio 17
for i in {1..12}; do gpio -g write 17 1; sleep 0.7; gpio -g write 17 0; sleep 0.2; done
ปล. วน 12 รอบ ในแต่ละรอบเปิดปิด gpio 17 เป็น 1 และ 0 พร้อมหน่วงเวลาตามกำหนด
การติดตั้ง ifconfig ใช้ตรวจหมายเลขไอพีของเครื่อง
» apt-get install net-tools -y
การตรวจสอบจำนวนไฟล์ในแต่ละไดเร็คทอรี่
$ find . -maxdepth 2 -mindepth 2 -type f -printf "%h\0" | uniq -zc | tr '\0' '\n'
การแสดงสถานะ nvidia-smi ตลอดเวลาด้วยคำสั่ง watch
$ watch -n0.1 nvidia-smi
การแก้ปัญหา mount ntfs แล้วไม่สามารถแก้ไขหรือลบได้
1. ตรวจสอบ disk ด้วย $ sudo blkid
2. การ umount ด้วยคำสั่ง $ sudo umount /ไดเร็คทอรี่ที่ mount
3. การแก้ปัญหาแก้ไข ntfs ไม่ได้ ใช้คำสั่ง $ sudo ntfsfix /ไดเร็คทอรี่ mount
การตรวจสอบความเร็ว HDD/SSD/M.2 ด้วยคำสั่ง fio
$ sudo apt-get install fio
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_write.fio --bs=4k --iodepth=64 --size=250M --readwrite=randrw --rwmixread=80
การแปลงไฟล์ PNG เป็น Base64
$ cat img.png | base64 > output.txt
การติดตั้ง pytorch gpu สำหรับ windows และ linux
1. ติดตั้ง cudatoolkit
2. ติดตั้ง cudnn
3. ติดตั้ง miniconda
4. สร้าง environment ด้วย conda create --name=ตั้งชื่อ python=3.8
5. activate ด้วยคำสั่ง activate ชื่อที่ตั้ง
6. ติดตั้ง pip install torch torchvision torchaudio
7. ติดตั้ง conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
# กรณีมีปัญหา socket เรียกคำสั่งด้วยสิทธิ์ admin -> "netsh winsock reset"
# กรณีมีปัญหาเรื่อง kernel ให้ติดตั้ง pip install ipykernel
# เพิ่มเคอร์เนลใหม่ด้วย python -m ipykernel install --user --name=ชื่อที่ตั้ง --display-name "pytorch-gpu"
การสร้าง RAM Disk
sudo mount -t tmpfs -o size=512M,mode=777 tmpfs ram/
เขียนแม่สูตรคูณบน Bash Shell
$ x=9 ; for i in {1..12} ; do echo "$x x $i = $(($i*$x))" ; done
ผลลัพธ์
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
9 x 10 = 90
9 x 11 = 99
9 x 12 = 108
การสร้างไฟล์ ISO
1. ติดตั้งตั้งโปรแกรม genisoimage
$ sudo apt-get install genisoimage
2. เรียกใช้งาน เช่นต้องการบีบอัดโฟลเดอร์ Rainbow5/* ทำได้ดังนี้
$ cd "รูทไดเร็คทอรี่ของไฟล์เป้าหมาย"
3. เรียกใช้งาน
$ genisoimage -o RainBow.iso Rainbow5/*
การ mount ไฟล์ tgz
1. ติดตั้ง archivemount
$ sudo apt-get install archivemount
2. บีบอัดไฟล์ในไดเร็คทอรี่ amazonas_music ซึ่งมี 4 ไฟล์ (mp3)
$ cd /media/1TB/Mp3/
$ tar cvfz amazon.tgz amazonas_music
ปล. amazonas_music คือโฟลเดอร์เพลง
3. ทำการ archivemount
$ sudo mkdir /mnt/mp3
$ sudo archivemount /media/1TB/Mp3/amazon.tgz /mnt/mp3
ปล. ตอนนี้ mount ไฟล์ amazon.tgz เข้ากับไดเร็คทอรี่ /mnt/mp3 แล้ว
4. ติดตั้งโปรแกรม mpg123 สำหรับเล่น Mp3 ผ่าน Command Line
$ sudo apt-get install mpg123
5. เล่นเพลง
$ sudo mpg123 /mnt/mp3/2.mp3
ผลลัพธ์แสดงดังนี้
mpg123 3.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
version 1.12.1; written and copyright by Michael Hipp and others
free software (LGPL/GPL) without any warranty but with best wishes
Playing MPEG stream 1 of 1: 3.mp3 ...
MPEG 1.0 layer III, 160 kbit/s, 44100 Hz joint-stereo
การรัน .net framework บนลินุกซ์ด้วย mono
» ฝั่งลินุกซ์
- ติดตั้ง mono ด้วยคำสั่ง sudo apt-get install mono-vbnc
» ฝั่งวินโดวส์
- สร้างโปรเจ็ค
- คอมไพล์ได้ไฟล์ .EXE
» คัดลอกไฟล์ที่คอมไพล์แล้วมาทำงานบนลินุกซ์
$ mono myprogram.exe
» หมายเหตุ:
» ถ้ารันด้วย Wine จะพบว่าเห็นเป็นไดเร็คทอรี่เสมือน ขณะที่ Mono จะแสดงไดเร็คทอรี่จริงของลินุกซ์ออกมาครับ 🙂
» การแสดงภาษาไทย ใน Wine ยังไม่ถูกต้องเช่นสระด้านบนและล่างไม่แสดงผล แต่ Mono แสดงได้ถูกต้อง
การนับจำนวนไฟล์ในแต่ละโฟลเดอร์ด้วย bash shell
for dir in */; do
echo "$dir: $(find "$dir" -type f | wc -l)"
done
นับเฉพาะไฟล์นามสกุล .jpg ใช้คำสั่งต่อไปนี้
for dir in */; do
echo "$dir: $(find "$dir" -type f -name '*.jpg' | wc -l) jpg files"
done