본문 바로가기
프로그래밍/리눅스

리눅스 명령어 사용법 ( tail, head, more, less )

by 사바라다 2021. 7. 3.

안녕하세요. 어느덧 포스팅의 갯수가 172개가 되었습니다. 이번 포스팅으로 173번째를 맞이하게 됩니다. 한번 돌아봤었는데 제가 가장 먼저 썼던 포스팅이 리눅스 많이 사용하는 기본명령어 5가지 모음 라는 포스팅이었습니다. 들어가보시면 아시겠지만... 내용도 너무 대충이고.. 지금과는 많이 다른 느낌입니다. 언젠가는 한번 갱신해야지 라고 생각하고 있었는데요. 이번에 관련하여 새로운 내용을 추가하는 포스팅을 진행하고자합니다.

오늘 공유하고자 하는 포스팅은 unix 계열 terminal(unix, linux, mac 등)에서의 명령어에 대해서 알아보는 시간을 가져보고자합니다.

아래 파일은 명령어로 테스트 해볼 파일의 내부입니다.

{
    "content": [
        {
            "id": "com.ncsoft.lineagem19",
            "title": "리니지M",
            "icon": "https://lh3.googleusercontent.com/TSJx_-ml28RDZAN1popUnr2G0AKJS8xeoCh975QKOeF21FQl5J5lNCuJmaOi_7ufCYI",
            "developer": "NCSOFT",
            "price": "",
            "genres": [
                "GAME_ROLE_PLAYING"
            ],
            "rating": 2.9,
            "ratings_count": 79167,
            "power": 82.7
        },
        {
            "id": "com.ncsoft.lineage2m19",
            "title": "리니지2M",
            "icon": "https://lh3.googleusercontent.com/HCtN3GTLYipk8Sn7zFhV501RkpxBnTpLacU8dC5EU-N8RoI7kGr7GB7kFELull9riO0",
            "developer": "NCSOFT",
            "price": "",
            "genres": [
                "GAME_ROLE_PLAYING"
            ],
            "rating": 3.5,
            "ratings_count": 81315,
            "power": 37.1
        }
}

head

head 명령어는 file의 앞부분의 일부를 보여주는 명령어입니다. 명령어의 synopsys는 아래와 같습니다.

head [-n count | -c bytes] [file ...]

가장 손쉽게 사용하는 방법은 아래와 같은데 아래의 명령어를 수행하면 위의 파일의 경우 이미지와 같이 출력됩니다. 아무런 옵션을 사용하지 않으면 10줄을 보여주는 것을 알 수 있습니다.

head game_info.json # head 파일명

주로 사용하는 옵션은 -n-c입니다. -n 옵션은 줄단위로 보여주는 길이를 정하는 것이며 -c 옵션은 byte 단위로 보여주는 길이를 정하는 것입니다. 아래는 각각 -n 5, -c 5으로 했을 때 노출되는 부분입니다.

이런 head 명령어는 cat으로 확인하기에는 큰 데이터일 경우 앞부분의 일부를 확인하고자 할 때 유용합니다.

tail

tail 명령어는 file의 뒷 부분의 일부를 보여주는 명령어입니다. 명령어의 synopsys는 아래와 같습니다.

tail [-F | -f | -r] [-q] [-b number | -c number | -n number] [file ...]     

아무런 옵션을 붙이지 않고 사용하면 아래처럼 사용할 수 있습니다. 그러면 마지막에서 총 10개의 라인을 가져와서 출력해줍니다.

tail game_info.json # tail 파일명

tail은 head와 마찬가지로 특정한 수의 라인을 호출 해주는 -n을 옵션을 제공해줍니다. 그리고 파일을 열어 실시간으로 아래에 추가되는 표준입력을 바로 읽어들이는 -f 옵션을 제공해줍니다. -f 명령어로 파일을 실시간으로 읽을 때는 컨트롤 + c로 종료할 수 있습니다.

이런 tail 명령어는 cat이나 열어서 확인하기 너무 커서 버벅이는 데이터의 뒷부분을 확인하고자 할 때 유용합니다. 또한 -f 옵션을 이용하여 서비스의 로그 등을 읽어내는 용도로도 많이 사용됩니다.

more

more 명령어는 파일의 앞부분부터 화면의 라인 만큼 읽어들여 보여주며 위에서 아래로의 단방향으로만 이동이 가능합니다. space키를 이용하면 화면의 크기만큼 아래로 이동하며 enter를 이용하면 한칸씩 이동하며 이후 라인을 보여줍니다.

more [options] file ...

아무런 옵션을 주지않고 바로 호출하면 아래와 같은 결과를 얻을 수 있습니다. 테스트를 위하여 일부러 화면의 크기를 줄여서 명령어를 호출하였습니다. 왼쪽 아래에 해당 파일의 이름이 노출되는 것을 알 수 있었습니다.

more game_info.json # more 파일 이름

개인적으로 함께 사용했을 때 유용한 옵션은 없었기 때문에 넘어가도록 하겠습니다. 대신 more는 호출 결과가 긴 명령어를 파이프(|) 로 연결하여 위에서부터 천천히 읽어볼 수 있도록 할 수 있습니다. 아래의 예제는 현재 폴더(directory)의 파일 리스트를 뽑아내서 화면의 크기만큼 뿌려주는 명령어가 됩니다.

ls -lrt | more 

하지만 이런 more 명령어는 파일을 전체적으로 읽은 후 앞부분 부터 잘라내어 보여줍니다. 따라서 큰 파일에 대해서 성능적 이점을 기대할 수는 없습니다.

less

less 명령어는 more 명령어에서 개선된 명령어입니다. less 명령어는 more과 다르게 전체 파일을 다 읽지 않고 화면의 크기에 해당하는 라인만 읽어드립니다. 따라서 성능상 많은 이득을 취하며 more 보다는 훨씬 빠른 성능을 보여줍니다.

less -?
    less --help
    less -V
    less --version
    less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
        [-b space] [-h lines] [-j line] [-k keyfile]
        [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
        [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
        [-# shift] [+[+]cmd] [--] [filename]...
    (See the OPTIONS section for alternate option syntax with long option names.)

기본적인 사용방법은 more과 동일합니다.

less game_info.json # less 파일 이름

하지만 less는 more과 달리 다양한 유용한 옵션을 제공합니다.

+숫자를 옵션으로 입력하면 숫자만큼 스킵한 다음 페이지를 화면에 나타냅니다. 아래 명령어를 이용하면 game_info.json 파일의 5번째 줄 부터 화면에 나타나게 됩니다.

less +5 game_info.json

-N 옵션을 이용하면 아래처럼 라인의 숫자를 표기하여 줍니다.

less 명령어를 입력한 후 명령어가 실행중에 /{찾을 키워드}를 입력하면 찾기 기능을 사용할 수 있습니다. 아래 이미지가 less 명령어 중 price로 찾기 명령어를 수행한 결과입니다.

tail 명령어의 -f 기능도 사용할 수 있습니다. 바로 +F 옵션을 이용하시면 됩니다. 해당옵션을 이용하면 아래처럼 로깅 처럼 실시간으로 최신으로 갱신되는 파일의 정보를 확인할 수 있습니다.

따라서 more 보다는 less 명령어를 사용하면 훨씬 다양하게 그리고 좋은 성능으로 서비스를 운영할 수 있습니다.

마무리

오늘은 이렇게 unix 계열의 terminal에서 파일을 읽는 명령어 4가지에 대해서 알아보았습니다.

다음시간에는 또 다른 포스팅으로 찾아뵙도록 하겠습니다.

감사합니다.

참조

https://roadmap.sh/backend

https://www.tecmint.com/linux-more-command-and-less-command-examples/

http://www.incodom.kr/Linux

댓글