[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:devops-cloud\u002Flinux-shell-scripting-ops-automation":4,"config":256},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":151,"samples":171},"devops-cloud","DevOps \u002F Cloud","","linux-shell-scripting-ops-automation","Linux Shell Scripting Ops Automation","en",75,3375,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,118,121,124,127,130,133,136,139,142,145,148],{"key":19,"name":20,"count":11},"aws-compute-ec2-lambda","Aws Compute Ec2 Lambda",{"key":22,"name":23,"count":11},"aws-databases-rds-dynamodb","Aws Databases Rds Dynamodb",{"key":25,"name":26,"count":11},"aws-iam-security","Aws Iam Security",{"key":28,"name":29,"count":11},"aws-messaging-eventing","Aws Messaging Eventing",{"key":31,"name":32,"count":11},"aws-networking-vpc","Aws Networking Vpc",{"key":34,"name":35,"count":11},"aws-storage-s3-ebs","Aws Storage S3 Ebs",{"key":37,"name":38,"count":11},"azure-compute-vm-appservice","Azure Compute Vm Appservice",{"key":40,"name":41,"count":11},"azure-databases-sql-cosmosdb","Azure Databases Sql Cosmosdb",{"key":43,"name":44,"count":11},"azure-iam-security","Azure Iam Security",{"key":46,"name":47,"count":11},"azure-messaging-eventing","Azure Messaging Eventing",{"key":49,"name":50,"count":11},"azure-networking-vnet","Azure Networking Vnet",{"key":52,"name":53,"count":11},"azure-storage-blob-managed-disk","Azure Storage Blob Managed Disk",{"key":55,"name":56,"count":11},"ci-cd-pipelines","Ci Cd Pipelines",{"key":58,"name":59,"count":11},"cloud-architecture-scaling","Cloud Architecture Scaling",{"key":61,"name":62,"count":11},"containers-orchestration","Containers Orchestration",{"key":64,"name":65,"count":11},"deployment-release-strategies","Deployment Release Strategies",{"key":67,"name":68,"count":11},"gcp-compute-gce-cloudrun","Gcp Compute Gce Cloudrun",{"key":70,"name":71,"count":11},"gcp-databases-cloudsql-spanner-firestore","Gcp Databases Cloudsql Spanner Firestore",{"key":73,"name":74,"count":11},"gcp-iam-security","Gcp Iam Security",{"key":76,"name":77,"count":11},"gcp-messaging-eventing","Gcp Messaging Eventing",{"key":79,"name":80,"count":11},"gcp-networking-vpc","Gcp Networking Vpc",{"key":82,"name":83,"count":11},"gcp-storage-gcs-persistent-disk","Gcp Storage Gcs Persistent Disk",{"key":85,"name":86,"count":11},"infrastructure-as-code","Infrastructure As Code",{"key":88,"name":89,"count":11},"k8s-config-secrets","K8s Config Secrets",{"key":91,"name":92,"count":11},"k8s-observability-troubleshooting","K8s Observability Troubleshooting",{"key":94,"name":95,"count":11},"k8s-scheduling-resources","K8s Scheduling Resources",{"key":97,"name":98,"count":11},"k8s-services-networking","K8s Services Networking",{"key":100,"name":101,"count":11},"k8s-storage","K8s Storage",{"key":103,"name":104,"count":11},"k8s-workloads","K8s Workloads",{"key":106,"name":107,"count":11},"linux-filesystem-permissions-links","Linux Filesystem Permissions Links",{"key":109,"name":110,"count":11},"linux-networking-tools-troubleshooting","Linux Networking Tools Troubleshooting",{"key":112,"name":113,"count":11},"linux-performance-monitoring-resource-limits","Linux Performance Monitoring Resource Limits",{"key":115,"name":116,"count":11},"linux-process-management-signals","Linux Process Management Signals",{"key":8,"name":9,"count":11},{"key":119,"name":120,"count":11},"linux-systemd-service-management","Linux Systemd Service Management",{"key":122,"name":123,"count":11},"networking-dns-loadbalancing","Networking Dns Loadbalancing",{"key":125,"name":126,"count":11},"observability-monitoring","Observability Monitoring",{"key":128,"name":129,"count":11},"reliability-incident-sre","Reliability Incident Sre",{"key":131,"name":132,"count":11},"security-iam-secrets","Security Iam Secrets",{"key":134,"name":135,"count":11},"terraform-hcl-language-expressions","Terraform Hcl Language Expressions",{"key":137,"name":138,"count":11},"terraform-modules-workspaces","Terraform Modules Workspaces",{"key":140,"name":141,"count":11},"terraform-plan-apply-drift-import","Terraform Plan Apply Drift Import",{"key":143,"name":144,"count":11},"terraform-providers-lifecycle-provisioners","Terraform Providers Lifecycle Provisioners",{"key":146,"name":147,"count":11},"terraform-state-backend-locking","Terraform State Backend Locking",{"key":149,"name":150,"count":11},"terraform-testing-policy-cicd","Terraform Testing Policy Cicd",[152,156,159,162,165,168],{"key":153,"name":154,"count":155},"aws","AWS",450,{"key":157,"name":158,"count":155},"azure","Azure",{"key":160,"name":161,"count":155},"gcp","GCP",{"key":163,"name":164,"count":155},"kubernetes","Kubernetes",{"key":166,"name":167,"count":155},"linux","Linux",{"key":169,"name":170,"count":155},"terraform","Terraform",[172,190,203,217,230,243],{"id":173,"topic":9,"difficulty":174,"body":175,"options":176,"correct_key":178,"explanation":189},"019f913c-22fc-79ef-a59e-e31b30c80db3",1,"A deploy script starts with `#!\u002Fusr\u002Fbin\u002Fenv bash` followed by `set -e` on the next line. What does `set -e` do?",[177,180,183,186],{"key":178,"text":179},"a","It makes the script exit immediately if any simple command returns a non-zero exit status.",{"key":181,"text":182},"b","It enables verbose mode, printing every command to stderr before it runs",{"key":184,"text":185},"c","It tells bash to treat unset variables as an error and exit",{"key":187,"text":188},"d","It exports every variable assigned afterward into the environment automatically","`set -e` (errexit) causes the shell to stop executing the script as soon as a command exits with a non-zero status, which is exactly the fail-fast behavior an ops script wants instead of silently continuing after a failed step. Option c describes `set -u`, option b describes `set -x`, and option d describes `set -a`\u002F`export`.",{"id":191,"topic":9,"difficulty":174,"body":192,"options":193,"correct_key":181,"explanation":202},"019f913c-22fe-77f5-bb5f-b62dad3a7ef5","A health-check script references `$SERVICE_NAME` but the variable was never set because of a typo (`SERVICE_NAM=web` earlier in the script). With `set -u` enabled, what happens when the script reaches the reference to `$SERVICE_NAME`?",[194,196,198,200],{"key":178,"text":195},"Bash silently substitutes an empty string and continues running the rest of the script",{"key":181,"text":197},"The shell treats the reference to an unset variable as an error and the script exits with a non-zero status",{"key":184,"text":199},"Bash automatically falls back to the last variable that was assigned in the script",{"key":187,"text":201},"`set -u` only affects variables used inside functions, so the script continues normally at the top level","`set -u` (nounset) makes referencing an unset variable an error that terminates the script (when combined with `-e`, or on its own for that command), which is exactly why it's useful for catching typos like `SERVICE_NAM` vs `SERVICE_NAME` early instead of the script silently working with an empty value.",{"id":204,"topic":9,"difficulty":205,"body":206,"options":207,"correct_key":184,"explanation":216},"019f913c-22ff-7712-8ede-53ef73ab7444",2,"A log-parsing script runs `cat access.log | grep ERROR | wc -l` to count error lines. Why would adding `set -o pipefail` at the top of the script matter for this specific line?",[208,210,212,214],{"key":178,"text":209},"It makes `wc -l` count bytes instead of lines, giving a more precise error count",{"key":181,"text":211},"It forces `grep` to run before `cat`, reversing the pipeline's execution order",{"key":184,"text":213},"Without it, the pipeline's exit status is only that of the last command, so an earlier failure in `cat` or `grep` would be silently hidden.",{"key":187,"text":215},"It automatically retries the whole pipeline up to three times if any stage fails","By default, a pipeline's exit status is the exit status of its last command, so if `cat access.log` failed (e.g., file missing) but `grep`\u002F`wc -l` still ran and produced some output, the failure would go unnoticed. `set -o pipefail` makes the pipeline's exit status reflect the last command that actually failed, letting `set -e` (or manual `$?` checks) catch it.",{"id":218,"topic":9,"difficulty":174,"body":219,"options":220,"correct_key":187,"explanation":229},"019f913c-22ff-7eb5-b162-1d0681411ff5","In a shell script, what does an exit code of `0` conventionally mean for the command or script that just finished?",[221,223,225,227],{"key":178,"text":222},"The command is still running in the background and has not finished yet",{"key":181,"text":224},"The command produced no output at all, regardless of whether it succeeded",{"key":184,"text":226},"The command was skipped entirely because of a prior `set -e` failure",{"key":187,"text":228},"The command completed successfully, with no error","By long-standing Unix convention, an exit status of `0` means success, and any non-zero value (1-255) signals some kind of failure or specific error condition. Scripts and pipelines rely on this convention to decide whether to continue, retry, or abort.",{"id":231,"topic":9,"difficulty":174,"body":232,"options":233,"correct_key":181,"explanation":242},"019f913c-2300-77e5-a3f1-75d55ce57f7e","A deploy script has this line:\n```bash\nmkdir -p \u002Fopt\u002Fapp\u002Freleases\u002Fcurrent && systemctl restart app\n```\nWhat does the `&&` between the two commands guarantee?",[234,236,238,240],{"key":178,"text":235},"Both commands always run, and `&&` only affects how their output is displayed",{"key":181,"text":237},"`systemctl restart app` only runs if `mkdir -p ...` exits with status 0 (succeeds)",{"key":184,"text":239},"The two commands run at the same time, in parallel background jobs",{"key":187,"text":241},"`systemctl restart app` runs first, and `mkdir -p ...` runs only if it fails","`&&` is a conditional AND: the command on the right only executes if the command on the left exited successfully (status 0). Here that means the restart is only attempted after the directory was actually created, avoiding restarting a service into a half-prepared release directory.",{"id":244,"topic":9,"difficulty":205,"body":245,"options":246,"correct_key":184,"explanation":255},"019f913c-2301-7544-86e0-657d6950cc03","A script contains:\n```bash\nping -c 1 db.internal || echo \"WARNING: db.internal unreachable\" >> health.log\n```\nWhen does the `echo` command run?",[247,249,251,253],{"key":178,"text":248},"Every time the script runs, regardless of whether `ping` succeeds or fails",{"key":181,"text":250},"Only if `ping` succeeds, since `||` requires the left side to succeed first",{"key":184,"text":252},"Only if `ping -c 1 db.internal` exits with a non-zero status (fails)",{"key":187,"text":254},"Never, because `||` is only valid between two `echo` commands","`||` is a conditional OR: the right-hand command only runs if the left-hand command failed (non-zero exit). So the warning is appended to the log only when the ping fails, which is the typical pattern for a lightweight fallback\u002Falerting action in a health-check script.",{"fields":257,"seniorities":429,"interview_shapes":430,"locales":435,"oauth":437,"question_count":440,"coach_enabled":441,"jd_match_enabled":441},[258,283,303,320,330,343,362,381,403,410,416,423],{"key":259,"name_tr":260,"name_en":260,"sort":174,"specializations":261},"backend","Backend",[262,265,268,271,274,277,280],{"key":263,"name":264,"field":259},"general","Genel",{"key":266,"name":267,"field":259},"go","Go",{"key":269,"name":270,"field":259},"python","Python",{"key":272,"name":273,"field":259},"java","Java",{"key":275,"name":276,"field":259},"csharp","C#\u002F.NET",{"key":278,"name":279,"field":259},"nodejs","Node.js",{"key":281,"name":282,"field":259},"php","PHP",{"key":284,"name_tr":285,"name_en":285,"sort":205,"specializations":286},"frontend","Frontend",[287,288,291,294,297,300],{"key":263,"name":264,"field":284},{"key":289,"name":290,"field":284},"javascript","JavaScript",{"key":292,"name":293,"field":284},"typescript","TypeScript",{"key":295,"name":296,"field":284},"react","React",{"key":298,"name":299,"field":284},"vue","Vue",{"key":301,"name":302,"field":284},"angular","Angular",{"key":304,"name_tr":305,"name_en":305,"sort":306,"specializations":307},"fullstack","Fullstack",3,[308,309,310,311,312,313,314,315,316,317,318,319],{"key":263,"name":264,"field":304},{"key":266,"name":267,"field":259},{"key":269,"name":270,"field":259},{"key":272,"name":273,"field":259},{"key":275,"name":276,"field":259},{"key":278,"name":279,"field":259},{"key":281,"name":282,"field":259},{"key":289,"name":290,"field":284},{"key":292,"name":293,"field":284},{"key":295,"name":296,"field":284},{"key":298,"name":299,"field":284},{"key":301,"name":302,"field":284},{"key":5,"name_tr":6,"name_en":6,"sort":321,"specializations":322},4,[323,324,325,326,327,328,329],{"key":263,"name":264,"field":5},{"key":153,"name":154,"field":5},{"key":160,"name":161,"field":5},{"key":157,"name":158,"field":5},{"key":163,"name":164,"field":5},{"key":169,"name":170,"field":5},{"key":166,"name":167,"field":5},{"key":331,"name_tr":332,"name_en":332,"sort":333,"specializations":334},"ai-engineer","AI Engineer",5,[335,336,337,340],{"key":263,"name":264,"field":331},{"key":269,"name":270,"field":331},{"key":338,"name":339,"field":331},"llm-rag","LLM\u002FRAG",{"key":341,"name":342,"field":331},"mlops","MLOps",{"key":344,"name_tr":345,"name_en":346,"sort":347,"specializations":348},"database","Veritabanı","Database",6,[349,350,353,356,359],{"key":263,"name":264,"field":344},{"key":351,"name":352,"field":344},"postgresql","PostgreSQL",{"key":354,"name":355,"field":344},"mysql","MySQL",{"key":357,"name":358,"field":344},"mongodb","MongoDB",{"key":360,"name":361,"field":344},"redis","Redis",{"key":363,"name_tr":364,"name_en":365,"sort":366,"specializations":367},"mobile","Mobil","Mobile",7,[368,369,372,375,378],{"key":263,"name":264,"field":363},{"key":370,"name":371,"field":363},"ios-swift","iOS (Swift)",{"key":373,"name":374,"field":363},"android-kotlin","Android (Kotlin)",{"key":376,"name":377,"field":363},"flutter","Flutter",{"key":379,"name":380,"field":363},"react-native","React Native",{"key":382,"name_tr":383,"name_en":384,"sort":385,"specializations":386},"security","Güvenlik","Security",8,[387,388,391,394,397,400],{"key":263,"name":264,"field":382},{"key":389,"name":390,"field":382},"appsec","AppSec",{"key":392,"name":393,"field":382},"offensive-pentest","Offensive \u002F Pentest",{"key":395,"name":396,"field":382},"cloud-security","Cloud Security",{"key":398,"name":399,"field":382},"devsecops","DevSecOps",{"key":401,"name":402,"field":382},"blue-team-incident","Blue Team \u002F Incident",{"key":404,"name_tr":405,"name_en":406,"sort":407,"specializations":408},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[409],{"key":263,"name":264,"field":404},{"key":411,"name_tr":412,"name_en":412,"sort":413,"specializations":414},"data-engineer","Data Engineer",10,[415],{"key":263,"name":264,"field":411},{"key":417,"name_tr":418,"name_en":419,"sort":420,"specializations":421},"game-dev","Oyun Geliştirme","Game Development",11,[422],{"key":263,"name":264,"field":417},{"key":424,"name_tr":425,"name_en":425,"sort":426,"specializations":427},"ml-engineer","ML Engineer",12,[428],{"key":263,"name":264,"field":424},[14,15,16],{"junior":431,"mid":433,"senior":434},{"questions":432,"median_sec":3},20,{"questions":432,"median_sec":3},{"questions":432,"median_sec":3},[436,10],"tr",[438,439],"google","github",21750,true]