문서 편집: vi편집기
vi의 동작모드
명령모드: (ESC,ENTER) 커서이동,페이지이동,글자삭제,줄 삭제 등
입력모드: i,I,a,A,o,O
마지막행 모드: (/,?,:) 검색, 저장, 바꾸기,줄 이동 등
저장 및 종료명령
:w [파일명] : 저장, 파일명을 지정할 시 지정한 파일명으로 저장
:q! 저장하지 않고 종료
:wq! 저장하고 종료
ZZ 저장하고 종료
내용 삭제 및 취소
x 문자삭제
D 커서 위치부터 줄 끝까지 삭제
u 방금 수행한 명령 취소
dd 현재 줄 잘라내기
복사, 잘라내기, 붙이기
yy 현재 행 복사
p 붙여넣기
범위지정 방법
% 모든 줄
1,$ 첫 줄에서 마지막 줄까지
.,$ 현재 줄에서 마지막 줄까지
10,20
뭐 요런식..
검색 기능
/문자열 : 현재 위치부터 파일의 아래 방향으로 문자열 탐색
?문자열 : 현재 위치부터 파일의 위 방향으로 문자열 탐색
n : 다음 문자열 탐색(검색한 이후에 이동하는거)
바꾸기 기능
:s/문자열1/문자열2 : 커서가 위치한 줄에서만 문자열1을 2로 바꿈
:<범위>s/문자열1/문자열2/ : 범위 안의 모든 줄에 대해서 각 줄의 첫번째 문자열1을 2로 바꿈
:<범위>s/문자열1/문자열2/g : 범위 안의 모든 문자열1을 2로 바꿈
:<범위>s/문자열1/문자열2/gc : 범위 안의 모든 문자열1을 2로 바꿀 때 수정할 지 말지 물어봄
3.1 컴파일러
gcc 컴파일러
$ gcc [-옵션] 파일
-c : 목적파일까지 생성
-o 파일명 : a.out 대신의 별도의 실행파일 지정
-O# : 컴파일 최적화 수행
-O0: 최적화를 수행하지 않음
-O1,O2: 최적화 수행(O2가 기본 옵션)
-Os: 사이즈 최적화
-l : 컴파일에 사용되는 라이브러리를 명시적으로 지정함
-D: 매크로 지정
심볼 정의(-DVALUE option)
test.c 파일이 있다
#include <stdio.h>
int main(int argc, char **argv)
{
printf("Hello World! %d\n",VALUE);
return 0;
}
이 예시코드에서 VALUE 변수가 지정되어있지 않다
이걸 그냥 $ gcc test.c 로 컴파일 하는 경우에 에러가 발생한다
$ gcc -DVALUE=10 test.c 로 컴파일을 하게되면 VALUE변수에 10이라는 값을 줄 수 있다
심볼 정의는 디버깅에 사용되기도 한다는데.
#include <stdio.h>
int main(){
#ifdef DEBUG
printf("DEBUG\n");
#endif
printf("Hello World\n");
return 0;
}
이런식의 test.c 파일이 있다고 하자
$ gcc test.c
$ ./a.out ==> Hello World
$ gcc -DDEBUG test.c
$./a.out ==> DEBUG\n Hello World
3.4 라이브러리 관리
라이브러리 바인딩
동적 라이브러리: 기본 설정. 공유 라이브러리 사용. 코드의 크기가 작지만, 실행 속도가 느림
정적 라이브러리: 라이브러리의 모든 코드를 실행파일에 포함시킴. 코드의 크기가 크지만 실행 속도가 빠르다.
참고: 리눅스에서는 두개의 라이브러리가 공존할 경우, 동적 라이브러리를 우선 호출함.
'2022-2 > 시스템 프로그래밍' 카테고리의 다른 글
gdb 디버거 (3) | 2022.10.14 |
---|---|
make 시스템 (0) | 2022.10.11 |
2장 - 리눅스 사용 (2) | 2022.10.07 |
1장 - 유닉스 리눅스 소개 (0) | 2022.10.07 |
리눅스 여러가지 명령어들 (0) | 2022.09.18 |
댓글