OpenBSD Handbook

    Theme
    • Part I. Install & Configure
      • Introduction
      • Installing OpenBSD
      • The X Window System
      • Networking
      • System Configuration
      • OpenBSD Basics
      • Managing Software: Packages and Ports
    • Part II. Daily Operations
      • Graphical Environments
      • Multimedia
      • Printing
      • Linux Compatibility
      • Windows Compatibility
      • Games
    • Part III. System Administration
      • Virtualization
      • Storage and File Systems
      • Updating and Upgrading
      • Localization
      • The OpenBSD Boot Process
      • Security
    • Part IV. Networking & Daemons
      • Services
        • Database
          • MariaDB
          • PostgreSQL
          • Redis
          • memcached
        • Directory
          • YP (NIS)
          • LDAP
        • File
          • NFS
          • Samba
        • FTP Services
          • ftpd
          • ProFTPD
          • vsftpd
          • Pure-FTPd
          • TFTP
        • Mail
          • smtpd
          • Dovecot
          • Postfix
          • Exim
          • Rspamd
        • Name
          • Unbound
          • NSD
          • BIND
        • Networking
          • OpenBGPD
          • rad
          • DHCP
          • slaacd
        • Web
          • Apache
          • nginx
          • httpd
          • relayd
        • Logging
          • syslogd
        • Monitoring
          • SNMP
        • Remote Access
          • Audit OpenSSH
          • sshd
        • File Synchronization
          • rsync
        • Messaging
          • RabbitMQ
        • Time
          • NTP
      • PF
        • pfctl cheat sheet
        • PF Anchors
        • PF Filter Rules
        • PF Forwarding
        • PF Lists and Macros
        • PF Load Balancing
        • PF Logging
        • PF NAT
        • PF Options
        • PF Policies
        • PF Shortcuts
        • PF Tables
      • Advanced Networking
        • High Availability and State Replication
        • Multi-WAN and Policy-Based Routing
        • VPN and Cryptographic Tunneling
        • Classic and Lightweight Tunnels
        • IPv6 at Scale
        • QoS and Traffic Shaping
        • MPLS and Label Distribution
        • Network Services at Scale
        • Virtualization and Host Networking
        • Large-Scale L2 and L3 Design
        • Telemetry, Logging, and Flow Export
        • Hardening and Operational Safety
        • Reference Architectures
        • Troubleshooting Playbooks
      • Serial Communication
    • Part V. Miscellaneous
      • Virtualization Cheat Sheet
      • OpenBSD Cheatsheet
      • How-to Guides
        • Complete the First 30 Minutes After Installation
        • Check Hardware Compatibility Before Installing
        • Bootstrap Wi-Fi Firmware Without Ethernet
        • Set Up OpenBSD as a Laptop or Workstation
        • Configure Laptop Power Management
        • Run OpenBSD as a Virtual Machine Guest
        • Install OpenBSD on a VPS or Cloud Server
        • Install OpenBSD with Full-Disk Encryption
        • Troubleshoot Web Browsers on OpenBSD
        • Create an Administrator Account with doas and SSH Keys
        • Establish a Conservative Security Baseline
        • Manage OpenBSD with Ansible
        • Recover Access and Reset the Root Password
        • Collect OpenBSD Diagnostic Evidence
        • Configure Secure Remote Access with OpenSSH
        • Set Up WordPress
        • Build Third-Party Software from Ports
        • Use FIDO Security Keys with OpenSSH
        • Build OpenBSD from Source
        • Configure Wi-Fi Roaming and Wired Failover
        • Dual-Boot OpenBSD on a UEFI System
        • Troubleshoot PF, NAT, and Routing
        • Automate OpenBSD Installation with Autoinstall and PXE
        • Route Multiple VLANs with PF
        • Configure a Road-Warrior WireGuard VPN
        • Troubleshoot Package Installation and Update Failures
        • Route IPv6 Networks without NAT
        • Schedule Recurring Maintenance
        • Plan a Docker Workload Migration to OpenBSD
        • Build a Mail Server with OpenSMTPD, Dovecot, and Rspamd
        • Build a Simple Router and Firewall
        • Monitor an OpenBSD System
        • Back Up and Restore an OpenBSD System
        • Configure softraid RAID1
        • Recover an OpenBSD System That Does Not Boot
        • Install Z shell (zsh)
      • OpenBSD for Linux Users
      • OpenBSD for FreeBSD Users
      • OpenBSD for macOS Users
    • OpenBSD FAQ
    • OpenBSD Package Search
      • Synopsis
      • Install the Package
      • Change the Login Shell
      • Create a Minimal Configuration
      • Return to the Base Shell

      Install Z shell (zsh)

      Synopsis #

      Z shell, normally called zsh, is an interactive shell and scripting language available through OpenBSD packages. This guide installs the package, verifies its registered login-shell path, changes one user’s login shell, and creates a minimal configuration without depending on a third-party configuration framework.

      OpenBSD’s base system includes ksh(1) . Installing zsh is optional and does not replace the shell used by system scripts.

      Install the Package #

      Install zsh with pkg_add(1) :

      # pkg_add zsh
      

      Confirm the installed executable and its entry in shells(5) :

      $ command -v zsh
        # Display the executable selected by the current PATH
      $ grep '^/usr/local/bin/zsh$' /etc/shells
        # Confirm that the package registered zsh as a permitted login shell
      

      The package normally installs the executable as /usr/local/bin/zsh and registers it in /etc/shells. Investigate the package installation if either check fails. Do not add an unverified path to /etc/shells.

      Change the Login Shell #

      Use chsh(1) as the target user:

      $ chsh -s /usr/local/bin/zsh
      

      The new login shell starts at the next login. Confirm the account database entry with getent(1) :

      $ getent passwd "$USER"
      

      Keep an existing login session open while testing the new shell. A syntax error in a user startup file can then be repaired from the working session.

      Create a Minimal Configuration #

      When no startup files exist, the first interactive zsh session may offer the zsh-newuser-install configuration helper. It can create a basic ~/.zshrc. A small manual configuration is also sufficient:

      $ touch ~/.zshrc
        # Create the file without replacing existing content
      $ chmod 600 ~/.zshrc
        # Restrict the user configuration to its owner
      

      Add only settings that are understood and required. The following example enables completion and saves a modest command history:

      autoload -Uz compinit
      compinit
      
      HISTFILE=$HOME/.zsh_history
      HISTSIZE=1000
      SAVEHIST=1000
      setopt append_history
      

      Start a clean interactive shell to test the configuration:

      $ zsh
      

      If startup fails, bypass user startup files with:

      $ zsh -f
      

      Third-party frameworks can execute code during every shell startup and may replace substantial parts of ~/.zshrc. They are outside the base installation procedure and should be reviewed, pinned, and maintained separately if used.

      Return to the Base Shell #

      To restore OpenBSD’s base Korn shell as the login shell:

      $ chsh -s /bin/ksh
      

      Log out and log in again, then remove the zsh package only after confirming that no account still uses it as a login shell.

      Report a bug
      • Synopsis
      • Install the Package
      • Change the Login Shell
      • Create a Minimal Configuration
      • Return to the Base Shell