Core Linux fundamentals: files, users, groups, permissions and everyday administration.
- Add a Directory to the Global PATHeasy · in-browser
Write /etc/profile.d/acme-path.sh that APPENDS /opt/acme/bin to the existing PATH for all login shells, preserving the current value. Use export and reference the existing $PATH so you do not clobber it.
(Authored config, graded structurally — the engine isn't run here.)
- Add a global env vareasy
Create /etc/profile.d/academy.sh that exports ACADEMY=1.
- Add a usereasy
Create a normal login user named 'bob'.
- Add user to a groupeasy
Add the user 'player' to the group 'docker' (create the group).
- Append a lineeasy
Append the exact line `MANAGED=yes` to /etc/app/state (create it if needed) without removing existing lines.
- Author the Loopback /etc/hostseasy · in-browser
Write /etc/hosts with the standard loopback entries: 127.0.0.1 mapping to localhost, ::1 mapping to localhost (IPv6), and an entry mapping 127.0.1.1 to this machine's hostname linux-lab. Each is one line: an IP address followed by whitespace then one or more names.
(Authored config, graded structurally — the engine isn't run here.)
- Clean up a stray fileeasy
Delete the file /tmp/DELETE_ME.
- Copy a directory treeeasy
Recursively copy /etc/skel to /srv/template (contents preserved).
- Copy a fileeasy
Copy /etc/hostname to /home/player/host.txt.
- Create a groupeasy
Create a group named 'devs'.
- Create a symlinkeasy
Create a symlink /usr/local/bin/ll pointing to /usr/bin/ls.
- Create several fileseasy
Create three empty files: /srv/q/a /srv/q/b /srv/q/c
- Create your first fileeasy
Create the file /home/player/hello.txt containing exactly: hello world
- Default umask Drop-ineasy · in-browser
Write /etc/profile.d/umask.sh, a login-shell snippet that sets a restrictive default umask of 027 (group read-only, others nothing). Begin the file with a comment line explaining its purpose, then set the umask.
(Authored config, graded structurally — the engine isn't run here.)
- Explore a fresh Linux boxeasy
This is a free interactive Linux environment — a real, disposable
VM that's yours for the session. Use the terminal below (or SSH in
with the shown credentials) to poke around: who am I, what distro
is this, what's running, how much disk/memory?
Objective: create the file /home/player/done to finish.
Hint: touch /home/player/done
Then click "Check".
- Join a groupeasy
Add the user 'player' to the existing group 'developers'.
- Make a directory read-onlyeasy
Set /srv/locked to mode 555 (read+execute, no write for anyone).
- Make a nested directoryeasy
Create the directory tree /srv/app/data (all levels).
- Make a script executableeasy
Make /opt/run.sh executable (it currently is not).
- Pre-Login Legal Bannereasy · in-browser
Write /etc/issue, the banner shown before login on the console. It must state 'Authorized access only' and warn that activity is monitored (the word 'monitored', any case).
(Authored config, graded structurally — the engine isn't run here.)
- Rename a config fileeasy
Rename /etc/app/old.conf to /etc/app/app.conf (keep the contents).
- Seed Default Shell Aliaseseasy · in-browser
Write /etc/profile.d/aliases.sh defining three shell aliases for every login shell: 'll' for a long listing (ls -alF), '..' to go up one directory (cd ..), and 'grep' with colour output (grep --color=auto).
(Authored config, graded structurally — the engine isn't run here.)
- Set the hostnameeasy
Set the static hostname to "academy-box".
- Set the hostnameeasy
Set the system static hostname to app-prod.
- Set the message of the dayeasy
Make /etc/motd contain a line that is EXACTLY (whole line): *** RESTRICTED SYSTEM ***
- Take ownershipeasy
Change the owner of /srv/data to the user 'player'.
- Write the System Environment Fileeasy · in-browser
Write /etc/environment to set three system-wide variables read by PAM at login: EDITOR=vim, LANG=en_US.UTF-8, and a PATH that includes the standard sbin/bin directories plus /usr/local/bin (e.g. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin). /etc/environment is a plain KEY=value file (no 'export', no shell syntax, no variable expansion).
(Authored config, graded structurally — the engine isn't run here.)
- Author /etc/os-releasemedium · in-browser
Write /etc/os-release for a fictional distribution: NAME is 'Acme Linux', ID is 'acme', VERSION_ID is '3.2', and PRETTY_NAME is a human label. The file uses KEY=value lines where string values may be double-quoted.
(Authored config, graded structurally — the engine isn't run here.)
- Install a packagemedium
The 'tree' command is not installed on this minimal box, and the box has no internet access. A copy of the package is staged locally in /opt/pkgs/. Install it from that file (e.g. `sudo rpm -i /opt/pkgs/tree*.rpm`) so `tree --version` works.
- Lock a service account shellmedium
Set the login shell of the user 'svc' to /usr/sbin/nologin.
- Mass-change an extensionmedium
In /srv/imgs rename every *.jpeg to *.jpg (keep contents, leave non-jpeg).
- Schedule a cron jobmedium
Add a system cron job in /etc/cron.d running /usr/local/bin/sync.sh as root every 10 minutes.
- Set the timezonemedium
Set the system timezone to UTC.
- Set the timezone to Tokyomedium
Set the system timezone to Asia/Tokyo.
- System Crontab Drop-inmedium · in-browser
Write /etc/cron.d/backup, a system crontab fragment that runs /usr/local/bin/backup.sh as the root user every day at 02:30. Remember that /etc/cron.d lines include a username field between the time spec and the command.
(Authored config, graded structurally — the engine isn't run here.)
- Tune vm.swappiness via sysctl.dmedium · in-browser
Write /etc/sysctl.d/60-swappiness.conf, a kernel-parameter drop-in. Open the file with a comment line explaining the tunable, then lower the swap tendency by setting vm.swappiness to 10 using the standard 'key = value' form.
(Authored config, graded structurally — the engine isn't run here.)
- Bulk-rename stale filespro
In /data, every file ending .log.old must be renamed to drop the .old (app.log.old -> app.log), keeping contents. Files not ending .log.old must be left untouched.
- Fix a permission treepro
Recursively repair /srv/site: every directory must be mode 755, every file mode 644, and everything owned by player:player.
- Logrotate Policy for an App Logpro · in-browser
Write /etc/logrotate.d/acme, a logrotate stanza for /var/log/acme/app.log. The first line must be the log path followed by an opening '{' brace on that SAME line. Inside the braces, rotate daily, keep 14 rotations (rotate 14), and compress old logs; close with a '}'. Put each directive on its own line.
(Authored config, graded structurally — the engine isn't run here.)