https://lunop.tistory.com/4

 

🏊‍♀️[42 Seoul] 비전공자가 수영장에서 살아남기 - 1편

수영장에서 살아남기🏊‍♀️ ; Survivre dans la Piscine 1편 들어가기 전 마음가짐 일단 들어가기 전부터 멘탈케어가 중요하다고 들어서 모토를 하나 정했읍니다. 모르는 분야라 두려운 것은 당연하

lunop.tistory.com

 

https://m.blog.naver.com/virq/222680217948

 

[42서울] 비전공자가 다녀온 라피신 솔직 후기 및 정보

마지막 업데이트 : 2022.08.12 22:00 TL; DR 1. 라피신은 비전공자나 전공자나 모두에게 어렵고 힘들다...

blog.naver.com

https://david-kim2028.tistory.com/entry/42%EC%84%9C%EC%9A%B8-9%EA%B8%B0-%EB%9D%BC%ED%94%BC%EC%8B%A0-%ED%9B%84%EA%B8%B0

 

42서울 9기 라피신 후기

이 글을 보는 독자분들은 아마, 필자는 누구이며, 라피신에는 어떤 마음가짐으로 임했고, 라피신 생활은 어떠한지, 그리고 어떻게 하면 합격을 하는지가 궁금해 할것으로 생각되어 해당 flow대로

david-kim2028.tistory.com

 

https://choar816.tistory.com/150

 

[42서울] 라피신 최종 후기 (6기 2차)

42서울 라피신 최종 후기 42 Seoul La Piscine final review 2022년 1월 31일부터 2월 25일까지 진행된 42서울 6기 2차 라피신의 최종 후기이다. 이 글을 쓰는 시점은 금요일 Final Exam을 마치고 3일 뒤! 기억이 휘

choar816.tistory.com

 

https://jaeseo0519.tistory.com/93

 

[42Seoul] 22년도 6기 2차 La Piscine 후기

1월 31일(월)부터 2월 25일(금)까지 라 피신을 진행했었다. 원래 개인적으로 구축해서 배포한 블로그를 만들면 그때 후기를 남기려고 했는데, 개발자의 욕심이란 게...끝이 없어서 그냥 티스토리에

jaeseo0519.tistory.com

https://eunbin00.tistory.com/73

 

[42Seoul] 라피신 돌아보기 | C Piscine, Rush, BSQ, EXAM | 동료 | 내가 라피신에서 얻은 것들

2022년 1월 3일부터 1월 28일까지 한 달 간의 라피신이 드디어 끝났다. 원래는 충분히 쉬고 천천히 써보려고 했는데, 끝나도 머릿속이 온통 정리되지 않은 라피신 라피신 라피신 생각 뿐이라 차분

eunbin00.tistory.com

https://ksabs.tistory.com/211

 

[42Seoul] 전공자의 라 피신 4주차 후기 + 합격!

들어가기 전에 42서울 라피신에 대한 후기는 '전공자'의 입장에서 작성되었습니다. 글의 끝에 들어가는 팁들도 '전공자'의 입장에서 진행할 수 있는 팁들입니다. 저는 비전공자가 아니기 때문에

ksabs.tistory.com

https://haward.tistory.com/39

 

라피신 합격자 후기 및 합격 팁 (42서울 꿀팁)(7기 합격생 + 6기 탈락생)

안녕하세요 저는 7기 카댓 joushin(조신)이라고 합니다.라피신을 저는 7기 1차 피신 레벨랭킹 4등, 4번의 시험을 전부 100점을 맞고 당당히 합격한 joushin이라고 합니다. 제가 느낀 라피신의 합격팁에

haward.tistory.com

https://ksabs.tistory.com/208

 

[42Seoul] 전공자의 라 피신 1주차 후기

들어가기 전에 42서울 라피신에 대한 후기는 '전공자'의 입장에서 작성되었습니다. 글의 끝에 들어가는 팁들도 '전공자'의 입장에서 진행할 수 있는 팁들입니다. 저는 비전공자가 아니기 때문에

ksabs.tistory.com

https://meoru-tech.tistory.com/28

 

💡 42서울(42Seoul) 4기 본과정 합격 후기

💡 합격 발표 ✔ 피신 종료 후 7일 뒤, 15시 42분(그놈의 ㅋㅋㅋ)에 슬랙에 공지가 하나 올라왔습니다. (이노아카 학장님의 좋은 말씀. 요약하자면 고생많았고 프라이드를 가지길 바라고 앞으로도

meoru-tech.tistory.com

https://hereishyun.tistory.com/45

 

[42서울] 10기 1차 라피신 후기 (+본과정 합격)

42서울의 "온라인 테스트, 체크인 미팅, 라피신 신청, 라피신 ID Check(등록일)"은 아래 링크를 참고 https://hereishyun.tistory.com/44 [42서울] 10기 1차 라피신 후기 - 온라인 테스트, 체크인 미팅, 라피신 신

hereishyun.tistory.com

https://moonnight0.tistory.com/entry/42%EC%84%9C%EC%9A%B8-10%EA%B8%B0-1%EC%B0%A8-%ED%9B%84%EA%B8%B0

 

[42서울] 10기 1차 후기

목차 42서울 라피신 과정 42서울 주차별 후기 42서울 결과 42서울 Q&A 42서울 라피신 과정 자세한 내용은 홈페이지에 들어가서 확인해보시길 바랍니다. 42 서울 (재)이노베이션 아카데미의 소프트웨

moonnight0.tistory.com

https://velog.io/@s_i_o_n/42Seoul-42Seoul-%EB%9D%BC%ED%94%BC%EC%8B%A0-1%EC%A3%BC%EC%B0%A8-%ED%9B%84%EA%B8%B0-6%EA%B8%B0-1%EC%B0%A8

 

[42Seoul] 42Seoul 라피신 1주차 후기 (6기-1차)

6기 1차로 2022.01.03 ~ 2022.01.28 동안 진행한 후기입니다.첫날 O.T에는 빨리가도 되고 늦게 가도 됩니다! 저는 2시30분쯤 강남 클러스터에 도착하여 진행하였습니다.처음 가면 간단한 신상 정보를 알

velog.io

https://june98.tistory.com/70

 

42서울(42Seoul) 본과정 입성 후기 (feat. 라 피신과의 차이)

42서울(42Seoul) 본과정 입성 후기 (feat. 라 피신과의 차이) 2021.04.24 - [개발자/42서울] - 42서울(42Seoul) 본 과정 합격 후기 저번 글에서 언급했다시피 본과정에 합격하여 카뎃이 되었다! 5월 3일부터 일

june98.tistory.com

https://meoru-tech.tistory.com/12

 

💡 42서울 라 피신(42Seoul - La Piscine) 4기 2차 후기

✔ 라 피신 종료 2021.3.22 ~ 2021.4.16 4주라는 짧은 기간동안 진행된 피신이 끝났다. 대충 찾아봤는데 아마 라피신 4기 2차 첫 후기글이 아닐까 싶다... 동료 피시너 분들도 이 글을 많이 읽으실 것 같

meoru-tech.tistory.com

https://velog.io/@ppparkta/%EB%9D%BC%ED%94%BC%EC%8B%A0-7%EA%B8%B0-1%EC%B0%A8-%ED%9B%84%EA%B8%B0

 

[42서울] 라피신 7기 1차 후기

라피신 한줄 요약 : 인생에서 다신 경험하지 못할 한달

velog.io

 

'라피씬' 카테고리의 다른 글

씨 00 (프)  (0) 2025.09.07
쉘 01  (2) 2025.09.07
#include<unistd.h>

void ft_putchar(char c)
{
write(1, &c, 1);
}


int main ()
{
ft_putchar('b');
}

 

J’ai créé la fonction ft_putchar(char c) pour afficher un caractère en utilisant la fonction write.
Pour utiliser la fonction write, j’ai dû inclure l’en-tête #include <unistd.h>, qui signifie Unix standard.
Dans l’appel à write, le premier argument 1 correspond à la sortie standard (stdout).
Pour le deuxième argument, j’ai mis &c (et non pas simplement c) car la fonction write attend l’adresse en mémoire de la donnée à écrire. Ici, &c signifie « l’adresse du caractère c ».
Enfin, pour afficher un seul caractère, j’ai mis 1 comme troisième argument de write, ce qui signifie 1 octet.

 

#include <unistd.h>

void ft_print_alphabet(void)
{
for(char a ='a'; a<= 'z'; a++)
{
write(1, &a, 1);
}
}

int main()
{
ft_print_alphabet();
}

 

J’ai créé la fonction void ft_print_alphabet(void)
pour afficher l’alphabet en minuscules dans l’ordre croissant, à partir de la lettre 'a'.
J’ai utilisé une boucle for avec char a = 'a', qui commence à 'a' et s’incrémente jusqu’à 'z', en augmentant de 1 à chaque itération.
J’ai utilisé la fonction write pour afficher toutes les lettres de l’alphabet.

 

#include <unistd.h>

void ft_print_reverse_alphabet(void)
{
for(char a ='z'; a>= 'a'; a--)
{
write(1, &a, 1);
}
}

int main()
{
ft_print_reverse_alphabet();
}

 

J’ai créé la fonction void ft_print_reverse_alphabet(void)
pour afficher l’alphabet en minuscules dans l’ordre décroissant, à partir de la lettre 'z'.
J’ai utilisé une boucle for avec char a = 'z', qui commence à 'z' et décrémente jusqu’à 'a', en diminuant de 1 à chaque itération.
J’ai utilisé la fonction write pour afficher toutes les lettres de l’alphabet dans l’ordre inverse.

 

#include <unistd.h>

void ft_print_numbers(void)
{
for(char a ='0'; a<= '9'; a++)
{
write(1, &a, 1);
}
}

int main()
{
ft_print_numbers();
}

 

J’ai créé la fonction ft_print_numbers
pour afficher les chiffres de 0 à 9 sur une seule ligne dans l’ordre croissant.
Pour cela, j’ai utilisé une boucle for avec char a, qui commence à '0' et s’incrémente jusqu’à '9'.
Ainsi, tous les chiffres apparaissent sur une seule ligne dans l’ordre croissant.

 

#include <unistd.h>

void ft_is_negative(int n) {

if (n < 0)

write(1, "N", 1);

else

write(1, "P", 1);
}

int main() {
ft_is_negative(3);
}

 

J’ai utilisé la fonction ft_is_negative, qui affiche N si l’entier passé en paramètre est négatif, et P si l’entier est positif ou égal à 0.
Pour cela, j’ai utilisé une structure conditionnelle if pour gérer les deux cas.
Dans le premier cas, si le nombre est inférieur à 0, j’affiche N avec la fonction write.
Dans le deuxième cas, si le nombre est positif ou égal à 0, j’affiche P également avec write.
Ainsi, la fonction affiche correctement N ou P selon la valeur de l’entier.

 

#include <unistd.h>

void ft_print_comb(void) {

for(char i='0'; i<='7'; i++)
{
for(char j=i+1; j<='8'; j++)
{
for (char m=j+1; m<='9'; m++)
{
write(1, &i,1);
write(1, &j,1);
write(1, &m,1);
if (i!=7 && j!=8 && m!=9)
{
write(1, ", ", 2);
}
}
}
}
 
}

int main() {
ft_print_comb();
}

 

J’ai créé la fonction ft_print_comb, de type void, qui affiche toutes les combinaisons possibles de trois chiffres différents dans l’ordre croissant.

Pour cela, j’ai utilisé trois boucles for imbriquées avec les variables i, j et m :

  • i représente le premier chiffre et va de '0' à '7'.
  • j représente le deuxième chiffre et commence à i + 1, jusqu’à '8'.
  • m représente le troisième chiffre et commence à j + 1, jusqu’à '9'.

Dans chaque itération, j’affiche les chiffres i, j et m avec la fonction write.
Pour séparer les combinaisons par une virgule et un espace, j’utilise une condition : si i != '7', j != '8' et m != '9', alors j’écris , avec write(1, ", ", 2) (2 octets).
Ainsi, la dernière combinaison (7 8 9) n’est pas suivie d’une virgule ni d’un espace.

 

#include <unistd.h>

void ft_print_comb2(void) {
for (int i = 00; i <= 98; i++) {
for (int j = i + 1; j <= 99; j++) {
char x, y, z, t;
x = (i / 10) + '0';
y = (i % 10) +'0';
z = (j / 10) +'0';
t = (j % 10) + '0';

write(1, &x, 1);
write(1, &y, 1);
write(1, " ",1);
write(1, &z, 1);
write(1, &t, 1);
if (!(i == 98 && j == 99)) {
write(1, ", ", 2);
}
}
}
}

int main () {
ft_print_comb2();
}

 

J’ai créé la fonction ft_print_comb2, de type void, qui affiche toutes les combinaisons possibles de deux nombres à deux chiffres différents dans l’ordre croissant.

Pour cela, j’ai utilisé deux boucles for imbriquées :

  • i va de 0 à 98 et représente le premier nombre.
  • j va de i + 1 à 99 et représente le deuxième nombre.

Pour chaque combinaison, j’ai séparé les chiffres de chaque nombre :

  • x = chiffre des dizaines de i → (i / 10) + '0'
  • y = chiffre des unités de i → (i % 10) + '0'
  • z = chiffre des dizaines de j → (j / 10) + '0'
  • t = chiffre des unités de j → (j % 10) + '0'

Remarque importante : on ajoute '0' à chaque chiffre pour le convertir en caractère ASCII (아스키), car la fonction write attend des caractères et non des nombres. Sans + '0', write afficherait le code ASCII correspondant au nombre entier, ce qui ne donnerait pas le chiffre souhaité.

Ensuite, j’affiche les chiffres x, y, un espace, puis z et t avec la fonction write.

Pour séparer les combinaisons par une virgule et un espace, j’utilise la condition :
if (!(i == 98 && j == 99))
Ainsi, la dernière combinaison (98 99) n’est pas suivie d’une virgule ni d’un espace.
“Si i n’est pas égal à 98 et j n’est pas égal à 99”

! → “ne … pas” (부정)

== → “égal à” (같다)

&& → “et” (그리고)

즉 의미는:

“i가 98이 아니거나, j가 99가 아닌 경우”

여기까지만 하자..... 

#include <unistd.h>

void ft_putchar(char c)
{
write(1, &c, 1);
}

void ft_putnbr(int nb)
{
long n;

n = nb;
if (n < 0)
{
ft_putchar('-');
n = -n;
}
if (n > 9)
{
ft_putnbr(n / 10);
n %= 10;
}
ft_putchar(n + '0');
}

int main ()
{
ft_putnbr(-10);
}

Ce programme affiche un nombre entier, même négatif, en utilisant une fonction récursive.

  1. ft_putchar : affiche un caractère sur la sortie standard.
  2. ft_putnbr (fonction récursive) :
    • Si le nombre est négatif, on affiche '-' et on rend le nombre positif.
    • Si le nombre a plusieurs chiffres, la fonction s’appelle elle-même pour afficher les chiffres de gauche à droite.
    • On affiche ensuite le dernier chiffre avec ft_putchar(n + '0').
  3. main : appelle ft_putnbr(-10), ce qui affiche :
    Remarque : on utilise long pour éviter un dépassement si le nombre est le minimum d’un int.

    네이버 블로그에 다른 풀이법 있음 



'라피씬' 카테고리의 다른 글

한국어 설정하는 법  (0) 2025.09.07
쉘 01  (2) 2025.09.07

갑자기 헤더 

 

[42서울] 라피신 최종 후기 겸 자문자답 겸 여러 팁

비밀도 많고, 피곤함도 많은 이상한 시스템을 가진 42서울의 라피신 기간을 끝낸 누군가입니다. 혹여나 자...

blog.naver.com

 

연습문제 00: Exam machine

• 주중에 Agenda에서 금요일 시험에 등록할 수 있습니다 — 잊지 말고 꼭 등록하세요.

• 첫번째 시험 Exam00 도 반드시 등록해야 합니다.

• 금요일에 있을 머신 시험에 이벤트에도, 프로젝트에도 등록이 되어 있는지 확인하세요.

• 그리고 이벤트와 프로젝트 둘 다에 등록되었는지 다시 한 번 확인하세요.

연습문제 01: print_groups

제출할 파일: print_groups.sh

디렉토리: ex01/

허용 함수: 없음

• 환경 변수 FT_USER에 지정된 로그인 사용자가 속한 그룹들의 리스트를 쉼표(,)로

구분하고 공

백 없이 출력하는 셸 명령어를 작성하세요.

힌트: man id

 

연습문제 02: find_sh

제출할 파일: find_sh.sh

디렉토리: ex02/

허용 함수: 없음

• 현재 디렉토리와 그 하위 디렉토리에서 이름이 ".sh"로

름만 출력하는 셸 명령어를 작성하세요.

끝나는 파일들을 찾아서, 확장자 없이 이

 

연습문제 03: count_files

제출할 파일: count_files.sh

디렉토리: ex03/

허용 함수: 없음

• "현재 디렉터리와 그 하위 디렉터리에 있는 일반 파일과 디렉터리의 개수를, 시작 디렉터리인 '.'

도 포함하여 출력하는 명령어 한 줄을 작성하시오."

 

연습문제 04: MAC

제출할 파일: MAC.sh

디렉토리: ex04/

허용 함수: 없음

"당신의 컴퓨터의 MAC 주소들을 출력하는 명령어 한 줄을 작성하시오.

각 MAC 주소는 줄바꿈으로 구분되어야 합니다."힌트: man ifconfig

 

연습문제 05: Can you create it ?

제출할 파일: \?$*'MaRViN'*$?\

디렉토리: ex05/

허용 함수: 없음

• 내용이 정확히 "42"만 포함된 파일을 생성하세요.

• 파일 이름은 다음과 같아야 합니다 :

외 아무것도 포함되어 있으면 안 됩니다.

🎉 Milestone 달성, 계속해서 전진하세요!

 

연습문제 06

제출할 파일: skip.sh

디렉토리: ex06/

허용 함수: 없음

• ls -l 명령 결과에서 첫 줄부터 시작해 한 줄 건너 한 줄씩 출력하는 셸 명령어를 작성하세요.

즉, ls -l로 나오는 목록에서

1번째, 3번째, 5번째... 이런 식으로 홀수 번째 줄만 출력하는 명령어를 작성하라는 뜻이야.

 

연습문제 07: r_dwssap

제출할 파일: r_dwssap.sh

디렉토리: ex07/

허용 함수: 없음

• 다음 과정을 수행하는 셸 명령어를 작성하세요:

◦ cat /etc/passwd 결과 출력

◦ 주석 제거

두 번째 줄부터 시작해 한 줄 걸러 출력

◦ 로그인 이름을 역순으로 뒤집기

알파벳 역순으로 정렬

◦ 환경변수 FT_LINE1부터 FT_LINE2까지 해당 줄만 선택

◦ 로그인 이름들을 **", "(쉼표+공백)**로 구분해서 나열하고, 마침표로 끝나야 함(.)

 

연습문제 08: add_chelou

제출할 파일: add_chelou.sh

디렉토리: ex08/

허용 함수: 없음

• 환경변수 FT_NBR1(기수: '\"?!) 와 FT_NBR2(기수: mrdoc)의 값을 해석하여 합산하고,

• 그 결과를 **기수: gtaio luSnemf**로 변환해 출력하는 셸 명령어를 작성하세요.특정 진법으로 표현된 변수 FT_NBR1와 FT_NBR2에 들어있는 숫자를 더해서, 결과를 다른 진법으로

출력하는 한 줄 명령어를 작성하세요.

• FT_NBR1는 진법 "?!"

• FT_NBR2는 진법 mrdoc

• 그리고 합은 진법 gtaio luSnemf로 출력해야 합니다.

 
문제풀이 :

쉽게 말하자면 -G -> 모든 그룹 ID (숫자, 공백으로 구분)

-u -> 사용자 ID 출력 (숫자)

-n -> 숫자 아이디 대신 이름 출력

-Gn 모든 그룹 아이디를 숫자 아이디 대신 이름 출력

id -nG username 여기서 username은 FT_USER

그리고 내용은 , 쉼표로 나눠주기

따라서 명령어 tr 을 적어준다.

id -nG FT_USER | tr ' ' ',' | tr -d '\n'

tr를 사용해서 공백대신 -> 쉼표로 구분

-d 는 delete을 의미, 줄바꿈 없이.

문제에서 공백없이 오로지 쉼표로만 구분하라고 했기에, 이렇게 적어줘야 한다.

문제풀이 :

어제 공부한거 복습하면서 적어보기

find . -name '*.sh' -type f -exec basename {} .sh \;

찾아라

. 현재 디렉터리 부터

-name .sh로 끝나는

-type f 파일

-exec 앞의 명령어에서 값을 받아온다. (조건을 가지고 찾은 파일들을 대상으로 다음 명령어를 실행하라!)
exec를 사용하여 검색한 대상에 추가 명령어를 수행하기 
basename 은 파일 이름만 알려준다. 예를 들어서, basename /home/jisoo/ex09/ft_magic 이것을 ft_magic 출력
경로를 알려주지 않고 이름만 뺴준다는 의미 
예를 들어 basename /home/jisoo/script.sh 이렇게 나왔다면 다 빼고 이름만 출력 script.sh  
근데 find 라는 명령어와 함께쓰면 전체 경로가 나온다. 따라서 basename {} 이렇게 적어줘서 find 가 찾은 경로를 지워주는 것 
basename 뒤에 오는 .sh 는 파일 이름에서 .sh 부분은 지워라는 뜻. 
-exec는 명령어고 이는 ; 이게 나와서 명령이 끝났다는걸 표시해준다. 근데 ; 는

명령어를 연속적으로 실행해주는 것

예 : clear;ls -> clear 실행 후, ls 실행
이를 막기 위해서 \ 넣어준다. 

 

shell01

2022.02.01 작성 ># 01 print_groups tr = translate characters 사용 방법 : groups $FT_USER | tr ' ' ',' | tr -d '\n' or id -nG $FT_USER | tr ' ' ',' | t

velog.io

https://pdseulpace.tistory.com/17

 

day 03 shell01

ex01 print_groups 1. groups $FT_USER | sed 's/ /,/g' 2. id -Gn ★틀린 이유★ ★ tr -d '\n' : 개행 지우기 ★ 1. sed 사용법 sed (stream editor) : 그래픽 인터페이스가 없는 명령행 유틸리티임 그래서 많은 편집 작업을

pdseulpace.tistory.com

https://coding-factory.tistory.com/804#google_vignette

 

[Linux] 리눅스 find 명령어 사용법 (파일 찾기, 검색)

find 명령어 리눅스의 find 명령어는 리눅스 파일 시스템에서 파일을 검색하는 데 사용되는 명령어입니다. 다양한 표현식을 사용하여 원하는 파일의 목록을 추출할 수 있습니다. 리눅스 find 사용

coding-factory.tistory.com

https://etloveguitar.tistory.com/33

 

Linux Shell Script - find (리눅스에서 파일, 디렉토리 찾는 법)

타겟 : find 명령어가 궁금하신 분들 읽는 법: 당장의 커맨드가 궁금하신 분들은 Easy Command 원리가 궁금한 분들은 find in detail까지 읽기 Easy Command 현재 디렉토리 하위에 존재하는 파일 중에 이름이

etloveguitar.tistory.com

 

 문제풀이
https://wiseworld.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-sed-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%9D%98-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95#google_vignette

 

[리눅스] sed 명령어의 기본적인 사용방법

리눅스에서 grep 명령과 비슷하게 사용할 수 있는 sed 명령어, 익숙하지는 않지만 사용방법에 대해서 어느 정도 알고 있다면 리눅스에서 파일을 관리하거나 원하는 데이터를 추출하는 데 있어서

wiseworld.tistory.com

https://velog.io/@1984/shell01

 

shell01

2022.02.01 작성 ># 01 print_groups tr = translate characters 사용 방법 : groups $FT_USER | tr ' ' ',' | tr -d '\n' or id -nG $FT_USER | tr ' ' ',' | t

velog.io

 

find 파일/ 디렉토리를 재귀적으로 찾아 
. 현재 디렉토리에서 시작해라
| (파이프) 앞 명령의 표준 출력(stdout) 을 다음 명령의 표준 입력(stdin)으로 연결하는 연산자
wc = word count (단어/줄/바이트 세기) 명령 
-l 옵션은 라인(줄) 수를 센다. 즉, find .가 출력한 줄의 개수 = 항목의 개수
출력 형식: wc -l은 숫자를 오른쪽 정렬해서 출력하므로 앞에 공백들이 붙을 수 있음.
예: " 4\n" 처럼 공백+숫자+개행을 내보냄

jisoobaek@pc-263 ~ % ls -l ex02

total 48

-rw-r--r--  1 jisoobaek  staff   542 Sep  2 20:48 a

-rw-r--r--  1 jisoobaek  staff   542 Sep  2 20:48 b

drwxr-xr-x  3 jisoobaek  staff    96 Sep  2 18:23 ex04

drwxr-xr-x  3 jisoobaek  staff    96 Sep  2 19:06 ex05

drwxr-xr-x  3 jisoobaek  staff    96 Sep  2 19:35 ex06

drwxr-xr-x  3 jisoobaek  staff    96 Sep  3 19:40 ex09

-rw-r--r--  1 jisoobaek  staff  9216 Sep  2 18:06 exo2.tar

-rw-r--r--  1 jisoobaek  staff    24 Sep  2 19:00 git.commit.sh

-rw-r--r--  1 jisoobaek  staff     0 Sep  2 20:49 sw.diff

drwx--xr-x  2 jisoobaek  staff    64 Jun  1 20:47 test0

drwxr-xr-x  2 jisoobaek  staff    64 Sep  2 23:25 test00

-rwx--xr--  1 jisoobaek  staff     4 Jun  1 21:46 test1

drwxr-xr-x  2 jisoobaek  staff    64 Sep  2 23:25 test11

dr-x---r--  2 jisoobaek  staff    64 Jun  1 22:45 test2

-r-----r--  2 jisoobaek  staff     1 Jun  1 23:44 test3

-rw-r----x  1 jisoobaek  staff     2 Jun  1 23:43 test4

-r-----r--  2 jisoobaek  staff     1 Jun  1 23:44 test5

lrwxrwxrwx  1 jisoobaek  staff     5 Jun  1 22:20 test6 -> test0

-rw-r--r--  1 jisoobaek  staff     0 Sep  2 23:24 testt0

-rw-r--r--  1 jisoobaek  staff     0 Sep  2 23:24 testt1

-rw-r--r--  1 jisoobaek  staff     0 Sep  2 23:24 testt2

jisoobaek@pc-263 ~ % cd ex02

jisoobaek@pc-263 ex02 % find . | wc -l

      26

총 몇개인지 입력이 되는데 숫자 앞에 공백이 너무 많다. 이 공백을 없애줘야한다. 
그렇게 하기 위해서 명령어 sed 사용 
sed = stream editor 텍스트 변환 도구 
's/.../.../' → substitute(치환) 명령어 형식

  • 앞부분(...)의 패턴을 찾아서
  • 뒷부분(...)으로 바꿔라

s 는 찾아서 바꾸라는 뜻 
^문자열의 맨 시작, 앞 줄 
* 스페이스 + * (0회 이상 반복) -> 공백이 0회 이상 반복, 맨 앞에 있는 모든 공백을 의미 
/ / 이것을 빈 문자열로 바꿔라 
-> 줄 맨 앞에 있는 공백 다 지워 
find . | wc-l | sed s/^ */ / → "줄 맨 앞의 공백(0개 이상)을 스페이스 하나로 바꿔라"라는 뜻이 돼 (띄어쓰기 안된다) wc 띄어쓰기 -l
find . | wc -l | sed 's/^ *//'  -> ' ' 사용해야 안전하다. (쉘이 오해하지 않게) 

 

문제풀이
ifconfig 네트워크 인터페이스(예: en0, lo0 등)의 정보(주소, 상태, MAC, MTU 등)를 출력하는 명령어.
여기서 ether 라는 단어가 MAC 주소(하드웨어 주소) 라인이므로, ether가 포함된 줄을 골라내면 MAC 주소 줄만 얻을 수 있다.
| 파이프, 앞 명령의 출력(stdout)을 다음 명령의 입력(stdin)으로 전달한다. 
여기서는 ifconfig의 전체 텍스트를 grep으로 넘겨준다.
grep -w "ether"
grep : 입력에서 특정 패턴(문자열)을 포함한 줄만 골라 출력.
-w : 단어 단위 일치 (패턴이 단독 단어로 나왔을 때만 매치). 예: ether만 매치하고 someetherfoo 같은 부분 문자열은 매치하지 않음.
결과: ifconfig에서 ether가 들어간 줄들만 출력된다.

cut -d ' ' -f2
cut : 입력을 구분자(delimiter)로 분할해서 필드를 추출하는 도구.
-d ' ' : 구분자를 공백(스페이스) 로 지정한다
-f2 : 두 번째 필드를 출력하라는 뜻.
ifconfig | grep -w "ether" | cut -d ' ' -f2

문제풀이
https://pdseulpace.tistory.com/17?category=952240

 

day 03 shell01

ex01 print_groups 1. groups $FT_USER | sed 's/ /,/g' 2. id -Gn ★틀린 이유★ ★ tr -d '\n' : 개행 지우기 ★ 1. sed 사용법 sed (stream editor) : 그래픽 인터페이스가 없는 명령행 유틸리티임 그래서 많은 편집 작업을

pdseulpace.tistory.com

특수문자는 각자 기능이 있기 때문에, 순수히 일반문자로만 사용하려면 \를 이용해야 한다 
이해가 잘 안간다. 아무리해도 안됐었다. 드디어 넣었다. 

 

echo -n 42 |tr -d '\n' >\"\\\?\$\*'MaRViN'\*\$\?\\\" 아마 이렇게 적었더랬지....
우선 echo 42라고 적으면 \n 여기까지 세트다. 근데 문제에서는 "42"만 적으세요. 라고 적혀있어서 \n 부분을 뺐다. 
-n 이렇게 후에 tr-d '\n' 이것도 띄어쓰기 부분 없애달라고 하는 뜻인데, 따라서 안적어도 되는데 그냥 적었다. 

tr = translate or delete characters (문자 치환/삭제).
-d : 지정한 문자를 삭제.
예: echo "42!" | tr -d "!" → 결과 = 42
그리고 일반문자로 사용하기 위해 특수문자 앞에 \ 넣기.

깃에 올릴때도 복붙하지 말고 타이핑 해야된단다. 
git add ex05/"\"\?\$*'MaRViN'*\$?\\\""

dquote 자꾸 나오는데, 탈출 방법은 " + 엔터 
애 많이 먹은 문제다 ㅠㅠㅠㅠ 그냥 적고 올려버리자...사실 다 올리고 나면 git에서는 문제 요구 사항에 맞게 잘 나오더라. 
아니면 주변 사람들에게 물어보기 !! ** 

문제풀이
https://recipes4dev.tistory.com/171

 

리눅스 awk 명령어 사용법. (Linux awk command) - 리눅스 파일 텍스트 데이터 검사, 조작, 출력.

1. awk 명령어. 대부분의 리눅스 명령들이, 그 명령의 이름만으로 대략적인 기능이 예상되는 것과 다르게, awk 명령은 이름에 그 기능을 의미하는 단어나 약어가 포함되어 있지 않습니다. awk는 최

recipes4dev.tistory.com

https://zzsza.github.io/development/2017/12/20/linux-6/

 

리눅스 awk 사용법

awk awk : 데이터를 조작하고 리포트를 생성하기 위해 사용하는 언어입니다. 리눅스에서 사용하는 awk는 GNU 버전의 gawk로 심볼릭 링크되어 있습니다 간단한 연산자를 명령라인에서 사용할 수 있으

zzsza.github.io

https://m.blog.naver.com/jinp7/221968878382

 

awk 이용해서 다른 파일에 포함된 내용 추출 NR==FNR

drop-seq에서 특정 barcode의 BAM 파일만 추출하려면 아래의 코드를 이용하면 된다. 여기서 awk의 명령...

blog.naver.com

 

 

ls -l | awk 'NR % 2 == 1'
ls -l 명령은 현재 디렉토리의 **상세 리스트(long format)**를 보여준다. 
우리가 원하는 것은 첫 줄(1번째), 세 번째 줄(3번째), 다섯 번째 줄(5번째)
| 파이프 ls -l의 출력 결과를 바로 다음 명령어로 넘기기 위해 파이프(|)를 사용
awk는 라인 단위로 처리하는 텍스트 도구
'NR % 2 == 1' 뜻을 풀어보면
NR: awk 내장 변수, 현재 줄 번호(Number of Record)
NR % 2: 줄 번호를 2로 나눈 나머지
== 1: 나머지가 1인 줄만 출력

문제풀이

cat /etc/passwd 명령어의 출력 결과에서 주석은 삭제하고 두 번째 행부터 시작하여 다른 모든 행들은 출력하되, 각 login들 거꾸로 반전시키고 알파벳 역순으로 정렬한 후, FT_LINE1 과 FT_LINE2 을 포함한 그 사이의 값들만 남겨두세요. 이 때, 각login은 ","로 구분되어야 하며 출력 결과는 "."로 끝나야 합니다.(큰따옴표 없이)


cat /etc/passwd | sed '/#/d' | cut -d ':' -f1 | awk "NR % 2 == 0" | rev | sort -r | awk "NR >= $FT_LINE1 && NR <= $FT_LINE2" | tr '\n' ',' | sed 's/,/, /g' | sed 's/, $/./' | tr -d '\n'

먼저 /etc/passwd 의미는 무엇일까, 이걸 터미널에 cat과 함께 적어보면 시스템 사용자 계정 정보가 들어있다. 
sed '/#/d' 이거는 우선 #부분 delete 해라 ! #는 주석이다. 따라서 주석 줄 삭제하라는 뜻 
cut -d ':' -f1     cut은 구분자로 필드를 잘라내는 명령, -d ':' → :를 구분자로 사용, -f1 → 첫 번째 필드만 선택 
첫번째 필드 로그인 이름만 적어라 ? 

awk "NR % 2 == 0"

  • awk는 라인 단위 처리 도구입니다.
  • NR → 현재 줄 번호(Number of Record)
  • NR % 2 == 0 → 짝수 줄만 선택 (두 번째 줄부터 한 줄씩)
  • 따라서 **두 번째 줄, 네 번째 줄, …**의 로그인 이름만 남습니다.
    une ligne sur deux en partant de la seconde"
    직역하면 "두 번째 줄부터 시작해서 한 줄에 하나(=한 줄 건너)씩" 이라는 뜻이에요.
    즉 출력되는 줄은 2, 4, 6, ... (짝수 줄) 입니다.
    (반대로 “첫 줄부터 한 줄 건너”면 1,3,5...가 됩니다.)

rev는 문자열을 뒤집음(reverse)  예) daemon → nomaed
sort -r    sort는 정렬 명령어, -r → 역순(reverse) 정렬, 따라서 로그인 이름이 알파벳 역순으로 정렬됩니다.
awk "NR >= $FT_LINE1 && NR <= $FT_LINE2"

  • NR → 현재 줄 번호
  • $FT_LINE1과 $FT_LINE2는 환경 변수로 지정된 범위
  • NR >= $FT_LINE1 && NR <= $FT_LINE2 → 지정된 줄 범위만 남김
  • 예: FT_LINE1=3, FT_LINE2=7 → 3~7번째 줄만 선택

tr '\n' ','  tr은 문자 변환(translator), \n → 줄바꿈, , → 쉼표, 즉 줄바꿈을 쉼표로 바꿈

sed 's/,/, /g' 쉼표 뒤에 공백 추가, s/,/, /g → 모든 쉼표를 , 로 바꿈
sed 's/, $/./' 마지막 쉼표와 공백을 마침표로 바꿈, $는 줄 끝(end of line) 의미
tr -d '\n', 마지막 줄바꿈 제거(-d = delete, 출력이 한 줄로 끝나게 합니다.

 

 

  • /etc/passwd 읽기
  • 주석 줄 제거
  • 로그인 이름만 추출
  • 한 줄 건너서 (짝수 줄) 선택
  • 각 로그인 이름 뒤집기
  • 알파벳 역순으로 정렬
  • 지정 범위만 선택
  • 줄바꿈 → 쉼표로 변환
  • 쉼표 뒤 공백 추가
  • 마지막 쉼표 → 마침표
  • 마지막 줄바꿈 제거

문제풀이

https://steady-effort-23.tistory.com/33

 

[라피신 공부 일지] Shell 01

Exercise 01 : print_groups groups $FT_USER | sed 's/ /,/g' | tr -d '\\n' groups를 이용한 코드 Exercise 02 : find_sh find . -type f -name "*.sh" -exec basename {} \\; | sed 's/.sh$//g' find . -type f -name "*.sh" -exec basename {} .sh \\; -> basename

steady-effort-23.tistory.com

https://miingjeong.tistory.com/125

 

shell_01

ex01 리눅스 명령어 중에 export는 환경 변수 목록을 확인하거나 환경 변수 값을 설정할 수 있어요. 만약 특정 환경 변수 값을 확인하고 싶다면 echo 명령을 사용하세요. ehpub.co.kr/4-%EB%A6%AC%EB%88%85%EC%8A

miingjeong.tistory.com

https://velog.io/@worldicate/Shell01

 

Shell01

ex01 : print_groups man groupsNAME: groups - print the groups a user is inSYNOPSIS: groups OPTION... USERNAME...which help to bouild the beggining of

velog.io

https://etloveguitar.tistory.com/46

 

[Linux] tr - 리눅스 명령어 tr에 대해서

리눅스에서 tr은 치환의 의미를 가진다. (번역 아님 주의) 사용 목적 : tr은 지정한 문자를 바꾸거나 삭제하는 명령어다. 문자를 지우거나 바꾸고 싶을 때 주로 사용한다. 기본 명령어 format tr {옵

etloveguitar.tistory.com

 

FT_NBR1 이 사용하는 문자는 ' \ " ? ! 총 5개
FT_NBR2 이 사용하는 문자도 m r d o c  총 5개 
프로그래밍에서 특정 문자들만 사용해서 수를 나타낸다 → 곧 그 문자 집합이 곧 숫자 체계의 자리수(Base) 가 된다. 
2개 문자(0,1) → 2진수
10개 문자(0~9) → 10진수
따라서 5진수라고 알 수 있다. 하지만 출력해야 하는 알파벳 집합 "gtaio luSnemf" → 글자가 13개.
따라서 출력은 base 13 으로 변환해야 함.
몇 진수인지 알았으니까 이젠 숫자로 치환해본다. 
FT_NBR1 기호 집합 ' "\" ? ! \ → 0,1,2,3,4 로 바꿔야 함.
FT_NBR2 기호 집합 m r d o c → 0,1,2,3,4 로 바꿔야 함.
tr 명령어를 사용하면 간단히 문자 → 숫자 치환 가능
이제 두 수가 base 5임을 알았으니, 실제 계산은 10진수에서 해야 편하다. 
bc (리눅스 계산기 도구)를 사용하면 ibase=5 로 설정해서 base 5를 해석할 수 있다. 
예: echo "ibase=5; 243" | bc → base 5의 243을 10진수로 변환
bc 안에서 ibase=5 로 읽고, 두 숫자를 그냥 + 연산.
예: echo "ibase=5; 243 + 144" | bc → 10진수로 계산
이제 결과를 base 13으로 표현해야 함
bc는 obase=13 옵션으로 바꾸면 됨
echo "obase=13; ibase=5; <숫자들>" | bc
base 13의 기본 기호는 0123456789ABC
문제에서는 gtaio luSnemf 라는 13글자를 쓰라고 했으니, 다시 문자 변환 필요.
여기서 tr 로 0123456789ABC → gtaio luSnemf 치환.

입력값에서 문자 → 숫자 치환 (base 5 표현 확보).

bc 로 base 5 → base 10 변환.

두 값 더하기.

결과를 base 13으로 변환.

base 13 기호 → 문제에서 요구한 알파벳 집합으로 변환.

echo $FT_NBR1 + $FT_NBR2

예: FT_NBR1과 FT_NBR2는 문제에서 정의한 특수문자(alphabet)로 구성된 문자열입니다.

echo는 두 변수를 "값1 + 값2" 형태로 한 줄로 출력합니다. (플러스 기호로 두 수를 더하는 식을 만들기 위함)

출력 예(가정): \'?" + rcrdmddd

중요: 출력 중에 공백/더하기 기호가 있어야 bc에 "숫자1 + 숫자2" 형식으로 전달됩니다.
연속된 tr들 — 특수문자들을 숫자(0..4) 로 바꾼다

파이프라인에 연달아 있는 tr들은 각 문자 → 0..4 로 바꿔서 결국 기수 5의 숫자열을 만들기 위해 사용됩니다.

각 tr의 의미:

tr "\'" "0"
작은따옴표 문자(') → 0

tr "\\" "1"
백슬래시(\) → 1
(백슬래시는 셸에서 이스케이프 문자라서 "\\"처럼 두 번 써서 표현합니다)

tr "\"" "2"
큰따옴표(") → 2

tr "\?" "3"
물음표(?) → 3

tr "\!" "4"
느낌표(!) → 4

이 다섯 tr은 FT_NBR1 쪽에 쓰이는 문자들(문제에서 정의한 첫 알파벳)을 0..4로 바꿔줍니다.

과적으로 echo의 출력 문자열은 "숫자열 + 숫자열" 형태(단, 숫자들은 0..4만 사용)로 바뀝니다. 예: 1032+14120222 같은 문자열이 됩니다. 이 숫자열은 5진수 표기임을 다음 단계에서 알려줍니다.

주의(쉘/인용): tr에서 "\\"나 \" 같은 것은 쉘에서 적절히 이스케이프해야 하니 실전 입력시 따옴표/백슬래시에 신경 써야 합니다.

xargs echo "obase=13;ibase=5;"

tr까지 거쳐 나온 문자열(예: 1032 + 14120222)을 xargs가 인수로 받아서 echo "obase=13;ibase=5;" ARGUMENTS... 형태로 조합합니다.

이 줄을 bc로 넘기면 bc가 차례로 obase=13;(출력 진법 13 설정), ibase=5;(입력 진법 5 설정), 그리고 1032+14120222(5진수끼리 더하라)를 처리하게 됩니다.

왜 obase를 먼저 설정하나?
bc는 숫자 리터럴(예: 13)을 현재 ibase로 해석하므로 순서에 따라 해석이 달라질 수 있습니다. 일반적으로 안전하게 obase(출력 진법) 먼저 설정한 뒤 ibase(입력 진법)를 바꿔서 그 다음 입력 숫자들이 올바르게 5진수로 해석되도록 합니다.

| bc

이제 bc(임의 정밀도 계산기)가 다음을 수행:

obase=13 → 출력 진법을 13진수로 설정

ibase=5 → 이후 등장하는 숫자 리터럴을 5진수로 해석

1032+14120222 → 두 5진수 숫자를 더한 값을 계산

bc는 결과를 설정된 obase(13) 로 출력합니다. 13진수에서 자릿값은 0..9, A, B, C 로 표현됩니다.

예:

만약 bc가 결과로 10A 를 출력했다면 (13진수) 그 문자열이 다음 단계로 전달됩니다.

맨 마지막 tr "0123456789ABC" "gtaio luSnemf"

bc가 출력한 13진수 숫자문자들 (0 1 2 3 4 5 6 7 8 9 A B C)을 문자 알파벳으로 치환합니다.

좌변: "0123456789ABC" (13개 문자)
→ 우변: "gtaio luSnemf" (역시 13문자, 공백 포함)

매핑 테이블(인덱스 기준):

0 -> g
1 -> t
2 -> a
3 -> i
4 -> o
5 -> <space>   (여기서 공백이 5번째 문자로 들어가 있음)
6 -> l
7 -> u
8 -> S
9 -> n
A -> e
B -> m
C -> f

따라서 bc가 내놓은 13진수 숫자열을 이 문자들로 바꿔주면 사람이 읽을 수 있는 단어(문구) 가 됩니다.
예: 7210C → u t g a f (실제 매핑에 맞춰 결과는 다릅니다)


예시(간단한 수를 넣어 직접 따라보기)

(이해를 돕기 위한 축약된 예시)

가정: FT_NBR1 = \'?" (문자열 → 문자들: \ \' ? " )
→ tr로 바꾸면: 1 0 3 2 → 5진수 숫열 1032 (base5)

FT_NBR2 = rcrd (문자들: r c r d)
→ tr 'mrdoc' 01234 매핑: r->1 c->4 r->1 d->2 → 1412 (base5)

bc로 합치면: base5 1032(=142 decimal) + 1412(=232 decimal) = 374 decimal.
374 decimal을 13진수로 바꾸면: 374 /13 = 28 r 10 → 28 /13 = 2 r 2 → (2)(2)(10) ⇒ 22A (13진법 표기)

마지막 tr로 22A를 문자로 바꾸면:

2 -> a

2 -> a

A -> e
→ 결과 aae




 

 

 

 

 

 

 

'라피씬' 카테고리의 다른 글

한국어 설정하는 법  (0) 2025.09.07
씨 00 (프)  (0) 2025.09.07

+ Recent posts