Potpourri

Гарчиг

Гарын товчлуурыг дахин чиглүүлэх

Программист хүний хувьд гар бол таны мэдээлэл оруулах үндсэн хэрэгсэл юм. Таны компьютер дээрх бусад зүйлсийн адилаар гар бас өөрчлөн тохируулах боломжтой (мөн тохируулах ч хэрэгтэй) байдаг.

Хамгийн энгийн өөрчлөлт бол товчлууруудыг дахин чиглүүлэх (remap) явдал юм. Энэ нь ихэвчлэн цаана ажиллаж буй програм хангамж тодорхой нэг товчлуур дарагдах үед тэрхүү үйл явдлыг замаас нь барьж аваад, өөр товчлуур дарагдсантай адил үйлдлээр солих замаар хийгддэг. Жишээлбэл:

Мөн та товчлууруудыг өөрийн хүссэн дурын тушаалтай холбож болно. Энэ нь таны байнга хийдэг нийтлэг үйлдлүүдэд маш хэрэгтэй байдаг. Үүнд програм хангамж тодорхой товчлуурын хослолыг хүлээж байгаад, тэр хослол дарагдах үед ямар нэгэн скрипт эсвэл програмыг ажиллуулдаг.

Үүнээс ч илүү нарийн төвөгтэй тохиргоонуудыг хийж болно:

Энэ сэдвийг эхлүүлэхэд туслах зарим програм хангамжийн эх сурвалжууд:

Дэмон процессууд

Та “дэмон” (daemons) гэдэг үгийг өмнө нь сонсож байгаагүй байсан ч тэдний талаар тодорхой хэмжээний ойлголттой байх магадлалтай. Ихэнх компьютерт хэрэглэгч ажиллуулж, харилцахаас илүүтэйгээр цаана байнга ажиллаж байдаг хэд хэдэн процессууд байдаг. Эдгээр процессуудыг дэмон гэж нэрлэх бөгөөд дэмон хэлбэрээр ажилладаг програмууд нь ихэвчлэн үүнийг илтгэж d үсгээр төгсдөг. Жишээлбэл, sshd нь гаднаас орж ирж буй SSH хүсэлтүүдийг хүлээн авч, тухайн хэрэглэгчийг нэвтрэх эрхтэй эсэхийг шалгах үүрэгтэй програм юм.

Linux-д системийн хэмжээнд дэмон процессуудыг удирдах, тохируулахад systemd хамгийн түгээмэл хэрэглэгддэг шийдэл юм. Та одоо ажиллаж байгаа дэмонуудыг харахын тулд systemctl status командыг ажиллуулж болно. Тэдгээрийн ихэнх нь танд танил бус сонсогдож болох ч сүлжээ удирдах, DNS хүсэлтийг шийдвэрлэх, эсвэл график интерфэйсийг харуулах зэрэг системийн үндсэн чухал үүргүүдийг гүйцэтгэдэг. Системийн үйлчилгээнүүдийг enable, disable, start, stop, restart хийх, эсвэл тэдгээрийн ажиллаж буй төлөвийг шалгахын тулд systemctl тушаалыг ашигладаг.

Илүү сонирхолтой нь, systemd нь шинэ дэмон (эсвэл үйлчилгээ) үүсгэж, тохируулахад маш хялбар интерфэйсийг олгодог. Доор энгийн Python програмыг ажиллуулах дэмоны тохиргооны жишээг харуулав. Бид нарийвчлан үзэхгүй ч талбаруудын нэрс нь юу хийхийг тодорхой хэлж өгч байна.

# /etc/systemd/system/myapp.service
[Unit]
Description=My Custom App
After=network.target

[Service]
User=foo
Group=foo
WorkingDirectory=/home/foo/projects/mydaemon
ExecStart=/usr/bin/local/python3.7 app.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

Мөн хэрэв та тодорхой давтамжтайгаар ямар нэгэн програм ажиллуулахыг хүсвэл тусдаа дэмон бичих шаардлагагүй бөгөөд системд бэлэн ажиллаж байдаг цагийн хуваарилалт хийх зориулалттай cron дэмоныг ашиглаж болно.

FUSE (Хэрэглэгчийн орчны файлын систем)

Орчин үеийн програм хангамжийн системүүд нь ихэвчлэн хоорондоо холбогдсон жижиг хэсгүүдээс бүрддэг. Файлын системүүдийн дэмждэг үйлдлүүд нь ижил стандарт хэлээр тодорхойлогддог тун таны үйлдлийн систем өөр өөр төрлийн файлын системүүдийг дэмждэг. Жишээлбэл, та шинэ файл үүсгэхийн тулд touch ажиллуулахад, touch нь үйлдлийн системийн цөм рүү файл үүсгэх системийн дуудлага хийж, цөм нь тухайн файлын системд тохирох дуудлагыг хийж файл үүсгэдэг. Гэвч UNIX файлын системүүд нь уламжлалт байдлаар цөмийн модуль хэлбэрээр хэрэгждэг бөгөөд зөвхөн цөм нь файлын системийн үйлдлийг хийх эрхтэй байдаг.

FUSE нь хэрэглэгчийн бичсэн програм файлын системийг хэрэгжүүлэх боломжийг олгодог. FUSE нь хэрэглэгчийн хөгжүүлсэн кодыг ажиллуулан файлын системийн дуудлагуудыг хүлээн авч, тэдгээрийг цөмийн интерфэйстэй холбож өгдөг. Практикт энэ нь хэрэглэгчид файлын системийн дуудлага хийхэд өөрийн хүссэн дурын логикоо програмчилж болно гэсэн үг юм.

Жишээлбэл, FUSE-ийг ашиглан та виртуал файлын систем дээр ямар нэгэн үйлдэл хийх бүрт тэрхүү үйлдэл нь SSH-ээр дамжин алсын сервер рүү илгээгдэж, тэнд хийгдээд, үр дүн нь танд буцаж ирэхээр тохируулж болно. Ингэснээр локал програмууд уг файлыг таны компьютер дээр байгаа мэтээр харах боловч бодит байдал дээр энэ нь алсын сервер дээр байх болно. Энэ нь яг sshfs-ийн хийдэг ажил юм.

FUSE файлын системийн сонирхолтой жишээнүүд:

Нөөцлөлт

Таны нөөцлөөгүй байгаа ямар ч өгөгдөл яг одоо ч үүрд устаж алга болоход бэлэн байгаа өгөгдөл юм. Өгөгдлийг хуулах амархан боловч түүгээр найдвартай нөөцлөх нь хэцүү ажил байдаг. Доор нөөцлөлтийн үндсэн сайн туршлага болон зарим аргуудын сул талуудыг дурдав.

Нэгдүгээрт, өгөгдлийг тухайн диск дотор нь өөр газар хуулах нь нөөцлөлт биш юм, учир нь тэр диск өөрөө эвдэрвэл бүх өгөгдөл хамт устана. Үүнтэй адилаар, гэртээ байгаа гадны зөөврийн диск нь гал түймэр, хулгай зэрэг эрсдэлээс хамгаалж чадахгүй тул өөр байршилд хуулбарыг хадгалахыг зөвлөдөг.

Синхрончлолын шийдлүүд нь нөөцлөлт биш юм. Жишээлбэл, Dropbox эсвэл GDrive нь маш тохиромжтой шийдэл боловч өгөгдлийг санамсаргүй устгах эсвэл файл гэмтэх үед энэ өөрчлөлт үүлэн сан руу шууд синхрончлогдон устдаг. Мөн ийм учраас RAID зэрэг дискийг толин тусгал болгон хуулбарлах шийдэл нь нөөцлөлт биш юм. Хэрэв файл устгагдвал, гэмтвэл эсвэл ransomware-аар шифрлэгдвэл RAID таныг аварч чадахгүй.

Сайн нөөцлөлтийн үндсэн шинж чанарууд нь хувилбаржуулалт, давхардлыг арилгах болон аюулгүй байдал юм. Хувилбаржуулалт нь өөрчлөлтийн түүх рүүгээ буцах, файлуудыг хуучин байдалд нь оруулах боломжийг олгодог. Үр ашигтай нөөцлөлтийн системүүд нь өгөгдлийн давхардлыг арилгах аргыг ашиглан зөвхөн өөрчлөгдсөн хэсгийг хадгалж, зай хэмнэдэг. Аюулгүй байдлын хувьд та өөрөөсөө “хэн нэгэн миний өгөгдлийг унших, эсвэл бүр дордвол бүх өгөгдөл болон нөөц хуулбаруудыг минь устгахын тулд юуг мэдэж эсвэл эзэмшсэн байх ёстой вэ?” гэж асуух хэрэгтэй. Эцэст нь, нөөцлөлтөндөө сохроор итгэх нь маш аюултай бөгөөд тэдгээрээс өгөгдлийг буцаан сэргээж болж байгааг тогтмол шалгаж байх хэрэгтэй.

Нөөцлөлт нь зөвхөн таны компьютер дээрх локал файлуудаар хязгаарлагдахгүй. Вэб аппликейшнүүдийн асар хурдацтай өсөлтөөс шалтгаалж таны маш их өгөгдөл зөвхөн үүлэн санд хадгалагдаж байна. Жишээлбэл, та тухайн системүүдийн хаяг руугаа нэвтрэх эрхээ алдвал таны и-мэйл, олон нийтийн сүлжээн дэх зургууд, хөгжмийн жагсаалтууд эсвэл онлайн баримт бичгүүд чинь үгүй болно. Эдгээр мэдээллийн офлайн хуулбарыг авч үлдэх нь зүйтэй бөгөөд та интернэтээс эдгээр өгөгдлийг татаж авах зориулалттай бэлэн хэрэгслүүдийг олж ашиглаж болно.

Илүү дэлгэрэнгүй мэдээллийг 2019 оны Нөөцлөлт хичээлийн тэмдэглэлээс үзнэ үү.

API-нууд

Бид энэ хичээлээр локал даалгавруудыг шийдвэрлэхэд компьютераа хэрхэн үр ашигтай ашиглах талаар их ярьсан боловч эдгээр аргуудыг интернэт орчинд ч ашиглах боломжтой. Онлайнаар ихэнх үйлчилгээнүүд өөрсдийн өгөгдөлд програмаар дамжуулан хандах боломж олгодог “API”-тай байдаг. Жишээлбэл, АНУ-ын засгийн газар цаг агаарын урьдчилсан мэдээг авах API олгодог бөгөөд та үүнийг ашиглан командын мөрөөсөө цаг агаар харах боломжтой.

Ихэнх API нь ижил төстэй бүтэцтэй байдаг. Тэдгээр нь ихэвчлэн api.service.com хэлбэрийн URL-ууд бөгөөд зам болон асуулгын параметрүүдээр ямар өгөгдөл унших эсвэл ямар үйлдэл хихийг заадаг. Жишээ нь, АНУ-ын цаг агаарын өгөгдлийн API-аас тодорхой байршлын мэдээллийг авахын тулд та https://api.weather.gov/points/42.3604,-71.094 хаяг руу GET хүсэлт (жишээ нь curl ашиглан) илгээнэ. Хүсэлтийн хариу нь тухайн бүс нутгийн цаг агаарын мэдээг авах өөр бусад холбоосуудыг агуулсан байдаг. Ихэвчлэн хариу нь JSON форматаар ирдэг бөгөөд та үүнийг jq зэрэг хэрэгслээр дамжуулан өөрт хэрэгтэй хэлбэрт оруулах боломжтой.

Зарим API нь баталгаажуулалт шаарддаг бөгөөд энэ нь ихэвчлэн хүсэлт дотор нууц токен илгээх хэлбэрээр хийгддэг. Та тухайн үйлчилгээний баримт бичгийг уншиж юу ашигладгийг харах хэрэгтэй боловч “OAuth” гэдэг протокол хамгийн түгээмэл хэрэглэгддэг. Товчхондоо, OAuth нь таны өмнөөс тухайн үйлчилгээнд тодорхой эрхээр хандах боломжтой нууц токенийг олгодог. Эдгээр токенууд нь нууц бөгөөд хэрэв хэн нэгэн таны токенийг олж авбал таны нэрээр дурын үйлдэл хийх боломжтой гэдгийг санаарай!

IFTTT бол API-ийн санаа дээр суурилсан вэб үйлчилгээ бөгөөд олон төрлийн үйлчилгээнүүдийг хооронд нь холбож, үйл явдлуудыг сүлжих боломжийг олгодог. Сонирхоод үзээрэй!

Командын мөрний нийтлэг тугууд/хэв загварууд

Командын мөрний хэрэгслүүд нь хоорондоо маш их ялгаатай байдаг тул тэдгээрийг ашиглахаас өмнө man хуудсыг нь унших хэрэгтэй. Гэхдээ тэдгээрт дараах нийтлэг шинж чанарууд байдаг:

Цонхны менежерүүд

Та нарын ихэнх нь Windows, macOS эсвэл Ubuntu-ийн анхдагч цонхны менежер шиг “чирээд тавих” цонхны менежер ашиглаж дассан байх. Цонхнууд нь дэлгэцэн дээр давхарлан хөвж, тэднийг чирж, хэмжээг нь өөрчилж болдог. Эдгээрийг “хөвөгч” цонхны менежер гэж нэрлэдэг. Гэвч ялангуяа Linux систем дээр өөр олон төрлийн цонхны менежерүүд байдаг. Түгээмэл хувилбар бол “плитан” (tiling) цонхны менежер юм. Плитан цонхны менежерт цонхнууд хэзээ ч хоорондоо давхарладаггүй бөгөөд дэлгэцийг бүхэлд нь дүүргэж плита мэт байрладаг (яг tmux-ийн pane-үүд шиг). Дэлгэц нь үргэлж нээлттэй байгаа цонхнуудаар дүүрэн байх бөгөөд сонгосон байршлын схемийн дагуу өөрчлөгдөнө. Хэрэв зөвхөн нэг цонх нээлттэй байвал дэлгэцийг бүхэлд нь эзэлнэ. Хоёр дахь цонхыг нээхэд эхний цонх жижгэрч, шинэ цонхонд зай гаргаж өгнө (жишээ нь 2/3 ба 1/3 харьцаатай). Гурав дахь цонхыг нээхэд бусад цонхнууд дахин жижгэрнэ. Tmux-ийн нэгэн адил та эдгээр цонхнуудын хооронд хулгана хүрэлгүйгээр зөвхөн гараараа шилжиж, хэмжээг нь өөрчилж чадна. Үүнийг судалж үзэхэд илүүдэхгүй!

VPN-үүд

Өнөө үед VPN-үүд маш их моодонд ороод байгаа боловч үүнд ямар нэгэн баттай сайн шалтгаан багаа эсэх нь тодорхойгүй байна. VPN юу хийж чаддаг, юуг хийж чаддаггүйг сайн мэдэх хэрэгтэй. Хамгийн энгийнээр хэлбэл, VPN нь интернэтийн үүднээс таны интернэт үйлчилгээ үзүүлэгчийг (ISP) л сольж байгаа хэрэг юм. Таны бүх сүлжээний урсгал таны бодит байршлаас бус VPN үйлчилгээ үзүүлэгчээс ирж байгаа мэт харагдах бөгөөд таны холбогдсон сүлжээний оператор зөвхөн шифрлэгдсэн өгөгдлийг харах болно.

Энэ нь сонирхолтой сонсогдож болох ч, VPN ашигласнаар та өөрийн итгэлийг одоогийн ISP-ээсээ VPN компани руу л шилжүүлж байгаа хэрэг юм. Таны ISP-ийн харж чадах байсан бүх зүйлийг одоо VPN компани харна. Хэрэв та тэдэнд өөрийн ISP-ээс илүү итгэдэг бол энэ нь ашигтай байж болох ч бусад тохиолдолд тийм ч тодорхой ашиг гарахгүй. Хэрэв та нисэх онгоцны буудлын найдваргүй, шифрлэлтгүй нийтийн Wi-Fi ашиглаж байгаа бол VPN хэрэгтэй байж болох ч гэрийн сүлжээн дээр бол сонголт тийм ч тодорхой биш юм.

Мөн өнөө үед таны нууц мэдээлэл агуулсан сүлжээний ихэнх урсгал HTTPS эсвэл TLS-ээр хэдийнэ шифрлэгдсэн байдаг гэдгийг мэдэх хэрэгтэй. Ийм тохиолдолд та “найдваргүй” сүлжээн дээр байгаа эсэх нь тийм ч чухал биш бөгөөд сүлжээний оператор таныг ямар сервер рүү хандаж байгааг л мэдэхээс биш солилцож буй өгөгдлийг харж чадахгүй.

Дээр би “хамгийн энгийнээр хэлбэл” гэж хэлснийг анхаараарай. Заримдаа VPN үйлчилгээ үзүүлэгчид програмаа буруу тохируулснаас болж шифрлэлт нь сул эсвэл бүр идэвхгүй болсон тохиолдлууд гардаг. Зарим хорлонтой (эсвэл ядаж боломжийг ашиглахыг хичээсэн) VPN компаниуд таны бүх мэдээллийг бүртгэж аван гуравдагч этгээдэд зарах тохиолдол ч бий. Буруу VPN үйлчилгээ үзүүлэгчийг сонгох нь VPN огт ашиглахгүй байснаас ч илүү аюултай байж болно.

Хэрэг болвол MIT өөрийн оюутнуудад зориулан VPN ажиллуулдаг. Мөн хэрэв та өөрийн VPN-ийг үүсгэхийг хүсвэл WireGuard-ийг судалж үзээрэй.

Markdown

Таны карьерын явцад ямар нэгэн бичвэр бичих шаардлага гарах магадлал маш өндөр юм. Тэгээд тэрхүү бичвэрээ хялбар аргаар форматлахыг хүсэх байх. Зарим үгийг тод, налуу болгох, гарчиг оруулах, холбоос болон кодын хэсгийг нэмэхийг хүсдэг. Word эсвэл LaTeX зэрэг хүнд багажуудыг ашиглахын оронд хөнгөн бичих зориулалттай тэмдэглэгээний хэл болох Markdown-ыг ашиглаж болно.

Та Markdown-ыг өмнө нь харж байсан эсвэл ямар нэг хувилбарыг нь ашиглаж байсан байх. Үүнийг Markdown гэж нэрлэхгүй байсан ч интернэтэд бараг хаа сайгүй дэмждэг. Markdown-ыг анх хүмүүсийн энгийн текст файл бичихдээ ашигладаг байсан хэв загварыг коджуулах зорилгоор үүсгэсэн. Налуу бичвэрийг (italics) үгийн хоёр талд * тавьж, тод бичвэрийг (bold) ** тавьж оруулдаг. # тэмдэгтээр эхэлсэн мөрүүд нь гарчиг болох бөгөөд #-ийн тоо нь дэд гарчгийн түвшнийг заана. - тэмдэгтээр эхэлсэн мөр нь жагсаалт, тоо болон цэгээр эхэлсэн мөр нь дугаарласан жагсаалтыг үүсгэнэ. Ганц хашилтыг кодын фонт-ыг харуулахад ашиглах бөгөөд кодын блокийг дөрвөн сул зайгоор догол мөр үүсгэх эсвэл гурвалсан хашилтаор хүрээлж үүсгэнэ:

энд код бичигдэнэ

Холбоос нэмэхийн тулд холбоосын нэр текстийг дөрвөлжин хаалтанд, харин хаягийг (URL) нь дугуй хаалтанд бичнэ: [нэр](хаяг). Markdown-ыг сурахад маш хялбар бөгөөд хаа ч ашиглаж болно. Үнэндээ энэ хичээлийн болон бусад бүх хичээлийн тэмдэглэлүүд Markdown дээр бичигдсэн бөгөөд эх кодыг нь эндээс харах боломжтой.

Hammerspoon (macOS дээрх дэлгэцийн автоматжуулалт)

Hammerspoon бол macOS-д зориулсан дэлгэцийн автоматжуулалтын систем юм. Энэ нь үйлдлийн системийн үйл ажиллагаатай холбогдох Lua скрипт бичих боломжийг олгодог бөгөөд гар/хулгана, цонхнууд, дэлгэц, файлын систем болон бусад олон зүйлтэй харилцах боломжийг олгодог.

Hammerspoon-оор хийж болох зарим жишээ:

Hammerspoon нь товчлуур дарах эсвэл ямар нэгэн үйл явдалтай холбон Lua код ажиллуулах боломж олгодог бөгөөд системтэй харилцах маш олон санг агуулсан тул хийж чадах зүйлд хязгаар байхгүй. Олон хүмүүс өөрсдийн Hammerspoon тохиргоог нээлттэй хуваалцсан байдаг тул интернэтээс хайж олох боломжтой, эсвэл өөрийн кодоо эхнээс нь бичиж болно.

Нөөц эх сурвалжууд

Ачаалах ба Live USB-үүд

Таны компьютер ачаалахад, үйлдлийн систем ачаалагдахаас өмнө BIOS/UEFI системүүд тоног төхөөрөмжийг бэлтгэдэг. Энэ үед та тодорхой товчлууруудыг дарснаар BIOS-ийн тохиргоо руу нэвтрэх боломжтой. Жишээлбэл, ачаалах явцад “Press F9 to configure BIOS. Press F12 to enter boot menu.” гэж харагдаж болно. Та BIOS цэснээс техник хангамжийн бүхий л тохиргоог хийж болно. Мөн ачаалах цэс рүү нэвтэрч өөрийн үндсэн дискийн оронд өөр төхөөрөмжөөс ачаалахаар сонгож болно.

Live USB нь дотроо үйлдлийн систем агуулсан флаш диск юм. Үүнийг үйлдлийн системийн дүрсийг (жишээ нь Linux тархац) татаж аваад флаш диск рүү шатаах замаар үүсгэдэг. Энэ нь зүгээр л .iso файлыг диск рүү хуулахаас арай илүү нарийн ажил юм. Үүнд зориулж UNetbootin зэрэг live USB үүсгэх хэрэгслүүдийг ашигладаг.

Live USB нь маш олон зорилгоор хэрэг болдог. Жишээлбэл, хэрэв таны үйлдлийн систем эвдэрч ачаалахаа boilson бол та live USB ашиглан системээ сэргээх эсвэл өгөгдлөө хуулж авч болно.

Docker, Vagrant, VMs, Cloud, OpenStack

Виртуал машинууд болон түүнтэй төстэй контейнер (containers) зэрэг хэрэгслүүд нь үйлдлийн системтэй хамт компьютерийн системийг бүхэлд нь дуурайлган ажиллуулах боломж олгодог. Энэ нь туршилт хийх, хөгжүүлэлт хийх, эсвэл аюултай байж болох кодыг тусгаарлагдсан орчинд ажиллуулахад маш хэрэгтэй байдаг.

Vagrant бол машины тохиргоог (үйлдлийн систем, үйлчилгээ, багцууд гэх мэт) кодоор бичиж тодорхойлоод, vagrant up командаар шуудан виртуал машин үүсгэдэг хэрэгсэл юм. Docker нь концепцын хувьд үүнтэй төстэй боловч контейнер технологийг ашигладаг.

Мөн та үүлэн сүлжээнээс виртуал машин түрээслэж авах боломжтой бөгөөд энэ нь дараах тохиолдолд тохиромжтой:

Түгээмэл үйлчилгээнүүдэд Amazon AWS, Google Cloud, Microsoft Azure, DigitalOcean зэрэг орно.

Хэрэв та MIT CSAIL-ийн гишүүн бол судалгааны зорилгоор CSAIL OpenStack instance-ээр дамжуулан үнэгүй виртуал машин авах боломжтой.

Нөүтбүүк програмчлал

Нөүтбүүк програмчлалын орчин нь интерактив болон туршилтын хөгжүүлэлт хийхэд маш тохиромжтой байдаг. Өнөөдөр хамгийн түгээмэл нөүтбүүк програмчлалын орчин бол Python-д (мөн бусад хэд хэдэн хэлд) зориулагдсан Jupyter юм. Wolfram Mathematica бол математик чиглэлийн програмчлал хийхэд зориулагдсан өөр нэг нөүтбүүк орчин юм.

GitHub

GitHub бол нээлттэй эхийн програм хангамж хөгжүүлэлтийн хамгийн түгээмэл платформуудын нэг юм. Манай хичээлээр ярьсан vim-ээс эхлээд Hammerspoon хүртэлх олон хэрэгслүүд GitHub дээр байрладаг. Та өдөр тутам хэрэглэдэг хэрэгслүүдээ сайжруулахад туслах замаар нээлттэй эхийн төсөлд хувь нэмрээ оруулж эхлэхэд маш амархан.

GitHub дээрх төслүүдэд хувь нэмэр оруулах үндсэн хоёр арга бий:


Энэ хуудсыг засварлах.

Лиценз: CC BY-NC-SA.