1. 리눅스의 파일 구조, 기초 명령문
1) 리눅스의 폴더 구조
- 리눅스의 폴더구조는 /로 부터 시작됩니다.
- root아래에는 다양한 폴더들이 있습니다.
- 핵심 폴더는 아래와 같습니다.
/home (사용자의 홈 디렉토리) (윈도우 c/사용자)
/usr (응용프로그램 저장소)
/etc (프로그램이 시작되기 위해 필요한 설정파일 저장소)
/var (시스템 운영중에 발생한 데이터와 로그가 저장되는곳)
리눅스의 명령문에는 많은 옵션들이 들어가게 됩니다.
이런 옵션들은 처음부터 다 외우기보다는 주로 사용되는 옵션들은 기억하고 좀 더 궁금하다면 구글에 검색하세요.
2) 옵션
- 경로 이동 명령문 cd
현재 위치 확인=pwd
경로 이동=cd 경로
폴더 구조 확인=ls, ls -a, ls -l, ls -al
- 절대 경로와 상대 경로로 이동하기
상대 경로 ./ = cd 경로, cd ./경로
절대 경로 / = cd / cd /절대 경로 cd ~ (나의 홈 디렉토리로)
- 파일 or 폴더 생성하고 다루기 mkdir, rmdir, touch, rm, mv, cp
디렉토리 생성 = mkdir 폴더명
디렉토리 삭제 = rmdir 폴더명
파일 생성 = touch 파일명
파일 삭제 = rm 파일명(*표현식 사용 가능), rm -r 폴더명(하위 모든 폴더 삭제, -r 리컬시브 옵션), rm -ri 폴더명(묻고 답하기로 삭제, ri 리컬시브, 인터렉티브 옵션)
파일 이동(이름 변경) = mv 파일명 이동 경로/파일명
파일 복사(파일 복사 or 디렉토리 복사) = cp 파일명 이동 경로/복사할 파일명
- 편집기 다루기 vi, nano
- 편집기(윈도우메모장) 다루는 방법으로는 대표적으로 vi모드가 있습니다.
- vi는 명령모드에 따라서 조작하는 방법입니다.
- 상세한 내용은 아래 링크를 확인하세요
https://danielit.tistory.com/15
esc i esc :w esc :q esc :wq esc :q! (!는 강제실행) |
편집기(윈도우메모장) 다루는 방법으로는 대표적으로 nano가 있습니다.
^ -> ctrl
M -> alt
- 파일 찾기와 파일 정보 확인 find, cat, head, tail, grep
- 파일 찾기
특정 위치에서 파일을 이름으로 찾습니다.
find 경로 -name 파일명
find ./ -name Hello.java
find /home/coding404 -name *.java
특정 위치에서 파일을 크기로 찾습니다.
c는 바이트를 의미함 +는 보다 큰파일, - 는 보다 작은파일
find 경로 -size 파일크기
find ./ -size +1024c
find /home/coding404 -size -1024c
옵션은 나열이 가능
find 경로 -name *.java -size -1024c
- 파일 확인하기
파일의 전체를 한눈에 확인합니다.
cat 파일명
cat Hello.java
파일의 위 부분을 출력합니다. (옵션 -n )
head 옵션 파일명
head Hello.java
head -n5 Hello.java
파일의 아래 부분을 출력합니다. (옵션 -n)
tail 옵션 파일명
tail Hello.java
tail -n5 Hello.java
파일의 실시간 로그 출력합니다 (옵션 -f)
tail -f Hello.java
tail -fn30 Hello.java
파일 안에서 찾을 값을 검색합니다.(Hello.java에서 hel 단어를 찾는다.)
grep 찾을값 파일명
grep hel Hello.java
파일을 비교하여 다른 부분을 보여줍니다.
diff 파일명 파일명
diff Hello1.java Hello2.java
- 파일 압축하기, 압축 풀기 tar
ar옵션은 파일을 묶거나 풀어내는 옵션입니다.
옵션을 따라 묶기만 할 수도 있고, 압축으로 묶을 수도 있습니다.
추후 압축 파일을 FTP도구를 이용해서 옴긴다면 압축을 해제해서 사용 할 수 있습니다.
- 주요옵션
-c : tar로 묶기
-x : tar로 풀기
-z : gzip으로 압축하거나 해제함
-v : 묶거나 파일을 풀 때 과정을 화면으로 출력
-f : 파일명지정
- 파일명 지정하여 파일 묶고 풀기
tar 옵션 압축명 압축파일1 압축파일2 ….
파일묶기
tar -cf myJava.tar Hello2.java Hello.java
파일풀기
tar -xf myJava.tar
- 파일명 지정하여 파일 압축하여 묶고 풀기
압축하기
tar -zcf myJava.tar.gz *.java
압축해제
tar -zxf myJava.tar.gz
압축해제 과정을 로그로 출력
tar -zxvf myJava.tar.gz
실습
home/계정명/work 안에 myJava.tar.gz 파일을 coding404/example 폴더로 복사 하세요. 그리고 파일을 해제합니다.
- 심볼릭 링크 만들기 ln
리눅스를 사용하면서 화살표 모양을 보게 됩니다. 바로 심볼릭 링크입니다.
심볼릭 링크는 window의 바로가기 입니다.
링크의 두가지 개념
심볼릭링크(바로가기) vs 하드링크(동일한 실행 파일만들기)
- 심볼릭 링크는 window의 바로가기 입니다.
- 하드 링크는 완전 동일한 구조의 파일을 또 만드는 것입니다.
- 두 링크 모두 수정 시에 원본 파일이 변경됩니다.
- 두 링크 모두 삭제 시에 원본 파일에 영향은 없습니다.
두 링크의 차이
심볼릭 링크는 원본 삭제 시 영향이 있습니다.
하드 링크는 원본 삭제 시 영향이 없습니다.
보통 바로가기 수준의 심볼릭 링크가 많이 사용됩니다.
명령문으로 확인하기
- 옵션
-s : 심볼릭 링크로 생성
- 하드링크
ln 옵션 원본파일명 링크파일명
ln Hello.java Hello.ln
- 심볼릭링크
ln -s Hello.java Hello.ln
- 실습
cd /home/계정명/example ln -s Hello.java Hello1.ln ln Hello.java Hello2.ln ls -al cat Hello.ln rm Hello.ln
2. 사용자 생성과 권한 부여, 실행 권한
- window에는 계정 로그인 로그아웃이 있습니다.
- 리눅스도 사용자 계정을 만들 수 있고 사용할 수 있습니다.
1) 사용자 생성
계정 생성
useradd 사용자명
비밀번호 변경
passwd 사용자명
계정 변경
usermod 옵션 사용자명
계정 삭제
userdel 사용자명
사용자의 확인은 etc폴더에서 확인할 수 있습니다.
cat /etc/passwd 로 확인 가능 (시스템 식별번호:그룹번호)
cat /etc/group 로 그룹번호 확인 가능
cat /etc/sudoers 로 sudo권한 확인가능(추가 가능)
유저 정보 확인
cat /etc/passwd
- 첫번째, ubuntu는 사용자 이름이다.
- 두번째, x는 비밀번호이다. 보안을 위해 다른 파일에서 관리되기 때문에 x로 표시된다.
- 세번째, 1000은 해당 사용자가 부여받은 고유 ID이다.
- 네번째, 1000은 해당 사용자가 소속된 그룹의 고유 ID이다. 참고로 리눅스 사용자는 반드시 특정 그룹에 소속되어 있어야 한다.
- 다섯번째, ubuntu는 전체 이름이다. 전체 이름은 따로 설정하지 않으면 기본 사용자 이름으로 사용된다.
- 여섯번째, /home/ubuntu는 해당 사용자의 홈 디렉터리다. (사용자가 쓰는 폴더)
- 일곱번째, /bin/bash는 해당 사용자가 사용하는 기본 쉘이다. (bash 쉘 이라고한다)
- 사진에서 ubuntu씨는 bash쉘을 사용하고 있다.
- 사진에서 yopy0817씨는 본쉘을 사용하고 있다.
유저 그룹 확인
cat /etc/group
그룹이름 : 비밀번호 : 그룹ID : 그룹에 속한 사용자 이름
ubuntu씨는 1000번 그룹이라는 것을 알 수 있다.
yopy0817씨는 1001번 그룹이라는 것을 알 수 있다.
2) 폴더의 소유자 변경하기 chown
AWS환경 실습인 경우 ubuntu계정과 root계정에는 에는 비밀번호가 없습니다.
먼저 passwd명령으로 비밀번호를 지정합니다.
sudo passwd root
sudo passwd ubuntu
윈도우의 C:\사용자 경로로 들어가게 되면 계정명 폴더가 있지요?
리눅스에서도 계정을 생성하게 되면, home아래에 계정명 폴더가 생성되어야 합니다.
폴더에는 소유자 개념이 있습니다.
폴더의 주인만 해당 폴더를 사용 할 수 있는 권한을 가지게 됩니다.
시나리오
- 원본 계정(ubuntu) 으로 접속한다. (주의 - 다른계정은 sudo를 동작시킬 권한이 없습니다)
- home은 root의 권한이므로 sudo의 권한을 빌려 디렉토리를 생성한다.
sudo /home/계정명
3. 생성된 계정으로 접속을 해본다
su 계정명
4. /home/계정명 디렉토리를 만들게 되면 해당 폴더에 사용자가 파일을 생성할 수 있는 권한이 없습니다.
여기에서 yopy0817의 폴더의 소유권을 보면 ubuntu:ubuntu 입니다.
ubuntu폴더의 소유자와 소유그룹에 소속된 계정만 폴더와 파일을 생성 할 수 있는 권한이 있습니다.
즉 yopy0817은 본인폴더에 폴더,파일 생성을 못한다는 의미입니다.
명령문
- 폴더나 파일의 소유권을 바꾸는 명령입니다
- 소유권 변경은 sudo권한이 필요합니다.
주요 옵션
-R: 하위폴더의 모든소유권을 리컬시브로 하게 변경
sudo chown 옵션 소유자:소유그룹 디렉토리경로
예시
sudo chown yopy0817:yopy0817 /home/yopy0817
sudo chown -R yopy0817:yopy0817 /home/yopy0817
sudo chown (유저소유번호)1001:(유저소유그룹)1001 /home/yopy0817
이제 yopy0817은 본인 폴더에 파일과 폴더를 생성 할 수 있습니다.
3) 실행 파일과 실행 권한 chmod
- 유저를 생성하고, 폴더를 생성하고, 권한을 주려는 작업은 반드시 순서대로 일어나면 되겠네요.
- 명령문으로 한땀한땀 작성해도 되지만, 순차적인 명령문을 실행시키는 대표적인 파일로 쉘 스크립트가 있겠습니다.
- 쉘스크립트를 통해 실행 파일을 만들고 순차적으로 실행해 줄 수 있습니다..
쉘 스크립트는 사용할 수 있는 명령어들의 조합을 모아서 만든 배치(batch)파일 입니다.
운영체제의 Shell을 이용하여 한줄씩 순차적으로 읽으면서 명령어들을 실행시켜주는 인터프리터 기반 프로그램 실행파일 입니다. 쉘 파일은 변수, 제어문도 사용할 수 있습니다.
시나리오
1. 우분투 계정으로 접속한다.
su ubuntu
2. /home/계정명 폴더로 이동한다.
cd /home/계정명
3. vi를 이용해서 파일을 하나 만든다. 확장자는 sh를 붙인다.
vi createUser.sh
4. 파일 내용
#!/bin/sh
useradd user01
passwd user01
mkdir /home/user01
chown user01:user01 /home/user01
echo "create user : user01"
tail -n5 /etc/passwd
:wq 이용해서 저장한다
5. 실행시키기
sudo ./createUser.sh
./ 은 뭔가요? 실행파일은 리눅스 환경변수 경로에 등록되어 있다면 먼저 실행되기 때문에 보통 실행파일 앞에 상대 경로를 표현해준다. 이 파일은 실행파일이 아니기 때문에 동작이 되지 않습니다.
파일의 실행권한이란
앞쪽 부분 잘보세요
d + rwx + rwx + rwx 로 만들어 집니다.
맨앞에 d가 없죠? 파일이라는 뜻입니다.
맨앞에 d가 있죠? 디렉토리라는 뜻입니다.
- RWX의 의미
rwx = 읽기쓰기실행입니다. 스위치 처럼 켰다 껐다로 동작합니다. 켜져 있으면 1 꺼져 있으면 0으로 표현됩니다.
예시
rwx = 111 (십진수 변환 7) rw- = 110 (십진수 변환 6) r— = 100 (십진수 변환 4)
이진수 값은 십진수로 변경되어 하나의 권한이 됩니다.
- RWXRWXRWX의미
rwxrwxrwx = 소유권자:소유 그룹 권한:다른 사람들에 대한 권한 즉 rwx rw- r-- 는 7 6 4
실행권한 명령문
chmod 권한이진수합 파일명
예시
chmod 764 ./createUser.sh
이후 파일의 주인은 x권한(실행권한)이 생기고 녹색으로 변경되며, 실행 가능해 진다.
sudo ./createUser.sh
사실 쉘 파일은 권한이 없어도 실행하는 명령문이 있습니다.
(sh 을 붙이면 x권한 없어도 사실 됨)
sudo sh ./createUser.sh
4) 실행 파일에서 매개변수 사용하기
이전 시간에 쉘 스크립트 파일을 작성했습니다. user01로만 생성되도록 밖에 할 수 없었죠. 쉘 스크립트 파일은 매개변수를 전달할 수도 있고 변수, 제어문, 반복문 등이 사용 가능합니다. 실행파일에 매개변수 넘기기
- 실행파일 안에서 매개변수의 개수를 $1, $2, $3... 으로 표현한다
- 실행시킬 때 ./실행파일명 매개변수1, 매개변수2, 매개변수3 으로 실행한다.
시나리오
1. 코드를 수정해 주세요.
vi createUser.sh
2. 수정내용
#!/bin/sh
useradd $1
passwd $1
mkdir /home/$1
chown $1:$1
/home/$1
echo "create user :
$1" tail -n5 /etc/passwd
3. 실행
sudo ./createUser 유저명
이제 유저를 생성하고 폴더를 만들고 권한을 부여하는 작업을 한번에 할 수 있습니다!
사실 쉘 스크립트 파일은 제어문 반복문도 많이 쓰는데요. 나중에 작성할 일이 있다면 공부해서 사용하세요.
5) 향상된 유저 생성 방법
- 리눅스에는 조금 더 편하게 유저를 생성하는 방법을 제공합니다.
- home디렉토리 user폴더도 생성하고 소유권도 부여해줍니다.
sudo adduser 유저명
sudo deluser 유저명
'TIL > Linux' 카테고리의 다른 글
FTP를 이용하여 서버에 파일을 옮길 때 발생하는 Permission Denied 오류 해결 방법 (0) | 2023.05.21 |
---|---|
rinux로 data, schema.sql 생성 후 mysql_backup 하기(데이터 옮기기), .sh 파일로 한번에 실행하기 (0) | 2023.05.19 |
root 계정의 ssh 접속 허용 설정 (0) | 2023.05.15 |
day95-rinux (0) | 2023.03.27 |
day93-rinux (0) | 2023.03.21 |