{"id":25268273,"url":"https://github.com/gabrieldiem/unix-utils-implementation","last_synced_at":"2026-02-13T07:08:08.155Z","repository":{"id":276698586,"uuid":"930006724","full_name":"gabrieldiem/unix-utils-implementation","owner":"gabrieldiem","description":"Unix / GNU command utilities implementation with Linux syscalls","archived":false,"fork":false,"pushed_at":"2025-02-09T22:27:21.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-24T06:42:49.357Z","etag":null,"topics":["7508","c","clang","fiuba","gnu","linux","syscalls","unix"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabrieldiem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-09T22:13:46.000Z","updated_at":"2025-02-09T22:27:24.000Z","dependencies_parsed_at":"2025-02-09T23:24:58.171Z","dependency_job_id":"c1b26f95-6ec2-4925-8b1f-3bf03dc7da88","html_url":"https://github.com/gabrieldiem/unix-utils-implementation","commit_stats":null,"previous_names":["gabrieldiem/unix-utils-implementation"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gabrieldiem/unix-utils-implementation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieldiem%2Funix-utils-implementation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieldiem%2Funix-utils-implementation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieldiem%2Funix-utils-implementation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieldiem%2Funix-utils-implementation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabrieldiem","download_url":"https://codeload.github.com/gabrieldiem/unix-utils-implementation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieldiem%2Funix-utils-implementation/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267613058,"owners_count":24115575,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["7508","c","clang","fiuba","gnu","linux","syscalls","unix"],"created_at":"2025-02-12T10:24:34.761Z","updated_at":"2026-02-13T07:08:03.122Z","avatar_url":"https://github.com/gabrieldiem.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lab Challenges\n\n## Compilación y ejecutables\n\nPara **compilar** correr el comando:\n\n```shell\nmake\n```\n\nUna vez compilado, se pueden **ejecutar** los siguientes programas:\n\n```shell\n./ps\n```\n\n```shell\n./find [-i] \u003cphrase\u003e\n```\n\n```shell\n./ls\n```\n\n```shell\n./cp \u003csource file\u003e \u003cdestination file\u003e\n```\n\n```shell\n./timeout \u003cmax duration in seconds\u003e \u003ccommand\u003e \u003ccommand argument\u003e\n```\n\nPara **eliminar** los ejecutables correr el comando:\n\n```shell\nmake clean\n```\n\nPara **formatear** el código fuente:\n\n```shell\nmake format\n```\n\nTambién se ofrece ejecución contenerizada con Docker, donde se pueden ejecutar los siguientes comandos:\n\nPara crear el container ejecutar:\n\n```shell\nmake docker-build\n```\n\nPara ejecutar una shell dentro de Docker, lista para compilar y ejecutar los challenges (como se describió anteriormente):\n\n```shell\nmake docker-run\n```\n\n## Más información sobre los ejecutables\n\n### ps (process status)\n\nMuestra información básica de los procesos que están corriendo en el sistema. Equivale al comando:\n\n```shell\nps -eo pid,comm\n```\n\nLa implementación muestra el pid y comando (i.e. argv) de cada proceso.\n\n### find\n\nInvocado como `./find xyz`, el programa buscará y mostrará por pantalla todos los archivos del directorio actual (y subdirectorios) cuyo nombre contenga (o sea igual a) xyz. Si se invoca como `./find -i xyz`, se realizará la misma búsqueda, pero sin distinguir entre mayúsculas y minúsculas.\n\n### ls\n\nInformación del output:\n\n```\n\u003cfiletype\u003e \u003cpermissions\u003e \u003cowner id\u003e \u003cowner name\u003e  \u003cfilename\u003e [link destination]\n```\n\nDonde filetype toma los valores:\n\n- `d`: si es un directorio\n- `l`: si es un link\n- `-`: si es un archivo\n\nLos permisos tienen la forma estándar:\n\n```\n\u003cread perm user\u003e\u003cwrite perm user\u003e\u003cexecute perm user\u003e \u003cread perm group\u003e\u003cwrite perm group\u003e\u003cexecute perm group\u003e \u003cread perm others\u003e\u003cwrite perm others\u003e\u003cexecute perm others\u003e\n```\n\nDonde si el permiso correspondiente no está presente el caracter mostrado es: `-`.\n\nEl `[link destination]` se muestra sólo en el caso de las entidades que son links.\n\n### cp\n\nCopia un archivo, denominado archivo fuente, en una ubicación con nombre especificado, archivo denominado cono destino.\n\n### timeout\n\nRealiza una ejecución de un segundo proceso, y espera una cantidad de tiempo prefijada. Si se excede ese tiempo y el proceso sigue en ejecución, lo termina enviándole SIGTERM. Si el proceso termina antes, el programa finaliza.\n\nEn la invocación `\u003ccommand argument\u003e` se refiere a un argumento que será pasado al proceso a monitorear `\u003ccommand\u003e`. Se ofrece como ejemplo un programa `infloop` que cicla de manera indefinida imprimiendo un mensaje por pantalla cada cierto tiempo. Para probar timeout, también de podría ejecutar algo como: `./timeout 3 ping google.com`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrieldiem%2Funix-utils-implementation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabrieldiem%2Funix-utils-implementation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrieldiem%2Funix-utils-implementation/lists"}