20년대 중반 SunOS를 처음 사용했을 때부터 vi 에서 지원되면서 이렇게 심플한 환경이 되었기 때문에, Emacs 편집기는 Murray의 용 표준 도구가 되었습니다. "UNIX 모든 장르에서 작동하는데, 크로스 플랫폼 개발 작업 시 제가 선택한 이유 중 하나입니다. 그것”이라고 말했다. Linux개발
사람:쉘 Murray 에서는 쉘
을 알아야 합니다. "배시, tcsh, csh―― 쉘 은 가장 기본적인 소프트웨어 개발 도구”라고 강조했다. "그것은 놀라운 일을 많이 할 수 있습니다. 모든 일은 그것에 달려 있습니다... 그리고 그 힘." 범용 쉘 스크립트가 얼마나 강력한지 보여주는 예로서 리소스 섹션에 Red Hat을 얻기 위한 스크립트 세트가 포함된 다운로드 가능한 파일이 있습니다. 에서는 업데이트된 RPM 패키지를 출시하고 이를 원본 패키지와 사용자 정의 패키지로 병합합니다. 파일을 다운로드하고 압축을 풀면 /developerworks/rpm_update_scripts 디렉터리에서 스크립트를 찾을 수 있습니다. 최종 결과는 모든 패키지의 최신 버전과 네트워크 설치를 위한 업그레이드된 hdlist 파일이 포함된 디렉토리입니다. 다음 코드 조각은 Red Hat RPM 패키지의 자동 업데이트를 구현하여 최신 설치 가능 패키지를 사용하는 패키지를 생성합니다.
RPM버전입니다. 이는 공개 Linux 서버를 유지 관리하는 모든 사람을 위한 기본 단계입니다. 우리의 경우 일반적으로 많은 공개 Linux 서버에서 많은 수의 웹 서비스를 유지 관리합니다. 다음은 최신 보안 및 기능으로 업데이트하는 프로세스를 자동화할 수 있는 몇 가지 스크립트입니다. 아래 스크립트 샘플은 일반적인 쉘 프로그래밍 기술이 다양한 시스템 구성 및 프로그래밍 애플리케이션에서 널리 사용될 수 있음을 입증합니다. 이 스크립트는 다양한
UNIX시스템에서 가장 일반적인 쉘 bourne 쉘을 사용합니다. >. 이렇게 하면 이러한 매우 가벼운 코드를 수정이 거의 또는 전혀 없이 다양한 UNIX 시스템에서 사용할 수 있습니다. Red Hat 패키지 사양을 수정하여 다른 Linux 배포판에 적용하는 것은 쉽습니다. freshhen.sh 지정된 RPM ftp 를 사용하여 사이트의
RPM을 업데이트합니다. 🎜> 패키지를 사용하여 원래 RPM 목록을 업데이트합니다. 업데이트된 RPM 패키지를 교체하려면 필터를 실행하세요. 마지막으로 긴 릴리스 목록은 업데이트 미러 사이트에서 제공되는 새로운 RPM 패키지로 업데이트됩니다. 목록 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
# 원본 디렉터리의 상태를 확인합니다.
# 업데이트 및 설치 디렉터리가 없으면 생성
[ -d ${update_dir} ] || mkdir ${update_dir}
[ -d ${install_dir}/RedHat/RPMS ] || mkdir -p ${install_dir}/RedHat/RPMS
# 최신 rpms FTP 사이트에서 최신 업데이트 받기
./get_update.sh ${rh_ver} ${update_dir}
# 업데이트 및 사용자 정의 디렉터리에서 하드링크 생성/업데이트
# 원본 RPMS가 이미
# 설치 디렉토리에 하드링크되어 있다고 가정하므로 우리가 해야 할 일은 다음과 같습니다.
# 업데이트된 패키지로 대체됩니다.
./do-links .sh ${update_dir} ${install_dir}/RedHat/RPMS
[ -d ${custom_dir} ] && ./do-links.sh ${custom_dir}
${install_dir}/RedHat/RPMS
# 최신 버전만 제외하고 모두 필터링 .
./filter-rpms.pl $install_dir/RedHat/RPMS
# 하드 디스크 목록 재구축
/usr/lib/anaconda-runtime/genhdlist ${install_dir}
freshen.sh 는 do-links.sh 및 get_update.sh 를 각각 호출하여 RPM 배포판 소스 및 싱크(소스 생략 RPM 소프트웨어 패키지 ; 하드 링크 목표 RPM) 을 설정하고 업데이트를 검색하는 데 사용됩니다.
목록 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 "$file 연결 중";
ln $file $dest
else
echo "EXISTS: $file";
fi
완료
목록 3. get_update.sh
#!/bin/sh
rh_ver=$1
dest=$2
echo "${rh_ver} 버전에서 $dest로의 업데이트 검색 중"
lftp
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
미러 -n pub/redhat/linux/updates/${rh_ver}/en/os/ i586 $dest/i568
미러 -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
및 Linux
Codemonks, 꽤 많은 개발 작업이
Linux 에서 Java 를 사용하여 이루어졌습니다. Murray는 이 두 도구의 조합을 통해 상용 품질의 웹 애플리케이션을 생성할 수 있는 플랫폼을 제공한다고 말했습니다. “이러한 프로젝트를 진행하면서 우리는 고객이 이미 보유하고 있는 애플리케이션 코드에 대한 전반적인 이해가 필요하다는 사실을 깨달았습니다.”라고 그는 회상합니다. locks.c(다운로드한 압축 파일의 /developerworks/locks 디렉토리 에 있는 ) 은 JVMPI(Java Virtual Machine Profiler Interface) / 읽기를 구현하는 코드 조각입니다. 디버깅 코드. Linux 개발자 대표 “상황에 따라 시스템 전용 코드를 작성하지 마세요” , Murray는 이렇게 말했지만, 어려움을 극복하려면 "좋은 크로스 플랫폼 코드를 작성하는 것"이 필요합니다. 고용된 Murray
는 자신의 가장 큰 자본은 항상 "상용 수준의 코드 작성, 네트워크 서비스 구축 및 제공, OS 사용자 정의 또는 커널이며 완전히 신뢰할 수 있는 오픈 소스 플랫폼을 기반으로 합니다."
다음은 에서 제공하는 크로스 플랫폼 사용자 정의 IMAP 서버의 코드 조각입니다. Linux 및 MacOS X . 이 코드는 문자열 처리를 위해 간단한 증가 캐시를 구현합니다. 이렇게 하면 버퍼 오버플로 문제를 피할 수 있습니다
(보안 허점을 잊지 마세요). 매번 공간을 재할당하기 위해 뭔가를 할 필요가 없습니다. . 이는 채우고 비울 수 있는 간단한 가변 길이 캐시를 유지함으로써 이를 수행합니다. 이 캐시는 일주일 동안 열심히 작업한 팀에 의해 완성된 실험적인 IMAP 서버에 사용되었습니다. 이 코드는 간단한 문자열 버퍼 구현 외에도 가변 크기 문자열 배열도 구현합니다. 이것이 구현하는 것은 간단한 인터페이스입니다. 문자열 작성을 마치면 표시하고 다음 문자열을 계속 작성할 수 있습니다. 또한 공간 할당을 절약하고 지저분한 코드를 함께 정리할 수 있습니다. 완전한 IMAP 서버용 코드는 올해 출시될 예정입니다. 목록
4. 맞춤
IMAP 서버 일부 #ifndef HOED_BUF_H
#define HOED_BUF_H typedef struct {
char *str;
정수 크기;
int 길이;
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 上完成了所有的工작품”。
他继续说,“有趣的是,基于 Linux 적용 용도가 다른 UNIX 系统上,甚至安装了 Cygwin> Windows 系统。”
Linux적未来如何?
当前,Murray 정재进行적 Linux 项目有好几个,从支持电子邮件、消息和共享数据库的分布式办公应用程序到使用标准工具的网络应用程序(标准工具包括:Apache/Tomcat, PHP, PostgreSQL, 와 Linux)。 Murray 有他自己的公主专门为网络服务和网络应用提供主机服务。
对Murray 来说,得益于 Linux 强大功能的应用程序的列表不断地增长。“많은”,他说。“Oracle, WebSphere, Apache, PostgresQL, MySQL, Cyrus IMAP... 这个列表很长而且在不断增长。”
对Murray 来说,Linux 到此为止了。“我们所有服务器tour运行 Linux; 不管目标平台如何,我们主要的开发都在 Linux 上进行;我们把 Linux 推荐给用户来运行服务器应用程序”,他说。“ Linux 快速发시고 步伐,开放溔代码组织对它的广泛支持,低廉的开发费用,如果把这些结台个难以击败的平台”。
免费领取램프兄弟连原创PHP教程 光盘/ 《细说PHP》精要版,详情咨询官网客服:http://www.lampbrother.net
PHPCMS이次开发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 Javascript강좌http://yun.itxdl.cn/online/js/index.php?u=5 CTO교육 캠프http://yun.itxdl.cn/online /cto/index.php?u=5
위 내용은 내용적인 측면을 포함하여 Linux 선배 프로그래머들의 개발 경험을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.