Linux vsftpd 500 error

아오 빡쳐

 

vsftpd에서 anonymous 계정의 업로드 및 폴더생성을 허용했는데 저 에러가 난다면 일단 설정을 확인하자.

“`
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chown_uploads=YES
chown_username=”anonymous 용 계정명”
anon_root=”anonymous 계정의 루트”
“`

설정이 제대로 되어있는지 확인하고도 안된다면

“`
setsebool -P ftp_home_dir 1
service vsftpd restart
“`

해당 명령어를 쳐보자.

안된다면 SELinux를 끄자.

그래도 안되면…. 모르겟다ㅏㅏㅏㅏㅏ ㅠㅠ

Linux shared dir (NFS)

링크

 

음. 나중에정리해야지.

 

NFS Options

Some other options we can use in “/etc/exports” file for file sharing is as follows.

  1. ro: With the help of this option we can provide read only access to the shared files i.e clientwill only be able to read.
  2. rw: This option allows the client server to both read and write access within the shared directory.
  3. sync: Sync confirms requests to the shared directory only once the changes have been committed.
  4. no_subtree_check: This option prevents the subtree checking. When a shared directory is the subdirectory of a larger file system, nfs performs scans of every directory above it, in order to verify its permissions and details. Disabling the subtree check may increase the reliability ofNFS, but reduce security.
  5. no_root_squash: This phrase allows root to connect to the designated directory.

For more options with “/etc/exports“, you are recommended to read the man pages for export.

nfs, rpcbind auto start on boot

chkconfig --level 35 rpcbind on
chkconfig --level 35 nfs on

 

Linux Shell Redirection, pipe, xargs

원본링크

■ 리다이렉션(Redirection)
명령이 실행되기에 앞서 쉘에 의해 특별하게 해석되는 표시를 사용하여 입력과 출력을 방향 전환 또는 리다이렉트 할 수 있다.

stdin 키보드 (표준입력, 0)
stdout 모니터 (표준출력, 1)
stderr 모니터 (에러출력, 2)
> 출력 리다이렉션 (stdout 만을 보냄)
< 입력 리다이렉션 (stdin 파일로부터 데이터를 받음)
>> 추가 출력 리다이렉션 (새로 덮어쓰지 않고 추가)
2> 표준에러 리다이렉션 (stderr 만을 보냄)
&>word
>& word
>word 2>&1
표준 출력과 표준에러를 동시에 리다이렉트 함

 

표준출력은 파일 output.txt로 리다이렉트

$ ls /tmp /tmmp > output.txt
ls: /tmmp에 접근할 수 없습니다.: 그런 파일이나 디렉터리가 없습니다

반대로 표준에러를 error.txt 파일에 리다이렉트.(표준출력은 그대로 화면 출력)

$ ls /tmp /tmmp 2> errors.txt
/tmp:
keyring-QC9vEx pulse-2L9K88eMlGn7 rsync_1007
orbit-devanix pulse-PKdhtXMmr18n ssh-jbzyRBjE1162

앞의 두 예제를 합쳐놓은 것.

$ ls /tmp /tmmp 2> errors.txt > output.txt
/* cat으로 errors.txt 와 output.txt 출력 */
$ cat errors.txt
ls: /tmmp에 접근할 수 없습니다.: 그런 파일이나 디렉터리가 없습니다
$ cat output.txt
/tmp:
keyring-QC9vEx
orbit-devanix
pulse-2L9K88eMlGn7
pulse-PKdhtXMmr18n
rsync_1007
ssh-jbzyRBjE1162

두 스트림(stdout, stderr) 출력을 모두 everything.txt 파일에 쓰도록 함.

$ ls /tmp /tmmp > everything.txt 2>&1
/* cat으로 everything.txt 출력 */
$ cat everything.txt
ls: /tmmp에 접근할 수 없습니다.: 그런 파일이나 디렉터리가 없습니다
/tmp:
keyring-QC9vEx
orbit-devanix
pulse-2L9K88eMlGn7
pulse-PKdhtXMmr18n
rsync_1007
ssh-jbzyRBjE1162

두 개의 그레이터 댄(>>) : 새로 덮어쓰지 않고 추가 되도록 하기

$ ls /tmp >> output.txt

에러 출력을 화면에 출력 하지 않기 (비트버킷 파일(/dev/null) 보내기)

$ ls /tmp /tmmp 2> /dev/null
/tmp:
keyring-QC9vEx pulse-2L9K88eMlGn7 rsync_1007
orbit-devanix pulse-PKdhtXMmr18n ssh-jbzyRBjE1162

/etc/hosts 파일을 mail 명령어의 표준 입력 스트림으로 보내기

$ mail chris < /etc/hosts

 

 

■ 파이프( | )를 사용
하나의 프로세스 출력을 파일이 아닌 다른 프로세스로 리다이렉트.

ls명령의 표준출력이 파이프를 통해 sort 명령어로 보내져 실행결과가 정렬되어 출력.

$ ls /tmp | sort

파이프 리다이렉션을 조합하여 ls 명령어의 표준출력은 정렬되고 에러출력은 비트버킷(/dev/null)으로 비운다.

$ ls /tmp /tmmp 2> /dev/null | sort

그밖에 다양한 활용.

/* 설치되어 있는 모든 패키지 에서 sql 문자열이 포함되어 있는 패키지 개수 */

$ dpkg-query -l | grep -i sql | wc -l

/* Firefox 문자를 포함하고 있는 프로세스 출력 */

$ ps auwx | grep firefox

/* 프로세스 목록 한 화면씩 출력 */

$ ps auwx | less

/* 순수하게 맨 페이지 경로만을 출력 */

$ whereis -m bash | awk \'{print $2}\'

■ 작은 인용부호( )를 사용
인용부호로 묶인 명령어의 실행결과를 나머지 명령어의 입력으로 사용
/* ps 명령어의 전체경로를 찾은 후에 이 명령어를 포함하고 있는 패키지를 찾음 /
<pre>$ dpkg-query -S
which ps→ dpkg-query -S /bin/ps</pre>
/ bash 명령어의 전체경로를 찾아 해당 명령어의 상세 목록을 보여줌 */
<pre>$ ls -l
which bash→ ls -l /bin/bash</pre>
작은 인용부호(
)는 키보드 느낌표(!) 왼쪽에 있음.

■ xargs명령을 이용
하나의 명령의 실행결과를 다른 명령어의 인자로 넘겨주기

ls명령의 /bin/b*의 실행결과는 dpkg-qeury -S 명령어의 인자로 전달

$ ls /bin/b* | xargs -t dpkg-query -S
dpkg-query -S /bin/bash /bin/bunzip2 /bin/busybox /bin/bzcat /bin/bzcmp /bin/bzdiff /bin/bzegrep /bin/bzexe /bin/bzfgrep /bin/bzgrep /bin/bzip2 /bin/bzip2recover /bin/bzless /bin/bzmore
bash: /bin/bash
bzip2: /bin/bunzip2
busybox-static: /bin/busybox
bzip2: /bin/bzcat
bzip2: /bin/bzcmp
bzip2: /bin/bzdiff
bzip2: /bin/bzegrep
bzip2: /bin/bzexe
bzip2: /bin/bzfgrep
bzip2: /bin/bzgrep
bzip2: /bin/bzip2
bzip2: /bin/bzip2recover
bzip2: /bin/bzless
bzip2: /bin/bzmore

-t 옵션을 적용하면 명령어 실행시 화면에 좀 더 상세한 정보가 출력.
-I{}를 이용하여 ls명령이 출력하는 각 문자열을 하나씩 dpkg-query 명령어의 입력으로 보냄.

$ ls /bin/b* | xargs -t -I{} dpkg-query -S {}
dpkg-query -S /bin/bash
bash: /bin/bash
dpkg-query -S /bin/bunzip2
bzip2: /bin/bunzip2
dpkg-query -S /bin/busybox
busybox-static: /bin/busybox
dpkg-query -S /bin/bzcat
…[중략]…

실행결과에서 볼 수 있듯이 dpkg-query -S 명령어는 ls로부터 인자로 전달된 각 개별 문자열을 사용해 반복적으로 실행.

※ 맨 페이지(man page) 참조 : man bash, man xargs

Linux IP Setting

간단한 세팅 방법.  (일시적, 재시작시 기본세팅으로 돌아간다.)

ifconfig eth0 \'IP Address\'
route add default gw \'GW Address\'

vi /etc/resolv.conf
nameserver \'DNS Address\'

 

영구 세팅 방법

vi /etc/sysconfig/network-scripts/ifcfg-eth0

eth0 는 설정할 랜카드 인터페이스 이름

 

파일 내용

DEVICE = eth0 # 이더넷 인터페이스의 종류
BOOTPROTO= # IP할당 방식 static, dhcp, none
HWADDR= # MAC Address
IPADDR= # IP Address
PREFIX= # Netmask Prefix
GATEWAY= # Gateway Address
ONBOOT=yes # On boot enable this interface (yes, no)
PEERDNS=yes # Change DNS (/etc/resolv.conf) by DHCP server
DNS1= # Primary DNS Address
DNS2= # Secondary  DNS Address
USERCTL=no # non-root user change setting (yes, no)
NM_CONTROLLED=yes # Enable setting on Network Management Tools (yes, no)

 

파일 수정 후 저장한 뒤

service network restart
or
/etc/init.d/network restart

Linux mount

■ 리눅스에서  다른 파티션 하드디스크(디바이스) mount 하기

(1) 디바이스 확인
root 계정에서 fdisk -l 명령으로 현재 모든 디스크의 MBR에 저장되어 있는 파티션 설정내용을 확인 할 수 있다.

\"\"

– sda2 : 윈도우 파티션
– sda3 : 데이터 백업용 파티션
– sda4 : 리눅스 파티션


(2) 디바이스 마운트
mount -t [type] [dev] [dir]

– [type] : 파일 시스템 타입
– [dev] : 마운트 할 대상 디바이스
– [dir] : 마운트하여 사용할 디렉토리 경로

(ex) sda3를 마운트 할 때
mount -t ntfs /dev/sda3/ /home/beloved/mnt/
– /home/beloved/mnt/ 폴더에 들어가면 \’데이터 백업용 파티션\’의 내용을 확인할 수 있다.


(3) 디바이스 언마운트
unmount [dir]

(ex) sda3를 언마운트 할 때
umount /home/beloved/mnt/
– umount 시 해당 폴더에서 나와서 명령어 실행해야함!


(4) 전체 명령 동작
\"\"

– 디바이스 확인
– 해당 디바이스 마운트
– 경로이동 후 확인
– 언마운트

 

Linux inode

위키백과(영문)

위키백과(한글)

 

어원

Dennis Rich 왈

그딴거몰라

 

원문.

In truth, I don\’t know either. It was just a term that we started to use. \”Index\” is my best guess, because of the slightly unusual file system structure that stored the access information of files as a flat array on the disk, with all the hierarchical directory information living aside from this. Thus the i-number is an index in this array, the i-node is the selected element of the array. (The \”i-\” notation was used in the 1st edition manual; its hyphen was gradually dropped.)

 

 

아이노드에 포함된 정보[편집]

  • 파일 모드 : 파일과 관계된 접근과 실행 권한을 저장하는 16비트 플래그
비트 내용
12-14 파일 형식(일반, 디렉터리, 문자 또는 블록 특별, 선입선출 파이프)
9-11 실행 플래그
8 소유자 읽기 허가
7 소유자 쓰기 허가
6 소유자 실행 허가
5 그룹 읽기 허가
4 그룹 쓰기 허가
3 그룹 실행 허가
2 다른 사용자 읽기 허가
1 다른 사용자 쓰기 허가
0 다른 사용자 실행 허가
  • 링크 수 : 이 아이노드에 대한 디렉터리 참조 수
  • 소유자 아이디 : 파일의 소유자
  • 그룹 아이디 : 이 파일과 관계된 그룹 소유자
  • 파일 크기 : 파일의 바이트 수
  • 파일 주소 : 주소 정보(39바이트)
  • 마지막 접근 : 마지막으로 파일에 접근한 시각
  • 마지막 수정 : 마지막으로 파일을 수정한 시각
  • 아이노드 수정 : 마지막으로 아이노드를 수정한 시각

 

Linux yum

공식사이트

위키백과(한글)

위키백과(영문)

레드햇 서포트

 

업데이트 목록 보기

# yum list updates

업데이트 목록의 다운로드 및 업데이트 설치

# yum update –y

설치된 rpm 패키지 목록 보기

# rpm -qa 
# yum list installed

gcc 패키지 설치여부 확인

# rpm -qa | grep gcc 
# yum list installed gcc

gcc 패키지 설치

# yum install gcc gcc-c++

gcc 패키지 업데이트

# yum update gcc gcc-c++

패키지 이름으로 검색

# yum list 패키지명 
# yum list 정규식 
# yum list gcc 
# yum list gcc*

여러개의 패키지를 설치

# yum install gcc gcc-c++

패키지 삭제

# yum remove gcc gcc-c++

설치 가능한 모든 패키지 보기

# yum list

패키지 그룹 보기

# yum grouplist

그룹 패키지 설치

# yum groupinstall \"Development Tools\"

그룹 패키지 업데이트

# yum groupupdate \"Development Tools\"

그룹 패키지 삭제

# yum groupremove \"Development Tools\"

아키텍처 지정 설치

# yum install mysql.i386

파일 보유 패키지명 확인

# rpm -qf /etc/passwd 
# yum whatprovides /etc/passwd

매뉴얼 보기

# man yum

yum 미러 서버중 속도가 빠른 서버를 자동으로 찾아서 연결 (yum fastestmirror 패키지를 설치)

Cent OS 4.X 
# yum install yum-plugin-fastestmirror -y 
Cent OS 5.X 
# yum install yum-fastestmirror –y
Cent OS 6.X
자동으로 설치 되어있음

rpmforge 저장소 사용
기본제공 rpm이외의 추가적인 rpm 패키지를 사용하고자 한다면 rpmforge를 이용

Linux RPM

1. RPM이란?

RPM은 Redhat Package Manager의 약자로 아주 간편하고 사용하기 편한 패키지 관리자이다. 현재 국내에서 배포된 많은 리눅스들이 레드햇을 기반으로 하고 있어 사용의 범위가 넓다.

이번 강좌에서는 RPM을 사용하는 방법에 대해서 다루려한다. 이번 강좌에서는 RPM을 만든다거나 하는 고급(?)에 대해서는 다루지 않고 설치와 제거, 패키지 설치여부 등 간단한 기능만을 설명하도록 하겠다.

레드햇리눅스 7.2를 기준으로 RPM버전은 4.0.4-7x이다. 참고하기 바란다.

2. RPM 파일구조

RPM의 파일구조는 \’패키지이름-버전-릴리즈번호.소스여부.시스템.확장자\’로 되어 있다.

예를 들어서 설명하자면.
gcc-2.96-98.i386.rpm

* gcc – 패키지의 이름
* 2.96 – 패키지의 버전
* 98 – 패키지의 릴리즈 번호, 패키지가 몇 번째로 만들어진 것인지를 나타낸다. 똑같은 프로그램으로 다시 패키지 하여도 릴리즈는 올라간다.
* i386 – 시스템, 어떤 시스템에서 쓰이는 것인지를 나타내는 것이다. \’i386\’, \’i686\’등은 인텔계열의 시스템에서 \’sparc\’ SUN의 스팍 시스템용이고 \’alpha\’ 라면 알파 시스템용이다.
* 혹 네 번째 필드에 src라고 적혀있으면 그것은 소스 RPM이다. 바이너리 패키지를 만들기 위해서 필요하다. 일반적으로 많이 사용하는 편은 아니다.
* rpm – 확장자

3. RPM 설치하기

rpm으로 설치하는 기본방법은 \’-i\’ 옵션을 사용하는 것이다.

rpm -i gcc-2.96-98.i386.rpm

이런 식인데 이런식의 사용은 별로 좋지 못하다. 다음과 같은 방법을 사용하도록 한다.

rpm -Uvh gcc-2.96-98.i386.rpm

이렇게 사용하면 같은 패키지의 이전버전의 RPM이 설치되었는지 확인하고 만약 설치가 되어있다면 업그레이드를 한다. 물론 설치가 되어있지 않은 경우 설치를 한다.

4. RPM 제거하기

rpm -e gcc-2.96-98.i386

간단하게 \’e\’ 옵션을 사용한다.

5. RPM 패키지 찾기

rpm -q gcc

간단하게 \’q\’ 옵션을 사용한다. 이 경우 패당 패키지가 설치되어 있을 경우 패키지의 버전, 릴리즈등이 나온다.

6. 다양한 옵션 사용하기

6-1. 설치시의 옵션들

* –nodeps : 의존성을 무시하고 설치하도록 하는 옵션이다. RPM은 어떤 패키지가 깔려있을 경우 혹은 깔려있지 않은 경우 설치가 되는 않는 경우가 있다.
* –force : 강제로 설치하도록 한다. 현재의 패키지에 포함된 파일이 이미 다른 패키지에 의해 설치되어 있을 경우 충동이 나는데 이때 이 옵션으로 설치가 가능하다. 이 옵션은 이미 있는 파일을 덮어 쓰지 않는다.
* –replcaefiles : 위에서 이미 있는 파일을 덮어 쓰려면 이 옵션을 사용한다. 위험하니 주의 요망!!
* –oldpackage : 새로운 패키지를 지우고 옛날 버전의 패키지로 교체할 때 이 옵션을 사용한다.
* –percent : 설치과정을 퍼센트로 표시해 준다.
* –replacepkgs : 같은 패키지가 설치되어 있어도 설치한다.
* –test : 설치하지 않고 충동이 있는지 검사한다.
* –excludedocs : 문서 파일은 설치하지 않는다.

6-2. 제거시의 옵션들

설치 옵션에서 \’–nodeps\’, \’–noscripts\’, \’–test\’ 세가지만 사용한다.

6-3. 찾기시의 옵션들

찾을 때에는 \’-q\’ 옵션과 함께 사용한다. 예를 들어 \’-a\’ 라는 옵션은 \’-qa\’ 식으로 사용된다.

* -a : 모든 패키지를 찾는다.
* -f [파일] : [파일]을 포함하는 패키지를 찾는다.
* -p [패키지 파일] : 패키지 파일을 찾는다.
* -i : 패키지의 정보를 출력한다.
* -R : 패키지가 의존하고 있는 파일 또는 패키지 목록을 출력한다.
* -l : 패키지에 속한 파일을 출력한다.
* -s : 패키지에 속한 파일들의 상태를 출력한다.
* -d : 문서 파일만 출력한다.
* -c : 설정 파일만 출력한다.
* –scripts : 설치, 제거과정에서 스크립트가 포함되어 있을 경우 출력한다. 이 옵션은 따로 사용한다.

7. 네트웍으로 설치하기

RPM은 네트웍으로 설치가 가능하다. RPM 패키지의 위치만 정확하게 안다면 말이다.
예를 들어 다음과 같이 사용이 가능하다.

rpm -Uvh ftp://ftp.comager.com/gcc-2.96-98.i386.rpm

8. 마치면서

RPM은 참 편리한 패키지 관리자이다. 현재 많은 패키지들이 RPM으로 제작되어 배포되고 있으며 up2date를 통해서 지속적으로 업그레이드가 가능하다.


원본은 여기 인데 여기도 복붙… 원본사이트는 터진듯.

요즘은 yum이나 apt-get이 대세!

Why put in script on top ‘#!/bin/bash’?

`#!/bin/bash`

스크립트를 실행할때 실행되는 프로그램을 지정하기위한 부분.
‘쉬뱅(shebang)’이라고 읽는단다. (는 유닉스시절, 요즘은 ‘해쉬뱅(hashbang)’이라고 읽는듯)

* `#!/bin/sh` — Execute the file using sh, the Bourne shell, or a compatible shell
* `#!/bin/csh -f` — Execute the file using csh, the C shell, or a compatible shell, and suppress the execution of the user’s `.cshrc` file on startup
* `#!/usr/bin/perl -T` — Execute using Perl with the option for *taint* checks

 

[Shebang (Unix) – Wikipedia, the free encyclopedia](https://en.wikipedia.org/wiki/Shebang_(Unix))

[linux – Why do you need to put #!/bin/bash at the beginning of a script file? – Stack Overflow](http://stackoverflow.com/questions/8967902/why-do-you-need-to-put-bin-bash-at-the-beginning-of-a-script-file)