251121 TIL

2025. 11. 21. 18:08Courses/아이티윌 오라클 DBA 과정

파일 접근 권한 관리(Cont.)

chmod(Cont.)

숫자로 권한 설정

  • 8진수(0~7) 각 숫자는 권한 패턴
8진수 2진수 rwx
0 000 ---
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx

 

유저 그룹 기타 사용자
rwx rwx rwx
7 7 7
# test1/test2/test3 디렉터리 생성
[ora3@oracle ~]$ mkdir -p test1/test2/test3

[ora3@oracle ~]$ ls -lR
.:
total 4
-rwxrwxrwx. 1 ora3 ora3 2427 Nov 20 03:13 passwd
drwxrwxr-x. 3 ora3 ora3   19 Nov 20 03:54 test1

./test1:
total 0
drwxrwxr-x. 3 ora3 ora3 19 Nov 20 03:54 test2

./test1/test2:
total 0
drwxrwxr-x. 2 ora3 ora3 6 Nov 20 03:54 test3

./test1/test2/test3:
total 0

# test1 안에 모든 파일 및 디렉터리 권한 변경
[ora3@oracle ~]$ chmod -R 755 test1

[ora3@oracle ~]$ ls -lR
.:
total 4
-rwxrwxrwx. 1 ora3 ora3 2427 Nov 20 03:13 passwd
drwxr-xr-x. 3 ora3 ora3   19 Nov 20 03:54 test1

./test1:
total 0
drwxr-xr-x. 3 ora3 ora3 19 Nov 20 03:54 test2

./test1/test2:
total 0
drwxr-xr-x. 2 ora3 ora3 6 Nov 20 03:54 test3

./test1/test2/test3:
total 0

# test1 디렉터리 삭제
[ora3@oracle ~]$ rm -r test1

기본 접근 권한

  • 리눅스에서 파일이나 디렉터리를 생성할 때 기본 접근 권한이 자동으로 설정됨
# 파일 생성
[ora3@oracle ~]$ ls -al > test
[ora3@oracle ~]$ ls -l
total 4
-rw-rw-r--. 1 ora3 ora3 507 Nov 20 04:00 test

# 디렉터리 생성
[ora3@oracle ~]$ mkdir new
[ora3@oracle ~]$ ls -l
total 4
drwxrwxr-x. 2 ora3 ora3   6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3 507 Nov 20 04:00 test
# mask 값
[ora3@oracle ~]$ umask
0002

# mask값을 문자로 출력
[ora3@oracle ~]$ umask -S
u=rwx,g=rwx,o=rx
  • 리눅스에서 기본적으로 파일을 생성하면 실행 권한(x)를 갖지 않음
파일 기본 권한(문자) rw- rw- rw-
파일 기본 권한(숫자) 111(6) 111(6) 111(6)
mask 값 000(0) 000(0) 010(2)
실제 파일 기본 권한 111(6) 111(6) 100(4)

 

디렉터리 기본 권한(문자) rwx rwx rwx
디렉터리 기본 권한(숫자) 111(7) 111(7) 111(7)
mask 값 000(0) 000(0) 010(2)
실제 디렉터리 기본 권한 111(7) 111(7) 100(5)
  • mask 값 변경
# 기존 mask 값 조회
[ora3@oracle ~]$ umask
0002
[ora3@oracle ~]$ umask -S
u=rwx,g=rwx,o=rx

# mask 값 변경
[ora3@oracle ~]$ umask 022

# 변경된 mask 값 조회
[ora3@oracle ~]$ umask -S
u=rwx,g=rx,o=rx
[ora3@oracle ~]$ umask
0022

# 파일 생성
[ora3@oracle ~]$ cal > cal_print

# 폴더 생성
[ora3@oracle ~]$ mkdir fri

# 권한 확인
[ora3@oracle ~]$ ls -l
total 8
-rw-r--r--. 1 ora3 ora3 150 Nov 20 04:17 cal_print # 644
drwxr-xr-x. 2 ora3 ora3   6 Nov 20 04:17 fri # 755
drwxrwxr-x. 2 ora3 ora3   6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3 507 Nov 20 04:00 test
  • root 계정의 기본 mask 값은 0022

chown

  • 파일이나 디렉터리의 소유자와 소유 그룹을 변경하는 명령어
  • chown 소유자:소유그룹 파일(디렉터리)
# root에서 ora3에 파일 생성
[root@oracle ~]# cp -v /etc/group /home/ora3
‘/etc/group’ -> ‘/home/ora3/group’

# ora3에서 파일 권한 조회 : group 파일의 소유자와 소유 그룹이 root
[ora3@oracle ~]$ ls -l
total 12
-rw-r--r--. 1 ora3 ora3  150 Nov 20 04:17 cal_print
drwxr-xr-x. 2 ora3 ora3    6 Nov 20 04:17 fri
-rw-r--r--. 1 root root 1034 Nov 20 04:27 group
drwxrwxr-x. 2 ora3 ora3    6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3  507 Nov 20 04:00 test

# root에서 /home/ora3/group 파일의 소유자와 소유자 그룹 변경
[root@oracle ~]# chown ora3:ora3 /home/ora3/group

# ora3에서 파일 권한 조회 : group 파일의 소유자와 소유 그룹이 ora3
[ora3@oracle ~]$ ls -l
total 12
-rw-r--r--. 1 ora3 ora3  150 Nov 20 04:17 cal_print
drwxr-xr-x. 2 ora3 ora3    6 Nov 20 04:17 fri
-rw-r--r--. 1 ora3 ora3 1034 Nov 20 04:27 group
drwxrwxr-x. 2 ora3 ora3    6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3  507 Nov 20 04:00 test
  • chown -R 소유자:소유그룹 파일(디렉터리) : 디렉터리 안에 있는 모든 파일과 서브 디렉터리에 대해 변경
# root에서 ora3에 디렉터리 및 파일 생성
[root@oracle ~]# mkdir -p /home/ora3/test1/test2

[root@oracle ~]# cp -v /etc/passwd /home/ora3/test1
‘/etc/passwd’ -> ‘/home/ora3/test1/passwd’

[root@oracle ~]# ls -l /home/ora3
total 12
-rw-r--r--. 1 ora3 ora3  150 Nov 20 04:17 cal_print
drwxr-xr-x. 2 ora3 ora3    6 Nov 20 04:17 fri
-rw-r--r--. 1 ora3 ora3 1034 Nov 20 04:27 group
drwxrwxr-x. 2 ora3 ora3    6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3  507 Nov 20 04:00 test
drwxr-xr-x. 3 root root   33 Nov 20 04:37 test1

[root@oracle ~]# ls -lR /home/ora3/test1
/home/ora3/test1:
total 4
-rw-r--r--. 1 root root 2427 Nov 20 04:37 passwd
drwxr-xr-x. 2 root root    6 Nov 20 04:37 test2

/home/ora3/test1/test2:
total 0

# ora3의 test1 디렉터리의 모든 파일 및 서브 디렉터리에 대해 소유자 및 소유 그룹 변경
[root@oracle ~]# chown -R ora3:ora3 /home/ora3/test1

[root@oracle ~]# ls -l /home/ora3
total 12
-rw-r--r--. 1 ora3 ora3  150 Nov 20 04:17 cal_print
drwxr-xr-x. 2 ora3 ora3    6 Nov 20 04:17 fri
-rw-r--r--. 1 ora3 ora3 1034 Nov 20 04:27 group
drwxrwxr-x. 2 ora3 ora3    6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3  507 Nov 20 04:00 test
drwxr-xr-x. 3 ora3 ora3   33 Nov 20 04:37 test1

[root@oracle ~]# ls -lR /home/ora3/test1
/home/ora3/test1:
total 4
-rw-r--r--. 1 ora3 ora3 2427 Nov 20 04:37 passwd
drwxr-xr-x. 2 ora3 ora3    6 Nov 20 04:37 test2

/home/ora3/test1/test2:
total 0
  • chown 소유자 파일(디렉터리) : 소유자만 변경
[root@oracle ~]# chown root /home/ora3/group

[root@oracle ~]# ls -l /home/ora3
total 12
-rw-r--r--. 1 ora3 ora3  150 Nov 20 04:17 cal_print
drwxr-xr-x. 2 ora3 ora3    6 Nov 20 04:17 fri
-rw-r--r--. 1 root ora3 1034 Nov 20 04:45 group
drwxrwxr-x. 2 ora3 ora3    6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3  507 Nov 20 04:00 test
drwxr-xr-x. 3 ora3 ora3   33 Nov 20 04:37 test1
  • chown :소유그룹 파일(디렉터리) : 그룹만 변경
[root@oracle ~]# chown :root /home/ora3/group

[root@oracle ~]# ls -l /home/ora3
total 12
-rw-r--r--. 1 ora3 ora3  150 Nov 20 04:17 cal_print
drwxr-xr-x. 2 ora3 ora3    6 Nov 20 04:17 fri
-rw-r--r--. 1 ora3 root 1034 Nov 20 04:45 group
drwxrwxr-x. 2 ora3 ora3    6 Nov 20 04:01 new
-rw-rw-r--. 1 ora3 ora3  507 Nov 20 04:00 test
drwxr-xr-x. 3 ora3 ora3   33 Nov 20 04:37 test1

chgrp

  • 소유 그룹 변경
  • chown :소유그룹 파일(디렉터리) 와 동일
# 소유 그룹 변경
[root@oracle ~]# chgrp ora3 /home/ora3/group

[root@oracle ~]# ls -l /home/ora3/group
-rw-r--r--. 1 ora3 ora3 1034 Nov 20 04:45 /home/ora3/group
# 디렉터리 안의 파일 및 서브 디렉터리까지 모두 소유 그룹 변경
[root@oracle ~]# chgrp -R root /home/ora3/test1

[root@oracle ~]# ls -lR /home/ora3/test1
/home/ora3/test1:
total 4
-rw-r--r--. 1 ora3 root 2427 Nov 20 04:37 passwd
drwxr-xr-x. 2 ora3 root    6 Nov 20 04:37 test2

/home/ora3/test1/test2:
total 0

파일 압축

tar

  • 파일을 압축하고, 압축 해제하는 명령어
# ora3 의 모든 디렉터리 및 파일 삭제
[ora3@oracle ~]$ rm -r *

# 테스트를 위한 샘플 디렉터리 및 파일 생성
[ora3@oracle ~]$ mkdir test
[ora3@oracle ~]$ cal > ./test/ex1.txt
[ora3@oracle ~]$ date > ./test/ex2.txt
[ora3@oracle ~]$ ls -al > ./test/ex3.txt
[ora3@oracle ~]$ cp -v /etc/passwd ./test
‘/etc/passwd’ -> ‘./test/passwd’
[ora3@oracle ~]$ cp -v /etc/group ./test
‘/etc/group’ -> ‘./test/group’
[ora3@oracle ~]$ cd test
[ora3@oracle test]$ ls -l
total 20
-rw-r--r--. 1 ora3 ora3  150 Nov 20 05:08 ex1.txt
-rw-r--r--. 1 ora3 ora3   29 Nov 20 05:08 ex2.txt
-rw-r--r--. 1 ora3 ora3  507 Nov 20 05:08 ex3.txt
-rw-r--r--. 1 ora3 ora3 1034 Nov 20 05:08 group
-rw-r--r--. 1 ora3 ora3 2427 Nov 20 05:08 passwd

# tar cvf : 압축할 파일 모으기
[ora3@oracle test]$ tar cvf all.tar *
ex1.txt
ex2.txt
ex3.txt
group
passwd

[ora3@oracle test]$ ls -lh
total 32K
-rw-r--r--. 1 ora3 ora3  10K Nov 20 05:10 all.tar
-rw-r--r--. 1 ora3 ora3  150 Nov 20 05:08 ex1.txt
-rw-r--r--. 1 ora3 ora3   29 Nov 20 05:08 ex2.txt
-rw-r--r--. 1 ora3 ora3  507 Nov 20 05:08 ex3.txt
-rw-r--r--. 1 ora3 ora3 1.1K Nov 20 05:08 group
-rw-r--r--. 1 ora3 ora3 2.4K Nov 20 05:08 passwd

# tar zcvf : 압축할 파일 모은 후 압축
[ora3@oracle test]$ tar zcvf all.tar.gz *
all.tar
ex1.txt
ex2.txt
ex3.txt
group
passwd

[ora3@oracle test]$ ls -lh
total 36K
-rw-r--r--. 1 ora3 ora3  10K Nov 20 05:10 all.tar
-rw-r--r--. 1 ora3 ora3 2.0K Nov 20 05:11 all.tar.gz
-rw-r--r--. 1 ora3 ora3  150 Nov 20 05:08 ex1.txt
-rw-r--r--. 1 ora3 ora3   29 Nov 20 05:08 ex2.txt
-rw-r--r--. 1 ora3 ora3  507 Nov 20 05:08 ex3.txt
-rw-r--r--. 1 ora3 ora3 1.1K Nov 20 05:08 group
-rw-r--r--. 1 ora3 ora3 2.4K Nov 20 05:08 passwd

# home으로 이동
[ora3@oracle test]$ cd

# new 폴더 생성
[ora3@oracle ~]$ mkdir new

[ora3@oracle ~]$ ls
new  test

# test에서 생성한 all.tar.gz 압축 파일을 new 디렉터리 안에서 압축 해제
[ora3@oracle ~]$ tar zxvfC ./test/all.tar.gz ./new
all.tar
ex1.txt
ex2.txt
ex3.txt
group
passwd

[ora3@oracle ~]$ ls -l new
total 32
-rw-r--r--. 1 ora3 ora3 10240 Nov 20 05:10 all.tar
-rw-r--r--. 1 ora3 ora3   150 Nov 20 05:08 ex1.txt
-rw-r--r--. 1 ora3 ora3    29 Nov 20 05:08 ex2.txt
-rw-r--r--. 1 ora3 ora3   507 Nov 20 05:08 ex3.txt
-rw-r--r--. 1 ora3 ora3  1034 Nov 20 05:08 group
-rw-r--r--. 1 ora3 ora3  2427 Nov 20 05:08 passwd
  • c : create, 여러 개의 파일을 하나로 묶음
  • v : view, 압축되는 과정을 화면에 출력
  • f : file, 생성될 파일명을 지정
  • z : gzip, 압축 적용
  • x : extract, 묶여 있는 파일 해제
  • C : Change, 압축이 풀릴 위치 지정

zip

  • 압축 하는 명령어
# 압축
[ora3@oracle test]$ zip all.zip *
  adding: all.tar (deflated 82%)
  adding: all.tar.gz (stored 0%)
  adding: ex1.txt (deflated 33%)
  adding: ex2.txt (stored 0%)
  adding: ex3.txt (deflated 60%)
  adding: group (deflated 47%)
  adding: passwd (deflated 61%)

[ora3@oracle test]$ ls -lh
total 44K
-rw-r--r--. 1 ora3 ora3  10K Nov 20 05:10 all.tar
-rw-r--r--. 1 ora3 ora3 2.0K Nov 20 05:11 all.tar.gz
-rw-r--r--. 1 ora3 ora3 6.5K Nov 20 06:59 all.zip
-rw-r--r--. 1 ora3 ora3  150 Nov 20 05:08 ex1.txt
-rw-r--r--. 1 ora3 ora3   29 Nov 20 05:08 ex2.txt
-rw-r--r--. 1 ora3 ora3  507 Nov 20 05:08 ex3.txt
-rw-r--r--. 1 ora3 ora3 1.1K Nov 20 05:08 group
-rw-r--r--. 1 ora3 ora3 2.4K Nov 20 05:08 passwd

unzip

  • 압축을 푸는 명령어
# 압축을 풀 폴더 생성
[ora3@oracle ~]$ mkdir test1

# 압축 해제
[ora3@oracle ~]$ unzip ./test/all.zip -d ./test1
Archive:  ./test/all.zip
  inflating: ./test1/all.tar
 extracting: ./test1/all.tar.gz
  inflating: ./test1/ex1.txt
 extracting: ./test1/ex2.txt
  inflating: ./test1/ex3.txt
  inflating: ./test1/group
  inflating: ./test1/passwd

Java 프로그램 실행

MobaXterm

  • FTP를 통한 파일 전송을 위해 사용

  • jdk 압축 폴더 /root 로 드래그

JDK 압축 해제

# /usr/java 디렉터리 생성
[root@oracle ~]# mkdir -p /usr/java
[root@oracle ~]# cd /usr/java
[root@oracle java]# pwd
/usr/java
[root@oracle java]# ls

# root 홈 디렉터리로 이동
[root@oracle java]# cd
[root@oracle ~]# pwd
/root

# jdk 압축 파일을 /usr/java로 이동
[root@oracle ~]# mv -v jdk-8u131-linux-x64.tar.gz /usr/java
‘jdk-8u131-linux-x64.tar.gz’ -> ‘/usr/java/jdk-8u131-linux-x64.tar.gz’

# /usr/java로 이동 및 jdk 파일 확인
[root@oracle ~]# cd /usr/java
[root@oracle java]# ls
jdk-8u131-linux-x64.tar.gz

# jdk 파일 압축 해제
[root@oracle java]# tar xvfz jdk-8u131-linux-x64.tar.gz
...
[root@oracle java]# ls -l
total 181196
drwxr-xr-x. 8   10  143      4096 Mar 15  2017 jdk1.8.0_131
-rw-r--r--. 1 root root 185540433 Nov 20 07:13 jdk-8u131-linux-x64.tar.gz

java 환경 변수 설정(root)

# java 환경 변수 설정
[root@oracle ~]# vi .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
export JAVA_HOME=/usr/java/jdk1.8.0_131
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

export PATH

# 변경 사항 적용
[root@oracle ~]# source .bash_profile

# java 환경 변수 출력
[root@oracle ~]# echo $JAVA_HOME
/usr/java/jdk1.8.0_131

# java 버전 확인 -> 여전히 openjdk 사용 중
[root@oracle ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

JDK 후보 설정

# java 명령어 실행 경로 출력
[root@oracle ~]# which java
/usr/bin/java

# /usr/bin/java는 /etc/alternatives/java를 가리키는 심볼릭 링크
[root@oracle ~]# ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 Nov 20 11:00 /usr/bin/java -> /etc/alternatives/java

# /etc/alternatives/java는 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/bin/java를 가리키는 심볼릭 링크
[root@oracle ~]# ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 71 Nov 20 11:00 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/bin/java

# java 명령어를 실행할 jdk 후보 목록에 새 jdk 추가
[root@oracle ~]# update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.8.0_131/bin/java" 1

# java 명령어를 실행할 jdk 선택
[root@oracle ~]# update-alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/bin/java)
   2           /usr/java/jdk1.8.0_131/bin/java

Enter to keep the current selection[+], or type selection number: 2

# 새로 설치한 jdk로 변경됨
[root@oracle ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

# /usr/bin/java는 /etc/alternatives/java를 가리키는 심볼릭 링크
[root@oracle ~]# ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 Nov 20 11:02 /usr/bin/java -> /etc/alternatives/java

# /etc/alternatives/java는 /usr/java/jdk1.8.0_131/bin/java를 가리키는 심볼릭 링크
[root@oracle ~]# ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 31 Nov 20 11:02 /etc/alternatives/java -> /usr/java/jdk1.8.0_131/bin/java

java 명령어를 실행할 jdk 후보 목록에서 특정 jdk 제거

[root@oracle ~]# update-alternatives --remove java "/usr/java/jdk1.8.0_131/bin/java"

java 프로그램 컴파일 및 실행(ora3)

# 자바 파일 작성
[ora3@oracle ~]$ vi Hello.java

class Hello{
        public static void main(String arg[]){
                System.out.println("Hello Java");
        }
}

# 자바 파일 컴파일 -> 오류: ora3에는 java 환경 변수가 설정되어 있지 않음
[ora3@oracle ~]$ javac Hello.java
bash: javac: command not found...
Similar command is: 'java'

# 사용자 홈 디렉터리마다 .bash_profile 존재
# root계정에서 환경변수를 설정했더라도 다른 일반 사용자까지 적용되지 않음

# 환경변수 설정
[ora3@oracle ~]$ vi .bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

export JAVA_HOME=/usr/java/jdk1.8.0_131
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin

export PATH

# 변경 사항 적용
[ora3@oracle ~]$ source .bash_profile

# 자바 환경 변수 출력
[ora3@oracle ~]$ echo $JAVA_HOME
/usr/java/jdk1.8.0_131

# java 파일 컴파일 -> 클래스 파일 생성
[ora3@oracle ~]$ javac Hello.java
[ora3@oracle ~]$ ls -l
total 16
-rw-r--r--. 1 ora3 ora3  414 Nov 20 08:47 Hello.class
-rw-r--r--. 1 ora3 ora3   94 Nov 20 08:42 Hello.java
drwxr-xr-x. 2 ora3 ora3 4096 Nov 20 06:59 test
drwxr-xr-x. 2 ora3 ora3 4096 Nov 20 07:01 test1

# 자바 프로그램 실행
[ora3@oracle ~]$ java Hello
Hello Java

'Courses > 아이티윌 오라클 DBA 과정' 카테고리의 다른 글

251120 TIL  (0) 2025.11.20
251119 TIL  (0) 2025.11.19
251118 TIL  (0) 2025.11.18
251117 TIL  (0) 2025.11.17
251114 TIL  (0) 2025.11.14