2021. 1. 6. 10:25ㆍ교육과정/KOSMO
키워드 : 파이썬 날짜형 / 파이썬 리스트 / 파이썬 stdio / 리눅스 심볼릭링크 / vi 에디터
****
1. 날짜형
※ 외부라이브러리 사용하기
메뉴 - File - Settings - + 클릭 |
# 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