728x90

패스워드 관련 파일 및 명령어

패스워드 정책

  • 대소문자, 숫자, 특수문자를 혼용하여 8글자 이상의 패스워드를 사용
  • 동일 문자를 연속 4회 이상 사용 금지
  • 패스워드 히스토리를 관리해 2 ~ 3개 이상 동일 패스워드를 사용 금지
  • 패스워드 변경 주기를 설정(패스워드 유효기간을 90일 이하로 설정)
  • 사전에 나오는 쉬운 단어나 이름은 패스워드로 사용하지 못하도록 설정
  • 기본 설정된 패스워드는 사용되지 못하도록 설정
  • 초기 부여된 패스워드는 사용자 최초 접속 시 변경하도록 설정

패스워드 정책 설정 파일

  • /etc/security/pwquality.conf

패스워드 기본값 설정 파일

  • /etc/login.defs

패스워드 관련 명령어

passwd [사용자명]

  • 해당 사용자의 패스워드를 변경
  • 사용자 명을 입력하지 않으면 현재 사용자의 패스워드로 변경
  • -n : 패스워드 변경 후 최소 사용 기간
  • -x : 패스워드 변경 후 최대 사용 기간
  • -w : 패스워드 만기일 이전에 사용자에게 경고 메시지를 전달할 날짜 지정
  • -f : 최초 로그인 시에 강제로 패스워드를 변경하도록 설정
  • -d : shadow 파일의 패스워드 필드 값을 제거, passwd 입력 없이 로그인 가능
  • -l : 해당 사용자의 상태를 locking으로 변경
  • -s : 해당 사용자의 현재 패스워드 설정 조회

접근 제어

su [-] [사용자 명]

  • 다른 사용자로 로그인할 때 사용한다.
  • -(dash)의 유무
  • su -root : 입력한 사용자의 사용자 초기화 파일 적용
  • su root : 현재 사용자의 환경을 유지, 사용자 초기화 파일 적용 x

who : 접속 정보

who am i : 현재 터미널에 대한 접속 정보

whoami : 로그인 명

last : /var/log/wtmp 파일을 참조해서 로그인했던 정보를 출력해주는 명령어, 자신의 시스템에 접속한 정보를 확인할 수 있다. (IP 확인 가능)

 

PAM(pluggable Authentication Modules)

  • 시스템에 공통적인 인증 방법을 제공
  • 어떤 보안 인증 기능을 추가할 때 모듈로 만들어서 쉽게 보안 설정 내용들을 교체 또는 추가 제거가 가능하다.
  • 모듈의 종류는 다양하며 각각 모듈의 기능을 정확히 파악하는 것이 중요
  • 프로그램이 사용자 인증이 필요하면 PAM라이브러리를 호출
  • PAM 라이브러리가 호출되면 호출한 응용프로그램의 설정 파일을 검사, 설정 파일의 내용에 맞는 PAM 모듈을 적용
  • 설정 파일이 없으면, 기본 설정 파일을 사용
  • 설정 파일은 사용자 인증을 검사하기 위해 필요한 유형(형식)을 가짐

/etc/pam.d 디렉토리 : PAM을 적용한 프로그램이나 서비스의 설정 내용을 저장해둔 파일들이 모여 있는 디렉터리

/usr/lib64 경로로 들어가면 모듈의 종류를 확인할 수 있다.

자주 사용하는 모듈

  • pam_permit.so, pam_deny.so : 항상 성공/실패를 return으로 접근, 접근을 허용/거부(가장 일반적인 모듈)
  • pam_warn : 호출한 사용자 및 호스트 정보를 messages 로그를 남김
  • pam_access : 계정 또는 IP주소를 이용해서 시스템 접근을 허용/거부
  • pam_pwcheck : /etc/login.defs 파일을 참조하여 암호를 확인하는 명령어
  • pam_security : /etc/security 파일을 참조하여 터미널 장치가 root로 접근할 수 있는지 없는지 판단
  • pam_time : 시간, 쉘 등을 설정할 수 있는 모듈
  • pam_wheel : su 서비스에 사용함, su를 이용한 root 접근을 막을 수 있음
728x90
728x90

사용자 관리 관련 파일

/etc/passwd

user:x:1000:1000:user:/home/user:/bin/bash

: 으로 필드를 구분한다.

user x 1000 1000 user /home/user /bin/bash
로그인명 사용x UID GID 주석(설명) 사용자 홈 디렉터리 로그인 쉘

로그인명

  • 각 사용자는 유일한 이름을 가지고 있어야 함(중복 허용 x)
  • 첫 문자는 영문자 (.-_시스템에 따라 사용 가능)

사용 x

  • (본 사용 목적 : 패스워드를 저장 부분) 현재 사용 x
  • etc/shadow 파일에 따로 저장

UID

  • 로그인명은 중복이 x, 그러나 UID는 중복이 가능
  • 시스템이 사용자를 식별하는 번호
  • (root의 권한을 가질 수도 있음)
  • 일반 사용자는 1000번 이상 사용
  • 일반적으로 1000보다 작은 UID는 예약 UID

GID

  • 해당 사용자가 속해있는 주 그룹의 GID

주석

  • 일반적으로 사용자 전체의 이름을 써준다. 또는 연락처, 부서 등 로그인명만으로 사용자의 구분이 힘들 때 자세한 설명을 쓰는 부분

사용자의 홈 디렉터리

  • 사용자의 홈 디렉터리
  • ~을 사용했을 때 참조하는 부분

로그인 쉘

  • 사용자가 로그인할 때 실행되는 쉘을 지정

계정 정보

root

  • 시스템에서 모든 권한을 가지고 있는 최고 권한 사용자
  • 시스템 내의 보호되는 파일이나 퍼미션 등의 제한 사항에 대해 대부분 영향을 받지 않는다.

bin

  • 시스템의 구동 중인 바이너리 파일을 관리하기 위한 계정

daemon

  • 백그라운드 프로세스에 대한 작업을 제어하기 위한 시스템 계정

adm

  • 시스템 로깅이나 특정 작업을 관리하는 시스템 계정

ip

  • 프린트를 위한 계정

gdm

  • Gnome Display관리 서비스 계정

/etc/shadow

name:encrypted_password:last_password_change:minimum:maximum:warning:inactivity:expiration

name : user 이름

encrypted_password

  • $id$salt$hashed
  • 암호화에도 $로 구분이 된다.
  • $id: 해싱 알고리즘(어떤 알고리즘을 사용했는지)
  • $1$: MD5
  • $2a$: Blowfish
  • $2y$: Eksblowfish
  • $5$: SHA-256
  • $6$: SHA-512
  • $salt: 해싱에 사용된 솔트(salt) 값
  • $hashed: 해싱된 비밀번호 값
  • *LK* : 해당 사용자는 로그인할 수 없는 lock이 걸린 사용자
  • window의 암호 저장 파일 경로 : C:Windows/System32/config/SAM

last_password_change : 패스워드 바꾼 날짜 1970/1/1일 기준으로 날짜까지 count

minimum : password 변경 후 최소 사용 기간

maximum : 최대 사용 기간

warning : 패스워드 만기일(expiration)부터 며칠 전부터 경고를 해줘라

inactivity : 얼마 기간 동안 로그인을 안 하면 잠금 계정으로 바꿀지 날짜를 지정해주는 필드

expiration : 패스워드 만기일 시간이 지나면 잠금 계정(locking)이 된다. 관리자가 해제를 해야 로그인을 할 수 있다.

Reserved : 예약 필드, 현재는 사용 안 함

/etc/group

root:x:0:

  • root : 그룹 이름
  • x : 패스워드
  • 0 : GID
  •  : 사용자 목록, 해당 그룹을 보조 그룹으로써 참조하는 사용자들의 로그인명을 작성

사용자 및 그룹 관리 명령어

useradd

useradd [옵션] [아규먼트] [사용자 이름]

  • -u : UID를 지정
  • -g : 주 그룹의 GID 설정
  • -G : 보조 그룹의 GID 설정
  • -d : 홈 디렉터리
  • -m : 홈 디렉터리 지정 시 홈 디렉터리가 존재하지 않는 경우 해당 디렉터리를 자동으로 생성하도록 하는 옵션
  • -s : 로그인 쉘 설정
  • -c : 주석(사용자에 대한 설명)
  • -f : 휴면 계정 전환 날짜 지정
  • -e : 만료일 지정

usermod

usermod [옵션] [아규먼트] [사용자 이름]

  • -u : UID를 지정
  • -g : 주 그룹의 GID를 설정
  • -G : 보조 그룹의 GID를 설정
  • -d : 홈 디렉터리
  • -s : 로그인 쉘 설정
  • -c : 주석(사용자에 대한 설명)
  • -f : 휴먼 계정 전환 날짜 지정
  • -e : 만료일 지정

userdel

userdel [옵션] [사용자 이름]

  • -r : 해당 사용자가 사용하던 홈 디렉터리도 같이 삭제

group 관련 명령어

groupadd

  • -g : 그룹의 GID 지정
  • -o : GID 중복 설정 가능하게 하는 옵션

groupmod

  • -g : 그룹의 GID 지정
  • -o : GID 중복 설정 가능하게 하는 옵션

groupdel

  • 그룹을 제거할 때 사용하는 명령어
728x90
728x90

부모 프로세스

다른 프로세스를 생성할 수 있는 프로세스

자식 프로세스

부모 프로세스로부터 만들어지는 프로세스

정상적으로 자식프로세스 종료 후 부모 프로세스 종료

데몬 프로세스

일반적으로 사용자가 실행시키지 않고 커널에 의해 구동, 백그라운드로 동작

특정 서비스를 제공하기 위해 구동

파일 이름 끝에 ‘d’를 붙여서 사용하는 것이 일반적

‘Window’의 서비스와 같은 존재

고아 프로세스

일반적으로 자식 프로세스는 종료되면 부모 프로세스로 되돌아 가는데 부모 프로세스가 먼저 종료된 경우에 자식 프로세스를 고아 프로세스라고 한다.

고아 프로세스는 init 프로세스가 처리해준다.

좀비 프로세스

정상적으로 프로세스를 종료했지만 자원을 반납하지 않은 상태로 계속 남아있는 상태(자원을 점유한 상태에서 동작하지 않는 프로세스)

프로세스 관련 명령어

ps : 윈도우의 작업관리자와 비슷하다.

  • -ef : 좀 더 상세하게 나타내주고 내가 실행하지않은 운영체제가 자동으로 실행해준 프로세스도 나온다.
  • -e : 시스템 상의 모든 프로세스 정보를 출력
  • -f : 상세한 정보를 출력
  • UID : 프로세스 소유자 아이디
  • PID : 프로세스 아이디
  • PPID : 부모 프로세스 아이디
  • C : 스케줄링을 위한 CPU 사용량, 별도 의미 없는 필드
  • STIME : 프로세스 시작 시간
  • TTY : 장치 번호
  • TIME : 프로세스에 대한 누적 실행 시간
  • CMD : 명령 옵션 + 아규먼트

pstree : 프로세스 부모 자식 관계를 트리 형태로 나타난다.

pgrep : PID만 뽑을 수 있다.

프로세스 제어 명령어

시그널 번호 (시그널은 프로세스를 제어하기 위해서 프로세스에게 전달하는 신호값)

1 SIGHUP(Sig Hang Up)
프로세스 종료 없이 프로그램을 새로 초기화
2 SIGINT
Interrupt
Ctrl + c 명령어 실행 중 중단 명령어 
9 SIGKILL
kill 무시할 수 없는 종료(Strongest)
15 SIGTERM
terminate
무시할 수 있는 종료

kill : PID로 프로세스를 제어

pkill : 프로세스 이름으로 제어 :: 이름에 해당하는 프로세스 모두 down가능

아카이브

  • 아카이브는 여러가지 목적이 있지만 전통적으로 사용된 용도는 파일의 저장용도로 사용되었다.
  • 테이프 장치에 파일을 보관하여 백업하거나 여러 파일을 하나의 파일로 묶어서 보관
  • 현재는 파일을 저장할 때뿐 아니라 단순히 여러 파일을 하나의 파일로 묶을 때도 사용
  • 일반적으로 프로그램을 tar 아카이브 후 gzip 압축한 형태로 배포하는 경우가 많다.

아카이브 관련 명령어

tar [기능] [아카이브 파일] [묶을 파일 1] [묶을 파일2] [묶을 파일3] ….

기능

  • c : 새로운 아카이브 파일을 생성
  • x : 아카이브 파일에서 여러 파일을 해제
  • t : 아카이브 파일에서 안의 내용을 조회
  • v : verbose, 명령어 수행과정을 자세히 출력
  • f : 아카이브 장치 지정(파일 또는 백업 장치를 지정)

아카이브 생성

tar cvf fruits.tar banana apple kiwi

아카이브 해제

tar xvf fruits.tar

압축

  압축 해제
zip zip [압축 파일 이름] [압축 파일 이름] … unzip [압축 파일 이름]
gzip gzip [압축 파일 이름] gunzip [압축 파일 이름]
bzip2 bzip2 [압축 파일 이름] bunzip2 [압축 파일 이름]

tar로 묶은 파일을 gzip으로 압축했을 때 한번에 풀려면 tar zxvf [파일 이름]

728x90
728x90

특수권한

일반적인 권한과는 조금 다른 특수한 권한

종류는 다음과 같이 3가지가 있다.

SetUID

  • 나머지 사용자가 파일을 실행할 때 소유자의 권한으로 접근할 수 있게 해주는 권한
  • root admin rws rwx rwx
  • ls -l 명령어를 이용해서 확인했을 때 특수권한이 부여된 파일은 소유자의 권한 부분 중 실행 권한 부분이 x가 아닌 s로 나타난다.
  • chmod 4xxx [파일 이름] 또는 chmod u+s [파일 이름] 명령어로 설정할 수 있다.

SetGID

  • 나머지 사용자가 파일을 실행할 때 관리 그룹의 권한으로 접근할 수 있게 해주는 권한
  • ls -l 명령어를 이용해서 확인했을 때 특수권한이 부여된 파일은 관리 그룹의 권한 부분 중 실행 권한 부분이 x가 아닌 s로 나타난다.
  • chmod 2xxx [파일 이름] 또는 chmod g+s [파일 이름] 명령어로 설정할 수 있다.

StickyBit

  • 디렉터리에 부여하는 권한, 디렉터리를 마치 자유게시판처럼 사용할 수 있게 해주는 권한 일반적으로 /tmp 디렉터리에 부여
  • ls -l 명령어를 이용해서 확인했을 때 특수권한이 부여된 파일은 나머지 사용자의 권한 부분 중 실행 권한 부분이 x가 아닌 t로 나타난다.
  • chmod 1xxx [파일 이름] 또는 chmod o+t [파일 이름] 명령어로 설정할 수 있다.
  • StickyBit는 디렉터리에 부여한다.
  • 대표적인 예로 /tmp
  • StickyBit가 부여된 디렉터리 내에서는 누구나 자신의 파일을 생성하거나 수정, 삭제가 가능하다.
  • 하지만 다른 사용자의 파일을 수정하거나 삭제할 수는 없다.(관리자는 가능)
  • 해당 디렉터리는 마치 인터넷 자유게시판처럼 사용된다.

쉘이란

  • 터미널에 입력한 명령을 해석하고 관리하는 프로그램을 쉘이라고 한다.
  • 쉘은 사용자 커널 사이에 연결시켜주는 역할을 하며 사용자가 입력한 명령을 해석하여 운영체제가 해당 명령을 알아들을 수 있게 해 준다.
  • 쉘은 여러 가지 종류가 있으며 가장 많이 사용되는 쉘은 Bash쉘이다.

경로 이름 메타 문자

  • ~ : 현재 로그인 한 사용자의 홈 디렉터리 (사용자 정보를 저장하고 있는 /etc/passwd 파일의 6번째에 설정된 디렉터리)
  • - : 이전 작업 디렉터리 (CentOS의 Bash 쉘 기준 바로 이 전의 디렉터리만 기억)

파일 이름 메타 문자

  • * : 하나 이상의 문자를 대체하는 문자, 일반적으로 전체를 의미 (특정 디렉터리 내의 모든 파일을 지정할 때 또는 특정 이름으로 시작할 때 등의 여러 가지로 활용)
  • ex) rm -rf ./* , rm -rt test*
  • ? : 하나의 문자만 대체

인용부호 메타 문자

  • `` : `` 안에 있는 문자를 명령어로 인식하여 실행되게 한다.
  • '' : 작은따옴표 안에 있는 메타 문자를 일반문자로 취급한다.
  • "" : 큰 따옴표 안에 있는 $, \\, ` 문자를 제외한 나머지 문자만 일반문자로 취급 
  • $는 리눅스 쉘에서 변수를 사용할 때 사용하는 문자

방향 재지정 메타문자

< : 표준 입력 재지정

> : 표준 출력 및 표준 에러를 재지정, 일반적으로 명령어의 출력을 파일로 저장 또는 네트워크로 전송

  • 파일에 저장할 때 : echo “test” > ./file
  • 정상적인 결과만 출력할 때 : find / -perm -4000 2 > /dev/null
  • 에러 결과만 출력할 때 : find / -perm -4000 1 > /dev/null
  • 정상적인 결과는 파일에 저장, 에러는 출력 X : find / -perm -4000 1 > ./setuid_file 2 > /dev/null
  • >를 한 번만 사용하면 파일의 내용을 덮어씀, >> 을 사용하면 기존의 파일의 내용에 이어서 씀

|: 파이프 문자, [명령어1] | [명령어 2]처럼 사용하며, 명령어 1의 결과를 명령어 2의 입력으로 사용

  • ex) ls /etc | grep rc ls 명령어의 결과에서 특정 문자를 포함한 라인만 뽑아 볼 때
  • ls /etc 결과 중에서 yum이 포함된 내용만 출력할 때
  • ls /etc | grep yum
  • ls /etc 결과가 너무 길어서 화면에 다 안 나와 끊어서 보고 싶을 때
  • ls /etc | more

사용자 초기화 파일

  • /etc/profile : 시스템 전역에 걸쳐 환경을 설정하는 파일, 모든 사용자가 적용되는 파일
  • ~/ .profile : 개별 사용자의 홈 디렉터리에 있는 파일, 해당 사용자의 설정을 변경할 때 사용
  • ~/ .bashrc : 개별 사용자의 홈 디렉터리에 있는 파일, 해당 사용자의 쉘 관련 설정을 변경할 때 사용
  • 환경 변수, 쉘 프롬프트 모양(명령어 앞에 붙는 내용), 별명 기능(alias), 쉘 옵션 정의 등 설정 가능

환경 변수

  • 시스템 환경에 대한 설정을 저장하고 있는 변수
  • HOME : 사용자의 홈 디렉터리
  • PATH : 실행파일을 찾는 경로
  • LANG : 프로그램 사용 시 기본 지원되는 언어
  • SHELL : 로그인해서 사용하는 쉘
  • EDITOR : 기본 편집기의 이름
  • PS1 : 명령 프롬프트 변수
728x90
728x90

링크

  • 특정 파일 또는 디렉터리에 접근을 쉽게 할 수 있도록 하는 방법
  • 파일 시스템이 물리적인 장치인 하드디스크 상에 저장되어있는 특정 파일의 위치를 가리키는 것

하드 링크

  • 하드 디스크의 특정 주소

심볼릭 링크

  • 윈도우의 바로가기 개념과 비슷하며 실질적인 디스크 상의 파일을 가리키는 것이 아니라 파일 시스템상의 특정 파일을 가리키는 것

링크 생성 명령어

  • ln [옵션] [원본] [링크]
  • 옵션을 지정하지 않고 링크 파일을 생성하면 하드 링크를 생성할 수 있다.
  • 옵션으로 -s를 지정하고 링크 파일을 생성하면 심볼릭 링크를 생성할 수 있다.

권한

  • 리눅스의 모든 파일과 디렉터리는 권한(퍼미션)을 가지고 있다.
  • 리눅스의 파일 시스템 상에 권한에 대한 정보를 저장하는 부분이 있다.
  • 퍼미션들은 시스템 상에 존재하는 파일들에 대한 읽기, 쓰기, 실행에 대한 접근 여부 결정
  • ls -l 명령어로 확인 가능
  • 이러한 퍼미션은 다중 사용자의 환경을 제공하는 리눅스 환경에서는 가장 기초적인 접근 통제 방법

drwxr-xr--. 3 root root 18 9월 28 22:07 .config

  • 총 10개의 문자, 첫 번째 문자는 해당 파일의 종류
  • 앞에 root는 소유자 뒤에 root는 그룹
  • 두 번째 ~ 열 번째 문자는 권한
  • 두 번째부터 열 번째 문자를 세 개씩 끊어서 읽는다.
  • rw- : 소유자 권한
  • r-x : 관리 그룹 권한
  • r-- : 나머지 권한
  • 소유자 : 일반적으로 파일이나 디렉터리를 생성한 사용자, 명령어로 변경 가능
  • 관리 그룹 : 파일이나 디렉터리를 생성한 사용자가 속한 그룹, 명령어로 변경 가능
  • 나머지 : 소유자도 아니고 관리 그룹에 속한 사용자도 아닌 경우
  • r : 읽기 권한이 있음
  • w : 쓰기 권한이 있음
  • x : 실행 권한이 있음
  • -: 권한이 없음

권한 설정 방법

  • chmod [권한] [파일 또는 디렉터리 이름]
  • [권한] : 권한을 입력할 때는 심볼릭 모드와 옥텟(8진수) 모드 2가지 방식을 이용하여 입력 가능하다.
  • [파일 또는 디렉터리 이름] : 파일, 디렉터리를 지정할 때는 절대 경로 또는 상대 경로 모두 가능하다.

심볼릭 모드

대상 권한 권한 부여 여부

소유자, u 읽기, r 권한부여, +
관리 그룹, g 쓰기, w 권한 회수, -
나머지 사용자, o 실행, x  

ex) 소유자에게 쓰기 권한을 준다.

chmod u+w file

옥텟 모드

---  --x -w- -wx r-- r-x  rw- rwx
0 1 2 3 4 5 6 7

r : 4, 읽기 권한이 있음

w : 2, 쓰기 권한이 있음

x : 1, 실행 권한이 있음

umask

파일 또는 디렉터리를 생성할 때 권한 값을 결정한다.

  기본 권한(8진수) 기본 권한(문자)
파일 644 rw-r- -r- -
디렉터리 755 rwxr-xr-x
  • 파일이나 디렉터리 생성할 때 기본적으로 권한 값은 파일의 경우 644 디렉터리의 경우 755로 설정된다.
  • 이 값은 umask 값에 의해서 결정되는 값으로 파일은 666에서 umask값을 not 연산을 수행 후 둘을 and 연산, 디렉터리는 777에서 같은 방식으로 구해진다.
  • umask 값은 umask 명령어를 이용해서 변경 가능하며 재부팅하면 초기화된다. umask의 기본값은 022이다.
  • 재부팅 후에도 적용을 시키려면 사용자 초기화 파일에 설정해야 한다.

권한에 따라 영향받는 파일 및 디렉터리 명령어

명령어 파일 디렉터리
읽기 more, cat, head, tail ls
쓰기 vi 편집기로 내용 수정 touch, mkdir, mv, cp, rm
실행 파일 이름 cd
728x90
728x90

grep 명령어

grep [옵션] [패턴] [파일 이름]

  • [옵션] : 좀 더 디테일한 조건으로 찾을 때 사용
  • [패턴] : 찾고 싶은 내용을 입력, 일치하는 내용을 출력, 정규표현식 사용 가능
  • [파일 이름] : grep 명령어로 특정 내용을 검색할 파일을 지정한다.
  • ex) grep -i root /etc/passwd

[옵션]

  • -i : 대소문자 무시
  • -n : 줄 번호 표시
  • -v : 패턴을 제외한 내용만 출력
  • -w : 단어 단위로 검색
  • -c : 매칭 되는 줄 수 표시
  • -l : 매칭되는 패턴이 있는 파일 이름 출력

[패턴]

  • 정규표현식 : 어떤 문자를 표현할 때 다양한 특수문자를 이용해 표현하는 방식
  • ^ : 줄의 시작을 지정(해당 패턴이 줄의 시작인 경우 캡처) ex) ^root로 했을 때 root is administrator 가 인식되고 guest is not root는 인식이 안된다.
  • $ : 줄의 마지막을 지정 ex) root$
  • . : 한 문자 대치 ex) r..t
  • : 여러 문자 대치 ex) r
  • [ ] : 패턴 중 한 문자 일치 ex) [rR]oot
  • [^]: 패턴 중 제외할 문자 지정 ex) [^T]oot : T를 제외한 oot 부분 출력

fgrep 명령어

fgrep [옵션] [패턴] [파일 이름]

  • 만약 문서에 특수문자가 포함된 경우 여러 특수 문자들은 정규표현식으로 인식되기 때문에 해당 정규표현식의 기능으로 검색이 될 수 있다. 이런 경우 fgrep은 여러 특수문자들(*, ₩, ‘, “ 등)을 단순한 문자로 인식해서 문서 내에서 해당 특수문자를 찾을 때 사용할 수 있다.

find 명령어

find [경로] [조건] [아규먼트] [행동] : 디렉터리 내에서 검색 명령어

  • [경로] : 어디를 기준으로 검색할 것인지 입력한다. 하위 디렉터리까지 검색
  • [조건] : 어떤 조건으로 검색할 것인지 입력한다.
  • [아규먼트] : 조건에 맞는 값을 입력해준다.
  • [행동] : 검색 결과를 어떻게 처리할 것인지 입력한다.
  • ex) find / -name file -exec rm -rf {} w특수문자;

[조건]

  • -name : 이름으로 검색
  • -type : 파일의 타입으로 검색 디렉터리는 d, 파일은 f
  • -perm : 권한으로 검색
  • -user : 소유자로 검색
  • -size : 파일 크기로 검색, + 이상, -이하, 단위는 512바이트 c, k 키로바이트, M 메가바이트, G 기가바이트
  • -atime : 파일의 마지막 접근 시간으로 검색
  • -mtime : 파일의 마지막 수정 시간으로 검색

[행동]

  • -ls : 자세한 결과 출력
  • -exec [명령어] {} w특수문자; : 검색한 파일을 특정 명령어로 실행
  • ex) -exec rm {} w특수문자; : 제거하기
728x90
728x90

RedirectAttributes에서 addAttribute와 addFlashAttribute 차이가 있습니다.

 

1. addAttribute

addAttribute는 보통 해당 페이지로 리다이렉트를 할 때 값을 넘겨주는 용도로 사용한다.

 

addAttribute를 사용하면 URL 뒤에 붙게돼서 addFlashAttribute와는 달리 값이 유지가 됩니다.

위 사진과 같이 URL에 result의 값이 전달됩니다. 

 

2. addFlashAttribute

addFlashAttribute를 사용해서 리다이렉트를 실행하면

addFlashAttribute로 전달한 result는 URL에 존재하지 않는 것을 확인할 수 있다.

 

즉, addAttribute는 URL에 붙어서 값이 전달되어 유지가 되지만 addFlashAttribute는 일회성으로 URL에 붙지 않고 세션 후 재지정 요청이 들어오면 값은 사라지게 됩니다. 즉 addFlashAttribute는 휘발성 성질을 가지고 있습니다. 성공 여부를 가리기 위해 임시적으로 값을 전달할 때 addFlashAttribute를 이용하면 됩니다.

728x90
728x90

9375번 패션왕 신해빈


내가 떠올린 풀이 해설

프로그래머스 위장 문제와 동일한 문제여서 어렵지 않게 해결할 수 있었습니다. HashMap을 이용해서 의상 종류를 key값으로 넣고 value값은 숫자로 넣습니다. 만약 같은 키가 있으면 숫자를 1 늘려줍니다. 정해진 value값으로 경우의 수를 이용해서 풀었습니다.


정확한 풀이

mport java.util.*;
import java.io.*;

public class Baek9375 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		int answer = 1;
		for(int i = 0; i < n; i++) {
			HashMap<String, Integer> hash = new HashMap<>();
			answer = 1;
			int m = Integer.parseInt(br.readLine());
			for(int j = 0; j < m; j++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				String clo = st.nextToken();
				String qwe = st.nextToken();
				hash.put(qwe, hash.getOrDefault(qwe, 0) + 1);
			}
			Set<String> keySet = hash.keySet();
			for(String key : keySet) {
				answer *= hash.get(key) + 1;
			}
			System.out.println(answer - 1);
		}
	}

}
728x90

+ Recent posts