


Skrip Shell melaksanakan sistem Linux dan pemantauan sumber proses_Pengetahuan asas
Dalam proses pengendalian dan penyelenggaraan pelayan, selalunya perlu untuk memantau pelbagai sumber pelayan, seperti: Pemantauan beban CPU, pemantauan penggunaan cakera, pemantauan nombor proses, dsb., supaya segera menggera dan memberitahu bila keabnormalan berlaku dalam sistem pentadbir. Artikel ini memperkenalkan beberapa keperluan pemantauan biasa dan penulisan skrip shell di bawah sistem Linux.
Direktori artikel:
1.Linux menggunakan Shell untuk menyemak sama ada proses itu wujud
2.Linux menggunakan Shell untuk mengesan penggunaan CPU proses
3.Linux menggunakan Shell untuk mengesan penggunaan memori proses
4.Linux menggunakan Shell untuk mengesan penggunaan pemegang proses
5.Linux menggunakan Shell untuk menyemak sama ada port TCP atau UDP sedang mendengar
6.Linux menggunakan Shell untuk menyemak bilangan proses berjalan bagi nama proses tertentu
7.Linux menggunakan Shell untuk mengesan beban CPU sistem
8.Linux menggunakan Shell untuk mengesan ruang cakera sistem
9. Ringkasan
Semak sama ada proses itu wujud
Apabila memantau proses, kami secara amnya perlu mendapatkan ID proses ID proses ialah pengecam unik proses tersebut. Walau bagaimanapun, kadangkala mungkin terdapat berbilang proses dengan nama proses yang sama dijalankan di bawah pengguna yang berbeza pada pelayan . Fungsi berikut GetPID Ia memberikan fungsi untuk mendapatkan ID proses bagi nama proses yang ditentukan di bawah pengguna yang ditentukan (pada masa ini hanya mempertimbangkan untuk memulakan proses dengan nama proses ini di bawah pengguna ini. Ia mempunyai dua parameter: nama pengguna dan nama proses). Ia mula-mula menggunakan ps untuk mencari maklumat proses, dan pada masa yang sama Gunakan grep untuk menapis proses yang diperlukan, dan akhirnya menggunakan sed dan awk untuk mencari nilai ID proses yang diperlukan (fungsi ini boleh diubah suai mengikut situasi sebenar , seperti jika maklumat lain perlu ditapis, dsb.).
Senarai 1. Pantau proses
fungsi GetPID #User #Name
{
PsUser=$1
PsName=$2
pid=`ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbxn
|grep -v tail|grep -v mula|grep -v stop |sed -n 1p |awk '{print $1}'`
echo $pid
}
Contoh demo:
1) Program sumber (contohnya, cari ID proses di mana pengguna adalah root dan nama proses ialah CFTestApp)
PID=`GetPID root CFTestApp`
echo $PID
2) Hasil keluaran
11426
[dyu@xilinuxbldsrv shell]$
3) Analisis keputusan
Seperti yang dapat dilihat daripada output di atas: 11426 ialah ID proses program CFTestApp di bawah pengguna root.
4) Pengenalan arahan
1. ps: Lihat maklumat proses segera dalam sistem. Parameter: -u
Kadangkala ada kemungkinan proses tidak dimulakan Fungsi berikut adalah untuk menyemak sama ada ID proses wujud Jika proses tidak berjalan, outputnya ialah:
Prosesnya tidak wujud
# Semak sama ada proses itu wujud
Jika [ "-$PID" == "-" ]
Kemudian
{
echo "Proses tidak wujud."
}
fi
Kesan proses penggunaan CPU
Apabila menyelenggara perkhidmatan aplikasi, kami sering menghadapi situasi di mana CPU terlalu tinggi, menyebabkan kesesakan perniagaan dan gangguan perniagaan. CPU yang berlebihan mungkin disebabkan oleh situasi yang tidak normal seperti beban perniagaan atau gelung yang tidak berkesudahan CPU proses perniagaan sentiasa dipantau melalui skrip Kakitangan penyelenggaraan boleh dimaklumkan pada masa apabila penggunaan CPU tidak normal, yang memudahkan kakitangan penyelenggaraan menganalisis, mencari dan. elakkan urusan dengan tepat pada masanya. Fungsi berikut mendapatkan penggunaan CPU proses untuk ID proses tertentu. Ia mempunyai parameter untuk ID proses Ia mula-mula menggunakan ps untuk mencari maklumat proses, sambil menapis baris %CPU melalui grep -v, dan akhirnya menggunakan awk untuk mencari bahagian integer peratusan penggunaan CPU (jika terdapat berbilang. CPU dalam sistem, penggunaan CPU boleh melebihi 100%).
Senarai 2. Pemantauan masa nyata CPU proses perniagaan
fungsi GetCpu
{
CpuValue=`ps -p $1 -o pcpu |grep -v CPU |. awk '{print $1}' | echo $CpuValue
}
Senarai 3. Tentukan sama ada penggunaan CPU melebihi had
{
PID=$1
cpu=`GetCpu $PID`
Jika [ $cpu -gt 80 ]
Kemudian
{
echo “Penggunaan cpu lebih besar daripada 80%”
}
lain
{
echo “Penggunaan cpu adalah perkara biasa”
}
fi
}
1) Program sumber (dengan mengandaikan bahawa ID proses CFTestApp telah disoal di atas sebagai 11426)
Penggunaan cpu adalah biasa
[dyu@xilinuxbldsrv shell]$
Seperti yang dapat dilihat daripada output di atas: penggunaan CPU semasa program CFTestApp ialah 75%, iaitu normal dan tidak melebihi had penggera 80%.
Kesan penggunaan memori proses
Apabila menyelenggara perkhidmatan aplikasi, kami sering menghadapi situasi di mana proses ranap disebabkan penggunaan memori yang berlebihan, menyebabkan gangguan perniagaan (contohnya, ruang memori maksimum yang boleh dialamatkan bagi program 32-bit ialah 4G. Jika melebihi, memori aplikasi akan gagal, dan ingatan fizikal juga terhad). Penggunaan memori yang berlebihan mungkin disebabkan oleh kebocoran memori, pengumpulan mesej, dll. Penggunaan memori proses perniagaan sentiasa dipantau melalui skrip Penggera boleh dihantar dalam masa (contohnya, melalui SMS) apabila penggunaan memori tidak normal, supaya kakitangan penyelenggaraan boleh mengendalikannya tepat pada masanya. Fungsi berikut mendapatkan penggunaan memori proses untuk ID proses tertentu. Ia mempunyai parameter untuk ID proses, ia mula-mula menggunakan ps untuk mencari maklumat proses, sambil menapis baris VSZ melalui grep -v, dan kemudian mendapat penggunaan memori dalam megabait dengan membahagikan dengan 1000.Senarai 4. Pantau penggunaan memori proses perniagaan
Fungsi GetMem
{
MEMUsage=`ps -o vsz -p $1|grep -v VSZ`
(( MEMUsage /= 1000))
echo $MEMUsage
}
Fungsi berikut adalah untuk mendapatkan penggunaan memori proses ini melalui fungsi GetMem di atas, dan kemudian menggunakan pernyataan bersyarat untuk menentukan sama ada penggunaan memori melebihi had Jika ia melebihi 1.6G (boleh dilaraskan mengikut situasi sebenar), a penggera akan dikeluarkan, jika tidak maklumat biasa akan dikeluarkan.
Penyenaraian 5. Menentukan sama ada penggunaan memori melebihi had
mem=`GetMem $PID` jika [ $mem -gt 1600 ]
kemudian
{
echo “Penggunaan memori lebih besar daripada 1.6G”
}
lain
{
echo “Penggunaan memori adalah perkara biasa”
}
fi
1) Program sumber (dengan mengandaikan bahawa ID proses CFTestApp telah disoal di atas sebagai 11426)
echo "Penggunaan memori ialah $mem M"
Jika [ $mem -gt 1600 ]
Kemudian
{
echo "Penggunaan memori lebih besar daripada 1.6G"
}
lain
{
echo "Penggunaan memori adalah perkara biasa"
}
fi
Penggunaan memori adalah perkara biasa
[dyu@xilinuxbldsrv shell]$
Seperti yang dapat dilihat daripada output di atas: penggunaan memori semasa program CFTestApp ialah 248M, iaitu normal dan tidak melebihi had penggera 1.6G.
Kesan penggunaan pemegang proses
Apabila menyelenggara perkhidmatan aplikasi, kami sering menghadapi gangguan perniagaan akibat penggunaan pemegang yang berlebihan. Penggunaan pengendalian proses pada setiap platform adalah terhad Contohnya, pada platform Linux, kita boleh menggunakan perintah ulimit – n (buka fail (-n) 1024) atau melihat kandungan /etc/security/limits.conf ke. dapatkan had pengendalian Proses. Penggunaan pemegang yang berlebihan mungkin disebabkan oleh beban yang berlebihan, kebocoran pemegang, dsb. Penggunaan pemegang proses perniagaan sentiasa dipantau melalui skrip Makluman boleh dihantar dalam masa apabila keabnormalan berlaku (contohnya, melalui SMS), supaya kakitangan penyelenggaraan boleh mengendalikannya tepat pada masanya. Fungsi berikut mendapatkan penggunaan pengendalian proses untuk ID proses yang ditentukan. Ia mempunyai satu parameter untuk ID proses Ia mula-mula menggunakan ls untuk mengeluarkan maklumat pengendalian proses, dan kemudian menggunakan wc -l untuk mengira bilangan pemegang keluaran.
{
DES=`ls /proc/$1/fd | echo $DES
}
kemudian
{
echo “Bilangan des lebih besar daripada 900”
}
lain
{
echo “Bilangan des adalah normal”
}
fi
Contoh demo:
1) Program sumber (dengan mengandaikan bahawa ID proses CFTestApp yang terdapat dalam pertanyaan di atas ialah 11426)
des=`DapatkanDes 11426`
echo "Bilangan des ialah $des"
Jika [ $des -gt 900 ]
Kemudian
{
echo "Bilangan des lebih besar daripada 900"
}
lain
{
echo "Bilangan des adalah normal"
}
fi
2) Hasil keluaran
Bilangan des ialah 528
Bilangan des adalah normal
[dyu@xilinuxbldsrv shell]$
3) Analisis keputusan
Seperti yang dapat dilihat daripada output di atas: penggunaan pemegang semasa program CFTestApp ialah 528, iaitu normal, dan tidak melebihi had penggera 900.
4) Pengenalan arahan
wc: Kira bilangan bait, perkataan dan baris dalam fail yang ditentukan, dan paparkan serta keluarkan keputusan statistik. Parameter: -l mengira bilangan baris. -c mengira bait. -w Kira bilangan perkataan.
Semak sama ada port TCP atau UDP sedang mendengar
Pengesanan port sering ditemui dalam pengesanan sumber sistem, terutamanya dalam situasi komunikasi rangkaian, pengesanan status port selalunya sangat penting. Kadangkala proses, CPU, memori, dsb. mungkin dalam keadaan biasa, tetapi port berada dalam keadaan tidak normal dan perniagaan tidak berjalan seperti biasa. Fungsi berikut boleh menentukan sama ada port yang ditentukan sedang mendengar. Ia mempunyai parameter untuk port yang akan dikesan Ia mula-mula menggunakan netstat untuk mengeluarkan maklumat penghunian port, dan kemudian menapis bilangan port TCP yang mendengar melalui grep, awk dan wc Pernyataan kedua mengeluarkan bilangan port UDP . Jika mendengar port TCP dan UDP semuanya 0, kembalikan 0, jika tidak, kembalikan 1.
Senarai 6. Pengesanan port
fungsi Mendengar
{
TCPListeningnum=`netstat -an | awk '$1 == "tcp" && $NF == "DENGAR" {cetak $0}' | UDPListeningnum=`netstat -an|grep ":$1 " n
|awk '$1 == "udp" && $NF == "0.0.0.0:*" {cetak $0}' | (( Listeningnum = TCPListeningnum UDPListeningnum ))
Jika [ $Listeningnum == 0 ]
Kemudian
{
gema "0"
}
lain
{
gema "1"
}
fi
}
Contoh demo:
{
echo "Port sedang mendengar"
}
lain
{
echo "Port tidak mendengar"
}
fi
2) Hasil keluaran
3) Analisis keputusan
Seperti yang dapat dilihat daripada output di atas: port 8080 pelayan Linux ini dalam keadaan mendengar.
4) Pengenalan arahan
netstat: Digunakan untuk memaparkan data statistik yang berkaitan dengan protokol IP, TCP, UDP dan ICMP Ia biasanya digunakan untuk menyemak sambungan rangkaian setiap port mesin. Parameter: -a memaparkan semua soket dalam sambungan. -n Gunakan alamat IP secara terus tanpa melalui pelayan nama domain.
Fungsi berikut juga mengesan sama ada port TCP atau UDP tertentu berada dalam keadaan biasa.
tcp: netstat -an|egrep $1 |awk '$6 == "DENGAR" && $1 == "tcp" {print $0}'
udp: netstat -an|egrep $1 |awk '$1 == "udp" && $5 == "0.0.0.0:*" {print $0}'
Pengenalan arahan
egrep: Cari rentetan yang ditentukan dalam fail. Kesan pelaksanaan egrep adalah seperti grep -E Sintaks dan parameter yang digunakan boleh merujuk kepada perintah grep. Sintaks, ungkapan biasa lanjutan mempunyai spesifikasi ungkapan yang lebih lengkap daripada ungkapan biasa asas.
Lihat bilangan proses berjalan bagi nama proses tertentu
Kadang-kadang kita mungkin perlu mendapatkan bilangan proses yang dimulakan pada pelayan Fungsi berikut adalah untuk mengesan bilangan proses yang sedang berjalan Contohnya, nama proses ialah CFTestApp.
Runnum=`ps -ef |. wc -v ekor |
Apabila melakukan penyelenggaraan pelayan, kadangkala kami menghadapi gangguan perniagaan akibat beban CPU (penggunaan) sistem yang berlebihan. Berbilang proses mungkin berjalan pada pelayan Ia adalah perkara biasa untuk melihat CPU satu proses, tetapi beban CPU keseluruhan sistem mungkin tidak normal. Beban CPU sistem sentiasa dipantau melalui skrip, dan penggera boleh dihantar dalam masa apabila keabnormalan berlaku, membolehkan kakitangan penyelenggaraan mengendalikannya tepat pada masanya dan mengelakkan kemalangan. Fungsi berikut boleh mengesan penggunaan CPU sistem Gunakan vmstat untuk mendapatkan nilai terbiar CPU sistem 5 kali, ambil purata, dan kemudian dapatkan nilai penggunaan CPU sebenar dengan mengambil perbezaan daripada 100.
{
CpuIdle=`vmstat 1 5 |sed -n '3,$p' n
|awk '{x = x $15} TAMAT {print x/5}' |awk -F '{print $1}'
CpuNum=`gema "100-$CpuIdle" | echo $CpuNum
}
1) Program sumber
echo "CPU sistem ialah $cpu"
jika [ $cpu -gt 90 ]
kemudian
{
echo "Penggunaan cpu sistem lebih besar daripada 90%"
}
lain
{
echo "Penggunaan cpu sistem adalah normal"
}
fi
[dyu@xilinuxbldsrv shell]$
3) Ergebnisanalyse
Wie aus der obigen Ausgabe ersichtlich ist: Die aktuelle CPU-Auslastung des Linux-Serversystems beträgt 87 %, was normal ist und die Alarmgrenze von 90 % nicht überschreitet.
4) Befehlseinführung
vmstat: Die Abkürzung für Virtual Meomory Statistics (Virtual Memory Statistics), mit der der virtuelle Speicher, der Prozess und die CPU-Aktivitäten des Betriebssystems überwacht werden können.
Parameter: -n gibt an, dass die Ausgabe-Header-Informationen während der periodischen Schleifenausgabe nur einmal angezeigt werden.
Überprüfen Sie den Systemspeicherplatz
Die Erkennung des Systemspeicherplatzes ist ein wichtiger Teil der Systemressourcenerkennung. Während der Systemwartung müssen wir häufig die Speicherplatznutzung des Servers überprüfen. Da einige Unternehmen von Zeit zu Zeit Anrufnotizen, Protokolle oder temporäre Dateien schreiben müssen, kann es auch zu Geschäftsunterbrechungen kommen, wenn der Speicherplatz erschöpft ist. Die folgende Funktion kann die Speicherplatznutzung eines Verzeichnisses im aktuellen System ermitteln Eingabeparameter Für den zu erkennenden Verzeichnisnamen verwenden Sie df, um die Informationen zur Speicherplatznutzung des Systems auszugeben, und filtern Sie dann durch grep und awk, um den Prozentsatz der Speicherplatznutzung eines bestimmten Verzeichnisses zu erhalten.
Funktion GetDiskSpc
{
Wenn [ $# -ne 1 ]
Dann
Geben Sie 1
zurück fi
Ordner="$1$"
DiskSpace=`df -k |grep $Folder |awk '{print $5}' |awk -F% '{print $1}'
echo $DiskSpace
}
Beispieldemo:
1) Quellprogramm (das Erkennungsverzeichnis ist /boot)
Ordner="/boot"
DiskSpace=`GetDiskSpc $Folder`
echo „Der Systemspeicherplatz im $Folder beträgt $DiskSpace%“
if [ $DiskSpace -gt 90 ]
dann
{
echo „Die Nutzung der Systemfestplatte ($Folder) beträgt mehr als 90 %“
}
sonst
{
echo „Die Nutzung der Systemfestplatte ($Folder) ist normal“
}
fi
2) Ergebnisausgabe
Der System-/Boot-Festplattenspeicher beträgt 14 %
Die Nutzung der Systemfestplatte (/boot) ist normal
[dyu@xilinuxbldsrv-Shell]$
3) Ergebnisanalyse
Aus der obigen Ausgabe können wir ersehen, dass 14 % des Speicherplatzes im /boot-Verzeichnis auf diesem Linux-Serversystem verwendet wurden, was normal ist und die Alarmgrenze von 90 % der Nutzung nicht überschreitet.
4) Befehlseinführung
df: Überprüfen Sie die Speicherplatznutzung des Dateisystems. Mit diesem Befehl können Sie Informationen erhalten, z. B. wie viel Speicherplatz auf der Festplatte belegt ist und wie viel Speicherplatz derzeit noch übrig ist. Parameter: -k Anzeige in k Bytes.
Zusammenfassung
Auf der Linux-Plattform ist die Shell-Skriptüberwachung eine sehr einfache, bequeme und effektive Methode zur Überwachung von Servern und Prozessen. Sie ist sehr hilfreich für Systementwickler und Prozessbetreuer. Es kann nicht nur die oben genannten Informationen überwachen und Alarme senden, sondern auch Prozessprotokolle und andere Informationen überwachen. Ich hoffe, dass dieser Artikel für alle hilfreich ist.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)