해커스쿨 서버는 현재 열려있지 않아서 로컬에 ftz 서버를 구축하고, ssh를 이용하여 접속했다.
비밀번호를 입력하여 로그인 성공시 프롬프트가 나타나며 프롬프트는 명령 입력 대기 상태에서 명령을 기다린다.
프롬프트에는 접속 id, 서버, 현재위치의 정보가 있다.
프롬프트에 ls 명령어를 입력하면 다음과 같이 현재 디렉터리의 파일 목록을 확인할 수 있다.
ls 명령어에 -l 옵션을 추가하여 ls -l 을 입력하면 어떤것이 디렉터리이고, 어떤것이 파일인지 등 더 자세한 정보를 확인할 수 있다.
각 파일마다 구분되어 있는 필드에는 파일이 생성된 날짜 정보가 있고, 14698 같은 숫자들은 파일의 용량이다. tranier1 trainer1 과 같은 내용을 퍼미션에 관련한 정보이며 맨 첫번째 필드가 파일의 모드와 성격 정보를 가지고 있는데 가장 왼쪽의 문자가 - 면 일반 파일이고, d이면 디렉터리를 의미한다.
이후로 퀴즈가 나오는데 퀴즈 내용과 답은 다음과 같다.
ls명령어로는 보이지 않는 숨김 파일은 -a 옵션을 추가한 ls -a 명령어로 확인할 수 있다.
숨김 파일은 파일명 가장 앞에 . 이 붙어있다는 특징있다.
ls 명령어는 ls -al 처럼 둘 이상의 옵션도 함께 사용할 수 있다. 함께 사용하면 사용하는 모든 옵션의 효과를 한번에 사용할 수 있다.
Lesson 2
자신이 현재 속해있는 디렉터리를 확인하려면 pwd 명령어를 이용하면 된다.
프롬프트에서 현재 위치의 정보는 앞의 경로는 생략하고 가장 뒤쪽의 경로만 나타내고 있다.
현재 경로에서 한 단계 위로 가려면 cd .. 명령어를 이용한다. 지금 경로에서 한단계 위로 가면 /home 가 되고 또 한단계 위로 가면 / 가 되는데, / 은 최상위 디렉토리이며 루트 디렉토리 라고도 한다.
경로를 내려갈때는 cd trainer2 처럼 디렉토리 이름을 붙이면 된다.
.. 을 사용하지 않고 한번에 루트 디렉터리로 올라가려면 cd / 을 입력하면 된다. 또한 한 번에 trainer2 로 내려가려면 cd /home/trainer2처럼 루트 디렉토리부터 모든 경로를 입력하면 된다.
새로운 디렉토리를 만드는 명령어는 mkdir 이다. mkdir에 만들 디렉토리의 이름을 지정해주면 된다.
mkdir linuxer로 linuexer로 디렉토리를 만들면 ls 명령어로 확인 시 만든 디렉토리가 생성됨을 확인할 수 있다.
디렉토리를 삭제할 때는 rmdir이라는 명령어를 이용한다.
rmdir linuxer을 입력하고 ls -al을 입력하면 linuxer 디렉터리가 삭제됨을 확인할 수 있다.
cp 명령어는 파일을 복사하는 명령어다. cp 파일1 파일2 와 같은 형태로 사용하면 파일1이 파일2의 이름으로 복사된다.
파일을 삭제하는 명령어는 rm이다. rm 복사사본을 입력하고 ls 명령어로 확인하면 파일이 삭제됨을 확인할 수 있다.
파일을 옮기는 명령어는 mv이다. mv명령어는 파일을 옮기는 것을 파일을 복사하고 원본 파일을 자동으로 삭제하는 것으로 처리하기 때문에 파일 이름을 변경할 때도 자주 사용된다.
mv 파일1 파일 2의 형식으로 사용하면 파일1의 이름이 파일2로 변경된다.
Lesson3
터미널은 ssh나 텔넷등의 서버를 통해 접속한 것이고, 콘솔은 부팅한 컴퓨터에 직접 접속한 것이라는 의미이다.
w명령어를 사용하면 현재 서버에 접속한 사용자 목록을 확인할 수 있다.
첫번째 필드는 접속한 아이디를 나타낸다. 두번째 필드는 콘솔로 접속했는지, 터미널로 접속했는지 보여준다. tty면 콘솔접속, pts면 터미널 접속을 의미한다. 3번째 필드는 접속한 사람의 ip를 의미한다. 콘솔 접속한 경우 ip는 보이지 않는다. 4번째 필드는 로그인 시간이고, 5번째 필드는 지연시간으로 사용자가 얼마나 아무것도 입력을 안했는지 확인할 수 있다. 6번째 필드는 cpu를 사용한 지연 시간이고, 7번째 필드는 what 필드에 있는 명령이 지연된 시간, 8번째 필드는 현재 사용하고 있는 명령을 보여준다.
finger -l 명령어를 확인하면 사용자에 대한 좀 더 많은 정보를 확인할 수 있다.
tty 명령어를 사용하면 자신의 터미널 정보를 확인할 수 있다.
ifconfig 명령어를 사용하면 ip 정보를 확인할 수 있다.
write 사용자id /dev/pts/pts번호 의 명령어로 서버에 접속한 다른 사용자에게 메시지를 전달할 수 있다.
2차원 배열도 범위를 벗어난 인덱스에 접근하여 출력하면 쓰레기값이 출력된다. 배열의 범위를 벗어난 인덱스에 접근하면 배열이 아닌 다른 메모리 공간에 접근하게 된다. 또한 [0][4]처럼 가로 인덱스만 범위를 벗어나도록 지정하면 그 다음 세로 인덱스 요소인 [1][0]에 접근된다.
37.4 2차원 배열의 크기 구하기
2차원 배열의 전체공간, 가로, 세로 요소의 개수는 다음과 같이 sizeof 연산자를 이용하여 구할 수 있다.
배열의 세로와 가로 요소의 개수를 구하고, 2중 for문으로 세로부터 반복하고, 가로를 반복한다. 2차원 배열의 인덱스로는 세로에는 바깥쪽 반복문의 i를, 가로에는 안쪽 반복문의 j를 넣어 배열의 요소를 순서대로 접근하여 출력할 수 있다. 안쪽 반복문이 끝나면 개행문자를 출력함으로 세로줄이 바뀔때 줄을 바꿔 출력한다.
위 코드와 같이 배열의 요소에 접근할 때 인덱스로 음수를 지정하거나, 배열의 크기를 벗어난 인덱스를 지정해도 컴파일에러는 발생하지 않지만, 쓰레기값을 출력한다. 배열의 범위를 벗어난 인덱스에 접근하면 배열이 아닌 다른 메모리 공간에 접근하여 엉뚱한 값을 출력하게 된다.
36.4 배열의 크기 구하기
반복문을 이용해서 배열의 요소를 모두 출력할 때 선언된 크기로 사용하면 나중에 배열의 크기를 늘려야 해서 코드를 수정해야 할 경우 반복문의 조건식도 수정해야 모든 배열이 출력될 수 있다. 이러한 불편함을 해결하려면 sizeof연산자를 사용하여 배열의 전체 요소의 개수를 구해 배열의 크기가 수정되면 반복문의 조건식에서도 알아서 계산되도록 할 수 있다.
배열을 역순으로 출력할 때는 요소의 개수를 조건식에 바로 넣으면 인덱스는 0부터 시작하기 때문에 배열의 마지막 인덱스는 배열의 개수보다 1 작아서 반복문의 조건식에서도 요소의 개수에서 1 뺀 값에서 시작해야 한다. 조건식에서 0보다 크거나 같을 때 까지 반복하여 역순으로 출력할 수 있다.