Day59

2021. 1. 6. 10:25교육과정/KOSMO

키워드 : 파이썬 날짜형 / 파이썬 리스트 / 파이썬 stdio / 리눅스 심볼릭링크 / vi 에디터

 

****

 

 

1. 날짜형 

 

※ 외부라이브러리 사용하기

 메뉴 - File - Settings
   - Project: ~~~
   - Python Interpreter (현재 설치된 패키지들을 확인할 수 있다.)

   -  + 클릭
   - 설치하고자 하는 라이브러리 검색
   - Install Package
   - 녹색 바 완료를 기다린다. 

 

# pip install 필요한 라이브러리

 

 

 

(1) 한 달 뒤 날짜 출력하기 ( dateutil.relativedelta 라이브러리 사용)

from datetime import date
today = date.today();
from dateutil.relativedelta import relativedelta
print( '한달전', today + relativedelta(months=1))

# 실행결과
'''
한달전 2021-02-06
'''

 

(2) 날짜 형식 출력 ( strftime( ) )

 strftime ( ) 은 출력할 문자열에 사용하는 함수
 ~~~ . .strftime( "%m-%d-%y  %H:%M:%S")
from datetime import datetime
onul = datetime.today()

print(onul)
print(onul.strftime( "%m-%d-%y"))
print(onul.strftime( "%m-%d-%y >> %H:%M:%S"))

# 실행결과
'''
2021-01-06 09:52:29.573730
01-06-21
01-06-21 >> 09:54:34
'''

 

(3) 문자열을 날짜형으로 변환 ( strptime( ) )

 strptime( ) 은 datetime에 사용하는 함수
 datetime . strptime( ~~~, '%Y-%m-%d %H:%M' )
naljja = '2021-01-08 12:50'
mydate = datetime.strptime(naljja, '%Y-%m-%d %H:%M')

print(mydate)
print(type(mydate))

# 실행결과
'''
2021-01-08 12:50:00
<class 'datetime.datetime'>
'''

 


2. 리스트

      1- 임의의 객체를 순차적으로 저장하는 집합 자료형
      2- 각 값에 대해 인덱스 부여
      3- 변경가능 (**)
      4- 대괄호 [ ] 사용

      [참고]
      배열은 연속적으로 공간을 저장하는 것이니깐 파이션에는 없다
      파이션에서는 리스트를 사용한다
      배열은 생성시 크기를 지정하지만 리스트트 크기 제한이 없다

 

arr = []                # 비워져 있는 리스트 생성
arr = [1,2,3,4,5]

 

(1) 리스트에 요소 추가 및 특정 요소 출력하기

    [1, 2, 3, 4, 5, 10]
    [1, 2, 3, 4, 5, 10, 'hello']
    1
    10
    HELLO
    h
arr.append(10)
print(arr)

arr.append('hello')
print(arr)

print(arr[0])
print(arr[5])
print(arr[6].upper())
print(arr[6][0]) 또는 print(arr[-1][0])

 

 

(2) 이중 리스트 만들고 인덱싱하기

[1, 2, 3, 4, 5, 10, 'hello']
arr.append([])
print(arr)

# 실행결과 
'''
[1, 2, 3, 4, 5, 10, 'hello', []]
'''

 

※ 이중 리스트 안에 'korea' 삽입하기

arr[-1].append('korea')
print(arr

# 실행결과
'''
[1, 2, 3, 4, 5, 10, 'hello', ['korea']]
'''

 

※ 'a' 만 출력하기

print(arr[-1][0][-1])

# 실행결과
'''
a
'''

 

※ 연습문제

    a = ['인천','부산',['전라','경상',['판교','부천']]]
    (1) '경상' 요소 추출
    (2) '부천' 요소 추출
    (3) '판'이라는 글자만 추출
print(a[2][1])
print(a[2][2][1])
print(a[2][2][0][0])

또는

print(a[-1][-2])
print(a[-1][-1][-1])
print(a[-1][-1][-2][0])

# 실행결과
'''
경상
부천
판
'''

 

※ 연습문제

    a = ['인천','부산',['전라','경상'],['대전','광주','대구'], '서울','제주']
    (1) '부산'부터 '대구'까지 추출
    (2) '대전'부터 '제주'까지 추출
    (3) '인천'부터 '서울'까지 추출
    (4) '광주'부터 '대구'까지 추출
print(a[1:4])
print(a[3:])
print(a[:-1])
print(a[-3][1:])

# 실행결과
'''
['부산', ['전라', '경상'], ['대전', '광주', '대구']]
[['대전', '광주', '대구'], '서울', '제주']
['인천', '부산', ['전라', '경상'], ['대전', '광주', '대구'], '서울']
['광주', '대구']
'''

 

(3) 리스트 연산자

    a = ['독','도','는']
    b = ['대한민국','섬']
print(a + b)
print(a * 3)

# 실행결과
'''
['독','도','는', '대한민국','섬']
['독','도','는', '독','도','는', '독','도','는']
'''

 

 

(4) 리스트 관련 함수들

#           append()    : 요소 추가
#           sort()      : 리스트 정렬
#           reverse()   : 역순으로 뒤집기
#           index()     : 위치 반환
#           insert()    : 리스트에 요소 삽입
#           remove()    : 요소 제거
#           pop()       : 맨 마지막 요소를 꺼내기
#           count()     : 요소 개수 세기
#           extend()    : 리스트에 리스트를 더하기\
#           clear()     : 모든 요소를 제거

 

※ 연습문제

    a = [7, 2, 3, 5, 6] 
    (1) 리스트 a에 0 요소 추가
    (2) 리스트 a에 9를 추가하여 출력 (a요소에는 추가하는 것은 아님)
    (3) 0번째 요소로 1을 추가
    (4) 3번째 요소로 1을 추가
    (5) 리스트 맨 마지막 요소를 꺼낸다
    (6) 요소 1을 삭제 ( 1이 여러개인 경우 맨 앞에 하나만 삭제됨 )
    (7) 리스트 모든 요소를 삭제
a.append(0)          #1
print(a)

print(a,9)           #2

a.insert(0,1)        #3
print(a)

a.insert(3,1)        #4
print(a)

print(a.pop())       #5

a.remove(1)          #6
print(a)

a.clear()            #7
print(a)

# 실행결과
'''
(1). [7, 2, 3, 5, 6, 0]
(2). [7, 2, 3, 5, 6, 0] 9
(3). [1, 7, 2, 3, 5, 6, 0]
(4). [1, 7, 2, 1, 3, 5, 6, 0]
(5). 0
(6). [7, 2, 1, 3, 5, 6]
(7). []
'''

 

※ 참고

# [참고] 리스트에 리스트 구조에서 clear() 하는 경우
a1 = [1]
b1 = [7,6, 5,4,3, a1]
b1clear()를 하더라도 종속관계로 되어 있기에 b1의 내용만 삭제되고 a1은 유지된다
print(a1)
print(b1)

b1.clear()
print(b1)
print(a1)

# 실행결과
'''
[1]
[7, 6, 5, 4, 3, [1]]
[]
[1]
'''

 

    a = [3,5,4,8,0]
    b = [1,2]
    (8) 리스트 a의 모든 요소를 역순으로 뒤집기
    (9) 리스트 a 정렬하기
    (10) 리스트 a에 리스트 b를 더하기
    (11) 리스트 a에서 0번째부터 1번째 요소까지 삭제
a.reverse()      #8
print(a)

a.sort()         #9
print(a)

a.extend(b)      #10
print(a)

del a[0:2]       #11 또는 a.remove(a[0]) a.remove(a[0]) / a.remove(0) a.remove(3)
print(a)

# 실행결과
'''
(8).  [0, 8, 4, 5, 3]
(9).  [0, 3, 4, 5, 8]
(10). [0, 3, 4, 5, 8, 1, 2]
(11). [4, 5, 8, 1, 2]
'''

 

※ 추가

a = [3, 4, 5, 8, 1, 2]

print( a.index(3) )
print( a.count(3) )

# 실행결과
'''
0
1
'''

 

 

(5) 리스트 요소 변경

#       a = [3,5,4,8,0]
#       - 2번째 요소를 'z'로 변경
#       - 0번째부터 1번째 요소를 'k'와 'o'로 변경
a = [3,5,4,8,0]

a[2] = 'z'
print(a)

a[0:2] = 'ko'         # 또는 a[:2]=['k','o']   또는 a[:2] = 'k','o'
print(a)

# 실행결과
'''
[3, 5, 'z', 8, 0]
['k', 'o', 'z', 8, 0]
'''

 

※ 만약 a[0:1] = ['k', 'o'] 라고 할 경우

a = [3, 5, 'z', 8, 0]
a[0:1] = ['k', 'o']
print(a)

# 실행결과
'''
['k', 'o', 'o', 'z', 8, 0]
'''

 

 

(6) 얕은 복사 / 깊은 복사

※ 얕은 복사 : 메모리 상에서 같은 위치를 가리키므로 주소가 같다. 

a = [3,5,4,8,0]
b = a

print(b)
print(a is b)
b[2] = 'Hello'
print(a,b)

# 실행결과
'''
[3, 5, 4, 8, 0]
True
[3, 5, 'Hello', 8, 0] [3, 5, 'Hello', 8, 0]
'''

 

※ 깊은 복사 : 메모리 상에서 새로운 위치를 가리키므로 주소가 다르다. 

a = [3,5,4,8,0]
b = a[:]
print(b)
print(a is b)
b[2] = 'Hello'
print(a, b)

# 실행결과
'''
[3, 5, 4, 8, 0]
False
[3, 5, 4, 8, 0] [3, 5, 'Hello', 8, 0]
'''

 

※ copy 클래스를 사용한 복사는 깊은 복사에 해당한다. 

from copy import  copy
b = copy(a) # 깊은 복사
print(a is b)

# 실행결과
'''
False
'''

 

 

※ 연습문제

(1) 다음 코드의 실행 결과를 쓰시오

a = [0, 1, 2, 3, 4] 
print(a[:3], a[:-3])

답 : [0,1,2] [0,1]

 

(2) 다음 코드의 실행 결과를 쓰시오. 

a = [0, 1, 2, 3, 4] 
print(a[::-1])

 

답 : [4, 3, 2, 1, 0]

 

(3) 다음 코드의 실행 결과를 쓰시오. 

first = ["egg", "salad", "bread", "soup", "canafe"]
second = ["fish", "lamb", "pork", "beef", "chicken"]
third = ["apple", "banana", "orange", "grape", "mango"]
order = [first, second, third]
john = [order[0][:-2], second[1::3], third[0]]

del john[2]
john.extend([order[2][0:1]])

print(john)

답 : ['egg', 'salad', 'bread'], ['lamb', 'chicken'], ['apple']]

(풀이)

print(john) = [ ['egg', 'salad', 'bread'], ['lamb', 'chicken'], 'apple' ]

order[0][:-2], second[1::3]  = [ ["egg", "salad", "bread"], ["lamb", "chicken"] ]

order[2][0:1]  = apple

 

(4) 다음 코드의 실행 결과를 쓰시오. 

list_a = [3, 2, 1, 4]
list_b = list_a.sort()
print(list_a, list_b)

답 : [1, 2, 3, 4] None

(풀이)

sort( ) 는 그 순간 정렬하고 반환하지 않는다. 다른 배열에 새롭게 저장되지는 않는다. 

 

(5) 다음 코드의 실행 결과를 쓰시오. 

fruits = ['apple', 'banana', 'cherry', 'grape', 'orange', 'strawberry', 'melon']
print(fruits[-3:], fruits[1::3])

답 : ['orange', 'strawberry', 'melon'] ['banana', 'orange']

 

(6) 다음 코드의 실행 결과를 쓰시오. 

num = [1, 2, 3, 4]
print(num * 2)

 

답 : [1, 2, 3, 4, 1, 2, 3, 4]

 

(7) 다음 코드의 실행 결과를 쓰시오. 

a = [1, 2, 3, 5]
b = ['a', 'b', 'c','d','e']
a.append('g')
b.append(6)

print('g' in b, len(b))

답 : False 6

 

(8) 다음과 같이 코드를 작성했을 때, 실행 결과로 알맞은 것은? 

list_a = ['Hankook', 'University', 'is', 'an', 'academic', 'institute', 'located', 'in', 'South Korea']
list_b=[ ]
for i in range(len(list_a)):
if i % 2 != 1:
list_b.append(list_a[i])

print(list_b)

➀ None 
➁ Error
➂ ['Hankook', 'is', 'academic', 'located', 'South Korea']
➃ ['University', 'an', 'institute', 'in']
➄ ['Hankook', 'University', 'is', 'an', 'academic', 'institute', 'located', 'in', 'South Korea']

답 : ③

 

(9) 다음 코드를 실행한 후, 2018과 "2018"을 각각 입력했을 경우 알맞은 실행 결과끼리 묶인 것은? 

admission_year = input("입학 연도를 입력하세요: ")
print(type(admission_year))

➀ <class ‘str’>, <class ‘float’> 
➁ <class ‘int’’>, <class’str’> 
➂ <class ‘str’>, <class ‘str’>
➃ <class ‘int’>, <class ‘int’> 
➄ <class ‘float’>, <class ‘int’>

답 : ③

 

(10)  다음 코드의 실행 결과를 쓰시오. 

country = ["Korea", "Japan", "China"]
capital = ["Seoul", "Tokyo", "Beijing"]
index = [1, 2, 3]
country.append(capital)
country[3][1] = index[1:]

print(country)

답 : ["K['Korea', 'Japan', 'China', ['Seoul', [2, 3], 'Beijing']]

 

(11) 다음과 같이 코드를 작성했을 때 예측되는 실행 결과를 쓰고, 

      이러한 결과가 나오는 이유에 대해 서술하시오. ( is 키워드는 주소를 비교한다 )

>>> a = [5, 4, 3, 2, 1]
>>> b = a
>>> c = [5, 4, 3, 2, 1]
>>> a is b
>>> a is c

답 : True, False

 

(12) 다음 코드를 실행하면 다음과 같은 결과가 나온다. 그 이유에 대해 서술하시오.

      ( is 키워드는 주소를 비교한다 )

>>> a = 1
>>> b = 1
>>> a is b
True

>>> a = 300
>>> b = 300
>>> a is b
False

답 : 파이썬콘솔에서 0~256까지는 메모리에 상주시키고 시작하는데 그 이후부터는 매 번 새로운 주소를 할당받기 때문

 

(13) 다음과 같이 코드를 작성했을 때, 실행 결과로 알맞은 것은? 

list_1 = [[1, 2], [3], [4, 5, 6]]
a,b,c = list_1
list_2 = a + b + c

print(list_2)

# 실행결과
'''
[1, 2, 3, 4, 5, 6]
'''

➀ [1, 2, 3, 4, 5, 6]     ➁ [[1, 2], [3], [4, 5, 6]]     ➂ 21
➃ Error                   ➄ [[1, 2], [3, 4, 5, 6]]

답 : ①

 

 


3. Stdio

 

    [ 콘솔 입력 처리 함수 ]
    - input() : 기본적으로 문자열로 입력받음
    - eval() : 함수로 감싸면 숫자 처리됨
    - int() / float() / str() 자료형변환  ( eval() 사용보다는 형변환을 권장 )

 

(1) 나이를 입력받아 +1을 하여 출력하고 키를 실수형으로 입력받아 출력

age = int(input('나이 입력 ->'))
print(age+1, '세입니다')       
height = float(input('키 입력 ->'))
print(height, 'cm입니다.')

age = eval(input('나이 입력 ->'))
print(age+1, '세입니다')          # 19 세입니다
height = eval(input('키 입력 ->'))
print(height, 'cm입니다.')

# 실행결과
'''
나이 입력 ->15
16 세입니다
키 입력 ->164.1
164.1 cm입니다.
'''

 

※ eval 함수

print('1+2')
print(eval('1+2'))

# 실행결과
'''
1+2
3
'''

 

(2) 단을 입력받아 구구단을 구하기

dan = int(input('단 입력 ->'))
for i in range(dan):
    print(i)

# 실행결과 (3 입력 시)
'''
0
1
2
'''

 

for i in range(1,10):
    print(i)

# 실행결과
1
2
3
4
5
6
7
8
9

 

dan = int(input('단 입력 ->'))
for i in range(1,10):
    print(' {} * {} = {}'.format(dan, i, dan*i))

# 실행결과 (2 입력시)
'''
단 입력 ->2
 2 * 1 = 2
 2 * 2 = 4
 2 * 3 = 6
 2 * 4 = 8
 2 * 5 = 10
 2 * 6 = 12
 2 * 7 = 14
 2 * 8 = 16
 2 * 9 = 18
'''

 

 

※ 연습문제

(1) 사용자로부터 5개의 숫자를 읽어서 리스트에 저장하고 숫자들의 평균을 계산하여 출력한다.  
     또 숫자 중에서 평균을 출력하여 보자. 

정수를입력하세요: 10
정수를입력하세요: 20
정수를입력하세요: 30
정수를입력하세요: 40
정수를입력하세요: 50
평균= 30.0

답 : 

a = 0

for i in range (1,6):
    i = int(input('정수를 입력하세요: '))
    a = a + i
print('평균=', a/5)

 

(2) 사용자에게서 받은 문자들을 역순으로 출력한다. 

b = input('문자열입력 : ')
print('결과 : ', b[::-1])

# 실행결과
'''
문자열입력 : abcde
결과 :  edcba
'''


(3) 사용자에게서 받은 정수들의 평균과 표준편차를 계산하여 출력한다. 

    평균과 표준편차를 계산하는 함수를작성한 후에 이들 함수들을 호출하도록 하라. 

arr = input('정수리스트 입력 : ').split()
a = int(arr[0])
b = int(arr[1])
c = int(arr[2])
d = int(arr[3])
e = int(arr[4])
sum = a+b+c+d+e
avg = sum / 5
print('평균 : ', avg)
bunsan = ( (a-avg)**2 + (b-avg)**2 + (c-avg)**2 + (d-avg)**2 + (e-avg)**2 )/5
print(bunsan)
pyuncha = bunsan ** (1/2)
print('표준편차 : ', pyuncha)

# 실행결과
'''
정수리스트 입력 : 10 20 30 40 50
평균 :  30.0
200.0
표준편차 :  14.142135623730951
'''

또는 numpy 라이브러리를 사용할 수 있다. 

abc = [10, 20, 30, 40, 50]
abc = input('정수리스트 입력 : ').split()
avg2 = numpy.mean(abc)
print('평균 : ', avg2)
var2 = numpy.var(abc)
print('분산 : ', var2)
std2 = numpy.std(abc)
print('표준편차 : ', std2)

 

 

(4) 전화 키패드에는 각 숫자키마다 3개의 문자가 적혀있다. 

    사용자가 입력한 문자열을 전화기의 숫자키로 변환하는 프로그램을 작성해보자.

phone = [[], ['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I'],
['J', 'K', 'L'], ['M', 'N', 'O'], ['P', 'Q', 'R', 'S'],
['T', 'U', 'V'], ['W', 'X', 'Y', 'Z']]
string = input('문자열을입력하시오: ')
result = ''
for char in string:
    for i in range(len(phone)):
        if char.upper() in phone[i]:
            result += str(i + 1)
print(result)

# 실행결과
'''
문자열을입력하시오: number
686237
'''

 

 

 


4. 리눅스 심볼릭링크 ( = 바로가기 )

 

하드링크 : 원본 파일의 주소를 참조
심볼릭링크 : 윈도우의 바로가기와 비슷

하드링크 생성 : ln 원본파일 심볼릭링크
심볼릭링크 생성 : ln -s 원본파일 심볼릭링크

 

(1) "안녕하세요" 라는 내용이 들어있는 basefile.txt 파일을 생성한다. 

[root@localhost temp1]# gedit basefile
[root@localhost temp1]# cat basefile
안녕하세요

 

(2) basefile.txt의 하드링크를 생성한다. 

[root@localhost temp1]# ln basefile hardlink
[root@localhost temp1]# cat hardlink
안녕하세요

 

(3) basefile.txt의 심볼릭링크를 생성한다. 

[root@localhost temp1]# ln -s basefile symbollink
[root@localhost temp1]# cat symbollink
안녕하세요

 

(4) basefile.txt와 hardlink, symbollink의 id를 확인해보면 앞의 2개는 id가 같고, symbollink는 다름을 알 수 있다. 

[root@localhost temp1]# ls -li
합 계 4
26975407 -rw-r--r--. 2 root root 16	1월    6 23:52 basefile
26975407 -rw-r--r--. 2 root root 16	1월    6 23:52 hardlink
26975408 -rw-r--r--. 2 root root  8	1월    6 23:57 symbollink -> basefile

 

(5) basefile.txt를 삭제 후 hardlink와 symbollink의 내용을 살펴보면, symbollink는 내용을 찾을 수 없다고 나온다. 

[root@localhost temp1]# rm basefile
rm: remove 일반 파일 `basefile'? y
[root@localhost temp1]# ls -li
합 계 4
26975407 -rw-r--r--. 2 root root 16	1월    6 23:52 hardlink
26975408 -rw-r--r--. 2 root root  8	1월    6 23:57 symbollink -> basefile
[root@localhost temp1]# cat basefile
cat: basefile: 그런 파일이나 디렉터리가 없습니다.
[root@localhost temp1]# cat hardlink
안녕하세요
[root@localhost temp1]# cat symbollink
cat: basefile: 그런 파일이나 디렉터리가 없습니다.

 

 


5. vi 에디터

 

(1) vitest.txt 라는 이름의 파일을 vi 에디터로 연다.

[root@localhost temp2]# vi vitest.txt

 

(2) 명령모드가 기본이기 때문에 텍스트 입력이 되지 않는다.

     텍스트 입력을 위해서는 키보드에서 i를 눌러 INSERT 모드로 변경해준다. 

 

(3) 입력 후 저장시에는 먼저 키보드에서 ESC를 눌러 명령모드로 전환 후, :wq를 입력하여 저장 후 나가기를 한다. 

 

(4) Ctrl + s 누를 경우 어떤 VM을 사용하느냐에 따라 lock이 걸릴 수도 있다.  (VMware에서는 안 걸림)

 

(5) Ctrl + z 로 나가졌을 경우에는 

 jobs  현재 작업 중인 항목 확인 가능
 fg  작업 중인 항목으로 되돌아가기

 

※ vi 단축키

 저장하고 나가기  :wq
 저장하지 않고 나가기  :q!
 라인 수 보기  :set nu
 커서가 있는 곳의 글자 복사하기  y
 커서가 있는 곳의 라인 전체 복사하기  yy
 커서가 있는 곳에서 2줄 복사하기  2yy
 붙여넣기  p
 커서가 있는 곳에서부터 입력하기  i
 커서가 있는 곳의 다음 라인부터 입력하기  o
 커서가 있는 곳의 라인 지우기  dd
 줄 바꾸기 (잘라내기 후 삽입 방식)  옮길 라인 dd 후 붙여넣기 하려는 곳에서 p
 파일 전체에서 x를 y로 교체하기  :%s/x/y/g
 3라인부터 5라인 복사하기  :3,5y
 실행 취소 (undo)  u
 맨 윗 라인으로 이동하기  Shift + H
 맨 아랫 라인으로 이동하기  Shift + L
 가운데 라인으로 이동하기  Shift + M
 맨 윗라인으로 이동하기  [[
 맨 마지막라인으로 이동하기  ]]
 특정 단어 찾기  / 찾을단어
 단어 찾기 중 다음 단어 찾기  n
 단어 찾기 중 이전 단어 찾기  Shift + N

 


6. 사용자와 그룹 관리

 

※ root 계정에서의 홈 디렉토리

[root@localhost temp2]# cd ~
[root@localhost ~]# pwd
/root

 

※ centos 계정으로 변경 후 홈 디렉토리

[root@localhost ~]# su centos
[centos@localhost root]$ cd ~
[centos@localhost ~]$ pwd
/home/centos

 

※ 현재 사용자 계정 확인하기

[root@localhost ~]# whoani
root

 

※ 새 계정 user1 만들기

[root@localhost ~]# useradd user1

 

※ 새 계정 user1이 만들어졌는지 확인 (/home 디렉토리에 새 계정명으로 디렉토리가 생성됨)

[root@localhost ~]# ls /home
centos  cp_workspace  etc  user1  work

 

※ 사용자에 대한 정보 확인하기

[soot@localhost ~]# vi /etc/passwd
centos:x:1000:1000:centos:/home/centos:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash

 

※ 사용자에 대한 비밀번호 정보 확인하기

[root@localhost ~]# vi /etc/shadow

 - centos 계정과 user1 계정은 암호화된 비밀번호가 있으나 user5 계정에는 비밀번호가 없는 상태이다. 

centos:$6$VlnBpr8q8L5KcyB4$l8VKmF4IXEvsK0RphA6hDZt7EJHgE2h/L4mE5e35aEKyJJBjb/acXaQHEB75Vv1cNzaFJFhZ5ZadFQLpQ/6bE/::0:99999:7:::
user1:!!:18633:0:99999:7:::

 

※ 새 계정 비밀번호 생성하기

[root@localhost ~]# passwd user1
user1 사용자의 비밀 번호 변경 중
새 암호 : 
새 암호 재입력 : 
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다. 

 

※ 생성한 비밀번호가 암호화되어 있음을 확인할 수 있다. 

[root@localhost ~]# vi /etc/shadow
centos:$6$VlnBpr8q8L5KcyB4$l8VKmF4IXEvsK0RphA6hDZt7EJHgE2h/L4mE5e35aEKyJJBjb/acXaQHEB75Vv1cNzaFJFhZ5ZadFQLpQ/6bE/::0:99999:7:::
user1:$6$wuFlAenB$wBnzjwsBAwOybitYSlJR70YZeLsjzB2tOdHYmWEasAX7SopN4.CLGGoOOfO2QXZRPyo30Z1sZmzXKlVSmK.KS.:18633:0:99999:7:::

 

※ 사용자 변경

[root@localhost ~]# su user1
[user1@localhost root]$ su centos
암호 : 
[centos@localhost ~]$ su user1
암호 : 
[user1@localhost root]$ su root
암호 : 

 

※ 현재 생성되어 있는 그룹 확인하기

[centos@localhost ~]# vi /etc/group

 

※ GID가 1003인 그룹 user10 생성하기

[root@localhost ~]# groupadd -g 1003 user10

또는 

/etc/group 에서 vi 에디터를 사용하여 직접 편집하여 그룹을 생성할 수도 있다. 

user10:x:1003:

 

※ user6 계정을 생성하면서 그룹을 user10으로 추가하기

[root@localhost ~]# adduser -g user10 user6

 

※ 기존 계정 user6에 user10 이라는 그룹 지정하기

[root@localhost ~]# usermod -g user10 user6

 

※ 사용자 계정 user6 삭제하기 (계정 삭제 되더라도 디렉토리는 남아있다.)

[root@localhost ~]# userdel -r user6

 

 

 

 

반응형

'교육과정 > KOSMO' 카테고리의 다른 글

Day61  (0) 2021.01.08
Day60  (0) 2021.01.07
Day58  (0) 2021.01.05
Day57  (0) 2021.01.04
Day56  (0) 2020.12.18