Seit der ersten Verwendung von SunOS Mitte der 20er Jahre Unterstützt von vi Seit dieser einfachen Umgebung, Der Emacs -Editor ist zum Murrays Standardtool für geworden. "Es funktioniert auf allen Genres von UNIX , was meine Wahl ist, wenn ich an der plattformübergreifenden Entwicklung arbeite. Einer der Hauptgründe dafür es“, sagte er. LinuxEntwicklung
Menschen: Kennen Sie IhreShell Murray erfordert, dass Sie Ihre Shell
kennen. „Bash, tcsh, csh―― Die Shell ist Ihr grundlegendstes Software-Entwicklungstool“, betonte er. „Es kann viele erstaunliche Dinge tun. Alle Arbeit hängt von ihm ab … und seiner Kraft.“ Als Beispiel dafür, wie leistungsfähig die universellen -Shell--Skripte sein können, gibt es im Abschnitt „Ressourcen“ eine herunterladbare Datei mit einer Reihe von Skripten zum Abrufen von Red Hat gibt aktualisierte RPM -Pakete frei und führt sie in Originalpakete und benutzerdefinierte Pakete zusammen. Nachdem Sie die Datei heruntergeladen und entpackt haben, finden Sie das Skript im Verzeichnis /developerworks/rpm_update_scripts . Das Endergebnis ist ein Verzeichnis mit den neuesten Versionen aller Pakete und einer aktualisierten hdlist -Datei für die Netzwerkinstallation. Der folgende Codeausschnitt implementiert eine automatische Aktualisierung des Red Hat RPM -Pakets, um ein Paket zu erstellen, das das neueste Installable verwendet Version von
RPM. Dies ist ein grundlegender Schritt für jeden, der einen öffentlichen Linux Server verwaltet. In unserem Fall unterhalten wir typischerweise eine große Anzahl von Webdiensten auf vielen öffentlichen Linux Servern. Nachfolgend finden Sie einige Skripte, die den Aktualisierungsprozess mit den neuesten Sicherheitsfunktionen und Funktionen automatisieren können. Das folgende Skriptbeispiel beweist, dass gängige Shell-Programmiertechniken in verschiedenen Systemkonfigurations- und Programmieranwendungen weit verbreitet verwendet werden können. Das Skript verwendet die
Bourne-Shell, die in verschiedenen UNIX--Systemen die gebräuchlichste -Shell. Dadurch wird sichergestellt, dass diese sehr leichten Codes mit geringen oder keinen Änderungen auf verschiedenen UNIX--Systemen verwendet werden können. Es ist einfach, die Red Hat -Paketspezifikationen zu ändern, um sie auf andere Linux -Distributionen anzuwenden. freshen.sh Aktualisieren Sie den RPM auf der Website mit dem angegebenen RPM-FTP
🎜> Paket zum Aktualisieren der ursprünglichen RPM Liste. Führen Sie den Filter aus, um aktualisierte RPM -Pakete zu ersetzen. Schließlich wird die lange Release-Liste mit neuen RPM -Paketen aktualisiert, die auf der Update-Mirror-Site verfügbar sind. Liste 1. fresh.sh#!/bin/sh
rh_ver=$1
rh_path=$2update_dir=${rh_path}/RH${rh_ver}-updates
custom_dir=${rh_path}/RH${rh_ver}-custom
install_dir=${rh_path}/RH${rh_ver}-install
# Plausibilitätsprüfung für das Originalverzeichnis
# Update- und Installationsverzeichnisse erstellen, falls diese nicht vorhanden sind
[ -d ${update_dir} ] ||. mkdir ${update_dir}
[ -d ${install_dir}/RedHat/RPMS ] ||. mkdir -p ${install_dir}/RedHat/RPMS
# Holen Sie sich die neuesten Updates von der frischen RPM-FTP-Site
./get_update.sh ${rh_ver} ${update_dir}
# Hardlinks aus Update und benutzerdefinierten Verzeichnissen erstellen/aktualisieren
# zum Installationsverzeichnis Wir gehen davon aus, dass die ursprünglichen RPMS bereits
# fest mit dem Installationsverzeichnis verknüpft sind, also müssen wir nur Folgendes tun Filtern Sie
# alle durch aktualisierte Pakete ersetzten
./do-links .sh ${update_dir} ${install_dir}/RedHat/RPMS
[ -d ${custom_dir} ] && ./do-links.sh ${custom_dir}
${install_dir}/RedHat/RPMS
# Filtern Sie alles heraus, außer der neuesten Version von allem .
./filter-rpms.pl $install_dir/RedHat/RPMS
# Erstellen Sie die Festplattenlisten neu
/usr/lib/anaconda-runtime/genhdlist ${install_dir}
freshen.sh ruft do-links.sh bzw. get_update.sh auf, um RPM Quelle und Senke der Distributionsversion (Quelle RPM wurde weggelassen ; Hardlink Wird verwendet, um das Ziel ( RPM) festzulegen und Aktualisierungen abzurufen.
Liste 2. do-links.sh
#!/bin/sh
src=$1
dest=$2
#for file in $src/*; do
for file in `find $src -name *.rpm -a ! .src.rpm -print`; do
base=`basename $file;`
if test ! base; then
echo „Linking $file“
ln $file $dest
else
echo „EXISTS: $file“;
fi
done
Liste 3. get_update.sh
#!/bin/sh
rh_ver=$1
dest=$2
echo „Updates für Version ${rh_ver} bis $dest werden abgerufen“
lftp << EOF
open ftp.freshrpms.net mirror -n pub/redhat/linux/updates/$ {rh_ver}/en/os/i386 $dest/i386
mirror -n pub/redhat/ linux/updates/${rh_ver}/en/os/i486 $dest/i486
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/ i586 $dest/i568
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i686 $dest/i686
mirror -n pub/redhat/linux/updates/${rh_ver }/en/os/SRPMS $dest/SRPMS
mirror -n pub/redhat/linux/ Updates/${rh_ver}/en/os/noarch $dest/noarch
Java
und Linux
Bei Codemonks, ziemlich viel Entwicklungsarbeit wird unter
Linux unter Verwendung von Java Fertig gemacht. Die Kombination dieser beiden Tools bietet eine Plattform für die Erstellung kommerzieller Webanwendungen, sagte Murray. „Während der Arbeit an diesen Projekten stellten wir fest, dass wir ein allgemeines Verständnis des Anwendungscodes benötigen, den der Kunde bereits hatte“, erinnert er sich. locks.c ( im Verzeichnis /developerworks/locks in der heruntergeladenen komprimierten Datei) ist ein Codeausschnitt, der das Lesen von Java Virtual Machine Profiler Interface (JVMPI) / Schreibsperren und vielem mehr implementiert Debugging-Code. Linux Entwicklervertreter „Schreiben Sie keinen systemspezifischen Code, wenn die Umstände dies erfordern“, Murray sagte, aber um die Schwierigkeiten zu überwinden, „schreibe guten plattformübergreifenden Code“. Der Angestellte Murray
besteht darauf, dass sein größtes Kapital immer darin bestehen wird, „Code in kommerzieller Qualität zu schreiben, Netzwerkdienste aufzubauen und bereitzustellen, das Betriebssystem anzupassen Kernel und basiert vollständig auf einer zuverlässigen Open-Source-Plattform.
Das Folgende ist ein Codeausschnitt von einem plattformübergreifenden benutzerdefinierten IMAP -Server, der von betrieben wird. Entwickelt von Entwicklern von Linux und MacOS X . Der Code implementiert einen einfachen wachsenden Cache für die Verarbeitung von Zeichenfolgen. Dies vermeidet Pufferüberlaufprobleme
(Vergessen Sie diese Sicherheitslücken nicht), ohne jedes Mal etwas tun zu müssen, um Speicherplatz neu zuzuweisen . Dies geschieht durch die Verwaltung eines einfachen Caches variabler Länge, der gefüllt und geleert werden kann. Dieser Cache wurde für einen experimentellen IMAP -Server verwendet, der von einem Team intensiver Arbeiter eine Woche lang fertiggestellt wurde. Zusätzlich zur Implementierung eines einfachen String-Puffers implementiert dieser Code auch ein String-Array variabler Größe. Was es implementiert, ist eine einfache Schnittstelle. Wenn Sie mit dem Schreiben einer Zeichenfolge fertig sind, können Sie diese markieren und mit dem Schreiben der nächsten fortfahren. Darüber hinaus wird dadurch Speicherplatz eingespart und unordentlicher Code organisiert. Der Code für den vollständigen IMAP -Server wird irgendwann in diesem Jahr veröffentlicht. Liste
4. Angepasst
IMAP Teil des Servers #ifndef HOED_BUF_H
#define HOED_BUF_H typedef struct {
char *str;
int size;
int length;
int str_start;
int max_size;
int n_strings;
int size_strings;
int *str_posn;
char **str_set;
} hoed_buf_t;
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#define PRINTF(f, a) __attribute__((format (printf, f, a)))
#else
#define PRINTF(f,a)
#endif
extern hoed_buf_t *hoed_buf_alloc(int init_size, int max_size);
extern void hoed_buf_free(hoed_buf_t *);
extern void hoed_buf_reset(hoed_buf_t *);
extern void hoed_buf_new_string(hoed_buf_t *);
extern char **hoed_buf_get_set(hoed_buf_t *, int *n_string);
extern char *hoed_buf_put_char(hoed_buf_t *, char toadd);
extern char *hoed_buf_sprintf(hoed_buf_t *, const char *format,...)
PRINTF(2,3);
extern char *hoed_buf_strcat(hoed_buf_t *, const char *append);
extern char *hoed_buf_cat_sprintf(hoed_buf_t *, const char *format, ...)
PRINTF(2,3);
#endif /* HOED_BUF_H */
称为杀手级的Linux 应用程序
对Murray 来说,有两个杀手级的 Linux 应用程序:Emacs 和 Netscape Navigator。“ Emacs 或许是给人印象最深而且广为应用的基于Linux个是 Netscape Navigator。有一次,我们要支持20多种 UNIX,我在 Linux 上完成了所有的工作“ 🎜>的应用程序可能运行于许多不同风格的 UNIX
系统上,甚至安装了Cygwin 的 Windows 系统。“Linux 的未来如何?
当前,Murray 正在进行的 Linux
项目有好几个,从支持电子邮件、消息和共享数据库的分布式办公应用程序到使用标准工具的网络应用程序(标准工具包括:Apache/Tomcat, PHP , PostgreSQL, MySQL, 和Linux)。 Murray 有他自己的公司专门为网络服务和网络应用提供主机服务。对Murray 来说,得益于 Linux
强大功能的应用程序的列表在不断地增长。„有很多“,他说。„Oracle, WebSphere, Apache, PostgresQL, MySQL, Cyrus IMAP... 这个列表很长而且在不断增长。“对 Murray 来说,Linux
到此为止了。“我们所有的服务器都运行Linux;不管目标平台如何,我们主要的开发都在 Linux 上进行;我们把免费领取LAMPE兄弟连原创PHP
教程 光盘/《细说PHP》精要版,详情咨询官网客服:http://www.lampbrother.netPHPCMS二次开发http://yun.itxdl.cn/online/phpcms/index.php?u=5微信开发
http://yun.itxdl.cn/online/weixin/index.php?u=5移动互联网服务器端开发
http://yun.itxdl.cn/online/server/index.php?u=5
JavascriptKurshttp://yun.itxdl.cn/online/js/index.php?u=5
CTOTrainingslagerhttp://yun.itxdl.cn/online /cto/index.php?u=5
Das Obige stellt die Entwicklungserfahrung erfahrener Linux-Programmierer vor, einschließlich inhaltlicher Aspekte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.