리눅스 파일 관리 및 입출력 리디렉션

파일 관리

Bash 명령 실행

passwd

passwd

일반 사용자 비밀번호 변경

passwd kimminsu

root 사용자 계정 비밀번호 관리

passwd -d kimminsu

root 사용자가 일반 사용자 비밀번호 삭제

file

file /bin/ls

cat

cat option 파일
cat -A /etc/hosts
#-A 옵션은 -VET와 동일

cat /etc/hosts /etc/fstab

여러 파일 한 번에 보기

head

head option 파일
head /etc/profile

#앞 4행만 보기
head -n 4 /etc/profile

head -n-3 /etc/profile

마지막 3행을 제외하고 모든 내용 보기

head -n3 /etc/hosts /etc/fstab

여러 파일의 앞 3행 보기

tail

tail /etc/profile #기본값으로 마지막 10행 보기

tail -n +4 /etc/profile

4행부터 마지막까지 모든 내용 보기

head -n 15 /etc/profile | tail -n 5

tail -n +11 /etc/profile | head -n 5

/etc/profile 파일의 11-15행 추출하는 두 가지 방법

less

less /etc/profile
q=종료
상하 방향키로 한 줄씩 보기
좌우 키로 페이지 넘기기
pageup과 pagedown으로 페이지 이동

wc

wc -l 출력 라인 수
wc -c 출력 바이트 수
wc -m 출력 문자 수
wc -L 가장 긴 행의 길이 표시
wc -w 단어 수 표시

echo

echo -n 줄바꿈 추가 안 함
echo -e 백슬래시 이스케이프 해석 활성화
echo -E 백슬래시 이스케이프 해석 억제

bashrc 설정 파일 -- 지속적 저장

seq -s + 10 #-s 사용법 구분자

grep username /etc/passwd
#nologin이 표시되면 로그인 불가능

사용자 수동 생성

#계정 추가
vim /etc/passwd
leesumin:x:1003:1003::/home/leesumin:/bin/bash

#그룹 추가
vim /etc/group
leesumin:x:1003:

#비밀번호 추가
vim /etc/shadow
#마지막 줄에 추가 평문은 ubuntu
$6$GfEDKn74yoEDbcXD$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::

#홈 디렉토리 준비
cp -r /etc/skel/ /home/leesumin
#이수민 홈 디렉토리 소유권 변경
chown leesumin:leesumin /home/leesumin
ll -d /home/leesumin

#테스트
ssh leesumin@localhost

/usr 시스템 설치 소프트웨어, 공유 라이브러리

/usr/bin 사용자 명령어

/usr/sbin 시스템 관리 명령어

/usr/local 로컬 사용자 정의 소프트웨어

/etc 시스템 설정 파일

/var 시스템 가변 데이터베이스, 캐시 디렉토리, 로그

/home 홈 디렉토리 (개인 공간) 일반 사용자가 개인 데이터와 설정 파일을 저장하는 위치, 각 사용자는 자신의 공간이 있음, /home/leesumin

/root 관리자 root의 홈 디렉토리

/tmp 임시 파일에 사용되는 전역 쓰기 가능 공간

/dev 장치 파일, 시스템이 하드웨어에 접근하기 위한

mkdir

mkdir dir00
mkdir dir01 dir02
mkdir -p dir00/dir01/dir02/dir03/dir04
두 개의 레이어를 건너뛰어 존재하지 않는 디렉토리 생성 시 -p 사용

cp

cp /etc/hosts .
현재 위치로 복사

cp /etc/hosts ./hosts-1
현재 위치로 복사하고 hosts-1로 이름 변경

cp /etc/passwd /etc/host.conf .
여러 파일을 현재 위치로 복사

cp -r /etc/yum .
디렉토리 복사 시 -r 사용, etc 아래 yum 디렉토리를 현재 위치로 복사

cp -r로 디렉토리를 복사할 때 대상 위치에 동일한 이름의 디렉토리가 있으면 소스 디렉토리를 동일한 디렉토리 아래에 배치하지 않고 덮어씁니다.

mv

mv hosts-1 /lab
단일 파일 이동

mv passwd hosts /home/leesumin/lab
여러 파일 이동, 대상 위치는 디렉토리만 가능

mv host.conf host.conf-new
이름 변경

mv lab /home/root
디렉토리 이동

rm

rm hosts
파일 삭제

cp /etc/pki/ca-trust/extracted/java/cacerts .
rm cacerts
쓰기 보호가 있는 파일 강제 삭제

rm -f cacerts
파일 강제 삭제, 확인하지 않음

rm -r /home/root/lab
재귀적 삭제

rm -rf
강제 재귀적 삭제

소프트 링크와 하드 링크

소프트 링크는 Windows의 바로가기와 유사합니다. 공간을 차지하는 큰 소스 파일을 소프트 링크로 원본 위치에 생성한 후, 소스 파일을 다른 위치로 이동하여 디스크 공간을 절약할 수 있습니다.
소프트웨어 패키지 소스 코드 컴파일 설치 시, 소프트웨어 서비스를 /usr/bin 디렉토리에 소프트 링크하여 전역에서 서비스를 시작할 수 있습니다.
ln -s 원본 위치 연결 이름

rm mytmp
소프트 링크를 삭제할 때 연결 이름 뒤에 / 구분자를 붙일 수 없습니다

하드 링크는 일반 파일이며 소스 파일과 동일한 inode 번호를 가집니다. 여러 파일 이름을 통해 동일한 데이터 블록에 접근할 수 있으며, 어떤 파일이 변경되면 나머지도 함께 변경됩니다.
ln hosts-1 hosts-2
ln은 기본적으로 하드 링크를 생성합니다

리눅스 입출력 리디렉션

파일로 출력 리디렉션

독립 출력

find /etc -name 'shadow'

etc 디렉토리에서 파일명이 shadow인 모든 파일 찾기

find /etc -name 'shadow' 1>shadow.list
cat shadow.list
1>shadow.list는 >shadow.list로 생략 가능
1과 > 사이에 공백이 없어야 합니다

찾은 파일명을 shadow.list에 덮어쓰기

find /etc -name 'shadow' >> shadow.list

찾은 파일명을 shadow.list에 추가

find /etc -name 'shadow' 2>shadow.err

여기서는 root 사용자를 사용했기 때문에 권한 부족 문제가 발생하지 않습니다. cat shadow.err를 사용해도 빈 것으로 표시되며, 일반 사용자로 전환하면 오류 정보를 볼 수 있습니다

find /etc -name 'shadow' 2>/dev/null
장치 파일 /dev/null은 항상 비어 있습니다

오류 정보를 버립니다

여기서 오류가 보이지 않는 것은 오류 정보가 비어있는 곳으로 리디렉션되었지만, root 사용자가 입력한 명령이기 때문에 권한 부족 오류 정보가 없기 때문입니다.

정보 출력 (표준 출력)

  • 위치: 터미널에 직접 표시 (표준 출력, 파일 설명자 1)
  • 내용: find 명령이 찾은 일치 파일 경로 (예: /etc/shadow)

오류 정보 (표준 오류)

  • 위치: 리디렉션하여 버림 (2>/dev/null은 모든 오류 버림)
  • 내용: 권한 부족, 디렉토리 없음 등 오류 (예: find: /etc/ssh: Permission denied)
find /etc -name 'shadow' > shadow.all 2>&1

오류 정보와 정확한 정보를 동일한 파일에 덮어쓰기

find /etc -name 'shadow' >> shadow.all 2>&1

오류 정보와 정확한 정보를 동일한 파일에 추가

프로그램으로 출력 리디렉션

파이프

파이프(|)를 사용하여 이전 명령의 출력을 다음 명령의 표준 입력으로 전달합니다

ip a | grep 'ens33$' | awk '{print $2}'
hostname -I로 IP도 가져올 수 있습니다

ens33 네트워크 카드 IP 주소 가져오기

파이프 뒤의 명령은 표준 입력을 받을 수 있어야 파이프와 함께 사용할 수 있습니다. 하지만 ls는 파이프로 전달된 표준 입력을 받지 않습니다.

echo /etc/passwd | ls -l

ls는 받지 않으므로 ls -l만 실행됩니다

echo /etc/passwd | xargs ls -l

tee

> shadow.list
cat shadow.list
비어있는 것을 shadow.list에 덮어쓰기 파일 내용 비우기

find /etc -name 'shadow' 2>/dev/null | tee shadow.list
cat shadow.list

tee 명령으로 파일에 덮어쓰기 저장

find /etc -name 'shadow' 2>/dev/null | tee -a shadow.list
cat shadow.list

tee 명령으로 파일에 추가 저장

프로그램에 표준 입력 리디렉션

cat /etc/hosts
cat < /etc/hosts

cat << EOF
> hello
> world 
>EOF

셸이 EOF를 읽으면 표준 입력 완료

프로그램이 표준 입력을 받는지 확인하는 방법: 가장 간단한 방법은 파일 내용을 표준 입력으로 리디렉션하여 프로그램에 전달하는 것입니다.

태그: 리눅스 파일 관리 입출력 리디렉션 셸 명령어 시스템 관리

5월 28일 23:25에 게시됨