Press "Enter" to skip to content

[카테고리:] 컴퓨터

리눅스에서 vi 편집시 파일유형이 dos로 설정된 경우 unix로 저장하기

리눅스(우분투, 센트오에스, 페도라, 래드햇 등등)에서 어떤 이유인지는 모르나 텍스트 파일이 dos 형태로 저장되는 경우가 있다.

전형적인 형태로는 라인 끝에 ^M 문자가 붙는 것으로 인지하게 되지요.

원인으로 생각할 수 있는 것은 리눅스는 라인의 끝이 \n 으로 끝나야 하는데, 윈도우에서 생성된 파일의 경우 \r\n (CR/LF)로 끝나서 발생합니다.

vi에서 다음과 같이 설정하면 유닉스 타입(\n으로 라인이 끝나는 파일)으로 저장할 수 있습니다.

:set fileformat=unix

dos 타입으로 저장하려면

:set fileformat=dos 

이상입니다.

.htaccess 예제 및 설명

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond $1 !^(index\.php)
 RewriteCond %[REQUEST_FILENAME] !-f
 RewriteCond %[REQUEST_FILENAME] !-d
 RewriteRule ^(.*)$ index.php?param=$1 [L]
</IfModule>

.htaccess파일은 아파치 웹 서버에서 URL 재작성(rewriting)을 위해 사용됩니다.

위 내용은 사용자가 웹사이트의 특정 URL에 접근할 때, 해당 요청을 index.php 파일로 리디렉션하고, 추가로 파라미터를 변수를 전달하는 것입니다.

각각의 라인을 하나씩 뜯어보도록 합시다.

<IfModule mod_rewrite.c>

아파치의 mod_rewrite 모듈이 활성화되어 있을 때만 이 규칙을 적용하겠다는 뜻입니다. 

mod_rewrite 모듈은 URL을 재작성하는 데 사용됩니다.

RewriteEngine On
URL 재작성 기능을 활성화합니다. 

이 라인이 있어야만 아래의 RewriteRule과 RewriteCond가 적용됩니다.

RewriteCond $1 !^(index\.php)
조건을 정합니다.

요청된 URL이 index.php가 아닌 경우에만 아래의 규칙이 적용되도록 합니다. 

여기서 $1은 RewriteRule에서 첫 번째 그룹을 의미합니다.
!는 “부정(NOT)”을 의미하며, ^는 문자열의 시작을 의미하고, \.는 마침표(.)를 의미합니다. 

따라서 이 조건은 index.php로 시작하지 않는 요청을 의미합니다.

RewriteCond %{REQUEST_FILENAME} !-f

이 조건은 요청된 파일이 실제 서버에 존재하지 않는 경우에만 규칙을 적용하도록 합니다. 

-f는 실제 파일 여부를 확인하는 플래그입니다.

RewriteCond %{REQUEST_FILENAME} !-d
이 조건은 요청된 경로가 실제 디렉토리가 아닌 경우에만 규칙을 적용하도록 합니다. 

-d는 디렉토리 여부를 확인하는 플래그입니다.

RewriteRule ^(.*)$ index.php?param=$1 [L]
이 라인은 실제 재작성 규칙을 정의합니다.

  • ^(.*)$는 URL의 전체 경로를 저장합니다.
  • .*는 모든 문자열을 의미하며, 이는 그룹 $1에 저장됩니다.
  • index.php?param=$1는 저장된 URL 경로를 index.php의 param 파라미터로 전달합니다.
  • [L]은 이 규칙이 마지막이라는 것을 의미합니다. 이 규칙이 적용되면 추가적인 규칙은 처리되지 않습니다.

종합

이 .htaccess 파일은 다음과 같이 작동합니다:

요청된 URL이 index.php로 시작하지 않으면,

요청된 URL이 실제 파일이나 디렉토리가 아니라면,

그 요청을 index.php 파일로 리디렉션하고, 원래의 URL 경로를 param이라는 파라미터로 전달합니다.

예를 들어, 사용자가 test.com/data에 접근하면, 이 파일은 내부적으로 test.com/index.php?param=data로 리디렉션합니다.

    mac m1 에서 docker compose build 실패 대처

    [+] Building 0.8s (1/2)                                                                                                                      docker:desktop-linux
    [+] Building 0.8s (2/2) FINISHED                                                                                                             docker:desktop-linux
     => [database internal] load build definition from Dockerfile                                                                                                0.0s
     => => transferring dockerfile: 55B                                                                                                                          0.0s
     => ERROR [database internal] load metadata for docker.io/library/mariadb:10.6                                                                               0.8s
    ------
     > [database internal] load metadata for docker.io/library/mariadb:10.6:
    ------
    failed to solve: mariadb:10.6: error getting credentials - err: exit status 1, out: ``

    리눅스용으로 만든 도커파일을 맥 m1에서 올리려고 하니 에러가 발생한 듯합니다.

    대처 방법

     ~/.docker/config.json 파일 열기
    "credsStore":"desktop" 으로 설정되어 있는 것을
    "credsStore":"osxkeychain" 로 변경
    
    다시 빌드
    sudo docker-compose up --build -d

    apt-get 으로 cron 데몬 설치하기

    # cron 설치
    sudo apt-get update -y
    # cron : cron, systemd : systemctl 설치
    sudo apt install cron systemd -y

    # cron 시작
    sudo service cron start

    # cron systemctl로 활성화 시키기
    sudo systemctl enable cron.service

    # cron systemctl 등록 확인하기
    sudo systemctl list-unit-files | grep cron
    sudo service cron status