This document provides an overview of the Z shell (zsh) and highlights some of its advantages over other shells like Bash. It discusses zsh's improved tab completion for commands like git, its ability to expand and replace paths, its right prompt, spelling correction, advanced aliasing features, and syntax highlighting. The document also briefly outlines the history of shells like the Thompson shell, Bourne shell, C shell, Korn shell, and Bash before concluding that zsh offers many powerful features out of the box.
Numerous technologies exist for profiling and tracing live Linux systems - from the traditional and straight forward gProf and strace to the more elaborate SystemTap, oProfile and the Linux Trace Toolkit. Very recently some new technologies, perf events and ftrace, have appeared that can already largely take the place of these traditional tools and have gained mainline acceptance in the Linux community - meaning that they will become more and more relevant in the future and are already being used to shed light on real world performance issues.
This presentation provides an overview of a number of the more noteworthy instrumentation tools available for Linux and the technologies that they build upon. Some examples of using perf events to analyse a running system to help track down real world performance problems are demonstrated.
This document provides an introduction to the UNIX operating system. It discusses that UNIX is a multi-user, multitasking operating system developed in 1969. It describes the three categories of UNIX systems and lists some popular flavors. It also summarizes key UNIX features like portability, security, and networking. Finally, it provides overviews of the UNIX file system structure, commands, utilities and applications.
This document discusses using paravirtualized devices in Linux guests running on Xen in HVM (hardware virtual machine) mode. It offers the benefits of HVM like installing the same as native while also providing access to fast paravirtualized devices. Initial support added xenbus and grant table support while later enhancements added ballooning, spinlocks, and interrupt/MSI remapping. Benchmarks show PV on HVM performs close to PV guests for PV-favored workloads and far ahead for nested paging workloads. PV on HVM provides a spectrum of performance between HVM and PV guests.
Zsh is a shell that has been available since 1990 but has grown in popularity recently due to frameworks like oh-my-zsh. It can be installed on Debian/Ubuntu and Mac systems and set as the default shell. Zsh offers powerful tab autocompletion, globbing patterns for file searching, path expansion and replacement, spelling correction, and aliases. Users can customize the prompt and integrate information from programs like Python virtual environments, version control systems, and batteries. Libraries exist to configure zsh through frameworks like oh-my-zsh and prezto.
XPDDS18: Design and Implementation of Automotive: Virtualization Based on Xen...The Linux Foundation
?
This talk presents a production-ready automotive virtualization solution with Xen. The key requirements that we focus are super-fast startup and recovery from failure, static virtual machine creation with dedicated resources, and performance effective graphics rendering. To reduce the boot time, we optimize the Xen startup procedure by effectively initializing Xen heap and VM memory, and booting multiple VMs concurrently. We provide fast recovery mechanism by re-implementing the VM reset feature. We also develop a highly optimized graphics APIs-forwarding mechanism supporting OpenGLES APIs up to v3.2. The pass rate of Khronos CTS in a guest OS is comparable to the Domain0¨s. Our experiment shows that our virtualization solution provides reasonable performance for ARM-based automotive systems (hypervisor booting: less than 70ms, graphics performance: about 96% of Domain0).
This document discusses shells and shell scripting in Linux. It provides information on common Linux shells like Bash, Bourne shell, C shell, etc. It describes the basic functions of shells like command interpretation, I/O redirection, variables, parameters and more. Shell scripts allow automating tasks and complex series of commands. The document also covers shell script basics, special parameters, variables, I/O redirection operators and more shell scripting concepts.
Course 102: Lecture 27: FileSystems in Linux (Part 2)Ahmed El-Arabawy
?
This lecture goes through the different types of Filesystems and some commands that are used with filesystems. It introduces the filesystems ext2/3/4 , JFFS2, cramfs, ramfs, tmpfs, and NFS.
Video for this lecture on youtube:
http://www.youtube.com/watch?v=XPtPsc6uaKY
Check the other Lectures and courses in
http://Linux4EnbeddedSystems.com
or Follow our Facebook Group at
- Facebook: @LinuxforEmbeddedSystems
Lecturer Profile:
Ahmed ElArabawy
- https://www.linkedin.com/in/ahmedelarabawy
The document summarizes the architecture of the Linux operating system. It discusses the main components of Linux including the kernel, process management, memory management, file systems, device drivers, network stack, and architecture-dependent code. The kernel is at the core and acts as a resource manager. It uses a monolithic design. Process and memory management are handled via data structures like task_struct and buddy allocation. Virtual memory is implemented using page tables. File systems organize files in a hierarchy with inodes. Device drivers interface with hardware. The network stack follows a layered model. Architecture code is separated by subdirectory.
Ramon Fried covers the following topics:
* What DMA is.
* DMA Buffer Allocations and Management.
* Cache Coherency.
* PCI and DMA.
* dmaengine Framework.
Ramon is an Embedded Linux team leader in TandemG, leading various cutting edge projects in the Linux kernel.
He has years of experience in embedded systems, operating systems and Linux kernel.
The document discusses Linux audio drivers. It introduces the Linux audio subsystem, including the ALSA sound core in kernel space and its interfaces for user space applications. It describes the vertical components like the sound core and horizontal components like audio codec and controller drivers. It also covers porting an audio driver, which may involve changing pin assignments for standard codecs or implementing new codec drivers.
The document provides an overview of the Linux kernel architecture and processes. It discusses key kernel concepts like the monolithic kernel design, system calls, loadable modules, virtual memory, and preemptive multitasking. It also covers kernel functions, layers, and context switching between processes. The CPU scheduler, multi-threading, inter-process communication techniques, and tunable kernel parameters are summarized as well.
This presentation gives an overview of Linux kernel block I/O susbsystem functionality, importance of I/O schedulers in Block layer. It also describes the different types of I/O Schedulers including the Deadline I/O scheduler, Anticipatory I/O Scheduler, Complete Fair queuing I/O scheduler and Noop I/O scheduler.
The document provides an overview of the Linux kernel, including its architecture, startup process, functionality, configuration, and compilation. It discusses the differences between micro and monolithic kernels. It also explains the Linux kernel architecture with user space and kernel space separated by a system call interface. Key aspects covered include process management, memory management, device management, and the kernel build system.
The document discusses the Linux kernel and its structure. The Linux kernel acts as the interface between hardware and software, contains device drivers for peripherals, handles resource allocation and tracking application access to files. It is also responsible for security and access controls for users. The kernel version numbers use even numbers to indicate stable releases.
Systemd: the modern Linux init system you will learn to loveAlison Chaiken
?
The talk combines a design overview of systemd with some tutorial incofrmation about how to configure it. Systemd's features and pitfalls are illustrated by short demos and real-life examples. Files used in the demos are listed under "Presentations" at http://she-devel.com/
Video of the live presentation will appear here:
http://www.meetup.com/Silicon-Valley-Linux-Technology/events/208133972/
The document describes the Linux Virtual File System (VFS) which provides a standard interface for file access across different file systems by handling file system calls and interacting with individual file systems. It discusses the key data structures in VFS including inodes, dentries, superblocks and the methods involved for operations like lookups, permission checks, attribute retrieval. The VFS acts as an abstraction layer that allows file operations to work consistently regardless of the underlying file system type.
This document discusses SD card standards and specifications. It describes the SD card pin definitions, speed modes, bus widths, and register maps. It also provides an overview of the Linux SD device driver stack, including the block driver, file systems, and individual driver components like the host controller and core driver. Code examples are provided for registering hardware resources and accessing register structures through readl/writel functions.
The document provides an overview of Unix and shell scripting. It discusses the history and architecture of Unix operating systems. It then covers various Unix commands and utilities for file management, processes, communication, and system administration. Finally, it describes the basics of shell scripting including variables, conditional statements, loops, and here documents.
Pr└sentation aux Geeks Anonymes Li┬ge par Cyril Soldani, le 13 d└cembre 2017.
Page des Geeks Anonymes : https://www.recherche.uliege.be/cms/c_9463913/fr/geeks-anonymes
This document provides an overview of the data structures and functions used to implement ethernet drivers in the Linux kernel. It discusses the net_device and sk_buff structures that represent network interfaces and packets. It also describes how the driver interacts with the kernel via polling, interrupts, and NAPI to handle reception and transmission of frames. Finally, it provides an example of the key components needed for a simple ethernet driver, including initialization, setup, open/close, transmission, and reception functions.
The document provides an overview of Logical Volume Management (LVM) in Linux. It discusses what LVM is, its main components like physical volumes, volume groups, logical volumes, and how they relate. It then gives steps to use LVM by creating a physical volume, volume group and logical volume. It also discusses how LVM allows expanding logical volumes and live resizing of file systems.
This document discusses kernel synchronization in Linux. It begins by outlining kernel control paths and when synchronization is necessary, such as to prevent race conditions when kernel control paths are interleaved. It then describes various synchronization primitives like spin locks, semaphores, and RCU. Examples are given of how these primitives can be used to synchronize access to kernel data structures. Interrupt-aware versions of synchronization primitives are also outlined. The document concludes with examples of how race conditions are prevented for specific data structures and operations in the kernel.
Linux is an open-source operating system that can be used as an alternative to proprietary operating systems like Windows. The document provides an overview of Linux, including its history beginning as a free Unix-like kernel developed by Linus Torvalds. It discusses the GNU project and how Linux combined with GNU software to form a complete free operating system. Additionally, it covers topics like Debian Linux, package management, GUI and CLI interfaces, and basic Linux commands.
Z shell (zsh) provides many powerful features out of the box that can make the shell experience more efficient and productive compared to other shells like bash. Zsh includes advanced tab completion for commands like git, path expansion and replacement, right-hand prompts, spelling correction, powerful aliases, extended globbing, environment variable editing, and programmable file renaming. It also features intuitive history searching, syntax highlighting, and integration with the oh-my-zsh framework. Overall, zsh's extensive capabilities and customization options allow users to optimize their shell workflow.
Linux is a free and open-source operating system available in many distributions. It emphasizes flexibility, control, and customization through its use of plain text files and commands, small focused programs, and open-source code. Shell scripts allow users to combine Linux programs and commands to automate tasks and create their own programs without compiling code.
The document summarizes the architecture of the Linux operating system. It discusses the main components of Linux including the kernel, process management, memory management, file systems, device drivers, network stack, and architecture-dependent code. The kernel is at the core and acts as a resource manager. It uses a monolithic design. Process and memory management are handled via data structures like task_struct and buddy allocation. Virtual memory is implemented using page tables. File systems organize files in a hierarchy with inodes. Device drivers interface with hardware. The network stack follows a layered model. Architecture code is separated by subdirectory.
Ramon Fried covers the following topics:
* What DMA is.
* DMA Buffer Allocations and Management.
* Cache Coherency.
* PCI and DMA.
* dmaengine Framework.
Ramon is an Embedded Linux team leader in TandemG, leading various cutting edge projects in the Linux kernel.
He has years of experience in embedded systems, operating systems and Linux kernel.
The document discusses Linux audio drivers. It introduces the Linux audio subsystem, including the ALSA sound core in kernel space and its interfaces for user space applications. It describes the vertical components like the sound core and horizontal components like audio codec and controller drivers. It also covers porting an audio driver, which may involve changing pin assignments for standard codecs or implementing new codec drivers.
The document provides an overview of the Linux kernel architecture and processes. It discusses key kernel concepts like the monolithic kernel design, system calls, loadable modules, virtual memory, and preemptive multitasking. It also covers kernel functions, layers, and context switching between processes. The CPU scheduler, multi-threading, inter-process communication techniques, and tunable kernel parameters are summarized as well.
This presentation gives an overview of Linux kernel block I/O susbsystem functionality, importance of I/O schedulers in Block layer. It also describes the different types of I/O Schedulers including the Deadline I/O scheduler, Anticipatory I/O Scheduler, Complete Fair queuing I/O scheduler and Noop I/O scheduler.
The document provides an overview of the Linux kernel, including its architecture, startup process, functionality, configuration, and compilation. It discusses the differences between micro and monolithic kernels. It also explains the Linux kernel architecture with user space and kernel space separated by a system call interface. Key aspects covered include process management, memory management, device management, and the kernel build system.
The document discusses the Linux kernel and its structure. The Linux kernel acts as the interface between hardware and software, contains device drivers for peripherals, handles resource allocation and tracking application access to files. It is also responsible for security and access controls for users. The kernel version numbers use even numbers to indicate stable releases.
Systemd: the modern Linux init system you will learn to loveAlison Chaiken
?
The talk combines a design overview of systemd with some tutorial incofrmation about how to configure it. Systemd's features and pitfalls are illustrated by short demos and real-life examples. Files used in the demos are listed under "Presentations" at http://she-devel.com/
Video of the live presentation will appear here:
http://www.meetup.com/Silicon-Valley-Linux-Technology/events/208133972/
The document describes the Linux Virtual File System (VFS) which provides a standard interface for file access across different file systems by handling file system calls and interacting with individual file systems. It discusses the key data structures in VFS including inodes, dentries, superblocks and the methods involved for operations like lookups, permission checks, attribute retrieval. The VFS acts as an abstraction layer that allows file operations to work consistently regardless of the underlying file system type.
This document discusses SD card standards and specifications. It describes the SD card pin definitions, speed modes, bus widths, and register maps. It also provides an overview of the Linux SD device driver stack, including the block driver, file systems, and individual driver components like the host controller and core driver. Code examples are provided for registering hardware resources and accessing register structures through readl/writel functions.
The document provides an overview of Unix and shell scripting. It discusses the history and architecture of Unix operating systems. It then covers various Unix commands and utilities for file management, processes, communication, and system administration. Finally, it describes the basics of shell scripting including variables, conditional statements, loops, and here documents.
Pr└sentation aux Geeks Anonymes Li┬ge par Cyril Soldani, le 13 d└cembre 2017.
Page des Geeks Anonymes : https://www.recherche.uliege.be/cms/c_9463913/fr/geeks-anonymes
This document provides an overview of the data structures and functions used to implement ethernet drivers in the Linux kernel. It discusses the net_device and sk_buff structures that represent network interfaces and packets. It also describes how the driver interacts with the kernel via polling, interrupts, and NAPI to handle reception and transmission of frames. Finally, it provides an example of the key components needed for a simple ethernet driver, including initialization, setup, open/close, transmission, and reception functions.
The document provides an overview of Logical Volume Management (LVM) in Linux. It discusses what LVM is, its main components like physical volumes, volume groups, logical volumes, and how they relate. It then gives steps to use LVM by creating a physical volume, volume group and logical volume. It also discusses how LVM allows expanding logical volumes and live resizing of file systems.
This document discusses kernel synchronization in Linux. It begins by outlining kernel control paths and when synchronization is necessary, such as to prevent race conditions when kernel control paths are interleaved. It then describes various synchronization primitives like spin locks, semaphores, and RCU. Examples are given of how these primitives can be used to synchronize access to kernel data structures. Interrupt-aware versions of synchronization primitives are also outlined. The document concludes with examples of how race conditions are prevented for specific data structures and operations in the kernel.
Linux is an open-source operating system that can be used as an alternative to proprietary operating systems like Windows. The document provides an overview of Linux, including its history beginning as a free Unix-like kernel developed by Linus Torvalds. It discusses the GNU project and how Linux combined with GNU software to form a complete free operating system. Additionally, it covers topics like Debian Linux, package management, GUI and CLI interfaces, and basic Linux commands.
Z shell (zsh) provides many powerful features out of the box that can make the shell experience more efficient and productive compared to other shells like bash. Zsh includes advanced tab completion for commands like git, path expansion and replacement, right-hand prompts, spelling correction, powerful aliases, extended globbing, environment variable editing, and programmable file renaming. It also features intuitive history searching, syntax highlighting, and integration with the oh-my-zsh framework. Overall, zsh's extensive capabilities and customization options allow users to optimize their shell workflow.
Linux is a free and open-source operating system available in many distributions. It emphasizes flexibility, control, and customization through its use of plain text files and commands, small focused programs, and open-source code. Shell scripts allow users to combine Linux programs and commands to automate tasks and create their own programs without compiling code.
This document provides a short tutorial on Linux shell scripting. It covers topics such as:
- What is a shell script and defining the shell type with the #! line
- Common shell types like sh, csh, ksh, bash
- The four types of lines in a script: shell defining, empty, comment, command
- Using shell variables, calculations, and preset shell variables
- Conditional branching with if/then/else and case statements
- Loops like while, until, for with continue and break
- Command line arguments and positional parameters
- Other topics like searches with grep, arrays, functions, I/O redirection
This document discusses how to customize the BASH shell prompt and colorize files and prompts. It provides instructions on using the $PS1 variable to modify the prompt, including adding the current working directory or using special character sequences. It also explains how to set up a .dir_colors file to define color codes for different file types and extensions when using ls, as well as how to define color codes and sequences for a colorful prompt.
This document discusses how to customize the BASH shell prompt and colorize files and prompts. It provides instructions on using the $PS1 variable to modify the prompt, including adding the current working directory or using special character sequences. It also explains how to set up a .dir_colors file to define color codes for different file types and enable colorization with eval. Finally, it shares a sample script for defining color escape codes and using them to create a colorful prompt.
The document provides an introduction to Bash shell programming in Linux. It covers basic shell commands like pwd, ls, cat, grep, and redirection operators like > and |. It explains how to write shell scripts, set permissions, and include tests and branching. Examples are provided for listing files, examining file contents, sorting output with pipes, and writing a simple "Hello world" shell script. The document is intended as a basic overview of shell programming concepts.
This document provides an overview of the Linux kernel timeline and shell basics:
- The Linux kernel was started by Linus Torvalds in 1991 building on earlier work from 1965 onward including Multics, Unix, and the GNU operating system.
- The shell is the command line interface that allows users to interact with the operating system and interprets commands. Common shells include bash, sh, csh, and zsh.
- Shell variables like PS1 control the command prompt appearance and PATH defines where executable programs are located. Pipes and redirection operators manage input/output between programs.
The document provides an overview of the history and development of Unix and the command line interface. It discusses how Ken Thompson originally created Unix at Bell Labs in the 1960s using assembly language, and how Dennis Ritchie later implemented the C programming language, which Unix was then developed in. It describes how the core of Unix is the kernel, which handles tasks like loading programs into memory. The document outlines the development of the shell, from Ken Thompson's original shell to the Bourne Shell introduced in 1977. It highlights some key features of command line interfaces like input/output redirection and built-in commands for navigation. The document concludes with recommendations for using tab completion, managing command history, defining aliases, and configuring shell profiles and
This document presents an agenda for becoming a "console cowboy" by learning to be more productive using the terminal and bash shell. It covers the basic terminal tools, bash usage and configuration, utilities like grep, sed and awk, scripting with variables, conditionals and loops, and tools for developers like Homebrew, Git, Xcode and xcpretty. The goal is to stop using the mouse and automate work by writing scripts to harness the power of the Unix command line.
This document provides an overview of Linux history and features. It discusses that Unix was developed in 1969 at Bell Labs and led to various variants. Linux was developed in 1991 by Linus Torvalds as an open source clone of Unix. It discusses some popular Linux distributions like Red Hat, Ubuntu, Debian etc. It then covers basic Linux commands, text editors like Vi and Emacs, available software packages, user management and how to setup a basic web server. It encourages computer engineers to learn Linux as most professional applications and tools are available on Linux platforms.
This document provides an overview of tools for effective data manipulation including GNU Emacs, the BASH shell, and Ruby. It discusses how GNU Emacs can be used for powerful text editing and file manipulation through keyboard macros and mode-specific commands. The BASH shell and variables are summarized as useful for file manipulation and applying UNIX commands. Ruby is presented as a scripting language well-suited for directly processing file contents, with an example provided to select and rearrange fields from a comma-separated file. References for further learning about these tools are also listed.
This document provides an overview of tools for effective data manipulation including GNU Emacs, the BASH shell, and Ruby. It discusses how GNU Emacs can be used for powerful text editing and file manipulation through keyboard macros and mode-specific commands. The BASH shell and variables are summarized as useful for file manipulation and applying UNIX commands. Ruby is presented as a scripting language well-suited for directly processing file contents, with an example provided to select and rearrange fields from a comma-separated file. References for further learning about these tools are also listed.
The document provides an overview of Linux basics, including definitions of Unix and Linux, descriptions of different Linux distributions, and explanations of common Linux commands. It discusses how Unix was developed in 1969 at Bell Labs and how Linux was created in 1991 as a clone of Unix. It also lists and briefly explains basic commands like ls, cd, pwd, and vi.
This document provides an overview of an introductory class on using Linux at the command line. It outlines the following:
- The class will start with a sign-in sheet and end with an evaluation. The instructor will cover as much material as possible in the allotted time, starting with the easiest concepts.
- The class is hands-on and lab-based, allowing students to ask questions. Commands for students to type will be in bold text. There will be a mid-class break.
- Topics to be covered include basic Linux commands, navigating and manipulating files and directories, permissions, and using tools like grep, awk and sed to filter and manipulate output.
The document provides an overview of key commands and concepts for working on the Linux command line, including:
- Common shells like bash, sh, csh and how to change between them. The default shell is specified in /etc/passwd and the current shell is stored in the $SHELL variable.
- How to use commands on the command line, including command completion, command history, and command substitution. The readline library allows editing previous commands.
- Important environment variables like $PATH that determine where commands are located, $PS1 for customizing the shell prompt, and others for configuring shell behavior.
- How to set, view, and export environment variables to customize application settings and behavior.
This document provides an introduction to Unix and Linux operating systems. It discusses what Unix is, how it relates to Linux, and why Unix/Linux is useful for programmers and scientists. It then covers how to connect to a Unix/Linux system using a terminal, what shells are, navigating the file system using commands like ls, cd, pwd, and how to manage files with commands like cp, mv, rm. The document also discusses file permissions, running programs, and input/output redirection techniques like piping.
Unix/Linux is an operating system developed in the 1960s that uses a command line interface. It is the predecessor to Linux, which is now a widely popular open-source variant of Unix. The document provides an overview of basic Unix/Linux commands and concepts for navigating files and directories, editing and manipulating files, running programs, and accessing remote systems. It explains commands like ls, cd, pwd, cat, less, grep, diff, kill, and scp.
This document summarizes the history and key aspects of Linux. It describes how Linux originated from earlier operating systems like MULTICS and UNIX. It provides an overview of Linux components like the kernel, GNU tools, and popular desktop interfaces. It also summarizes common Linux commands for file navigation, editing, and process management. Finally, it gives a brief introduction to the GNOME desktop environment.
The document outlines an upcoming Linux command line class, including:
- It will start with a sign-in sheet and end with a class evaluation.
- The class will cover as much material as possible in the allotted time, starting with the easiest concepts.
- It will be hands-on and allow questions at any time.
Here are some sed commands to demonstrate its capabilities:
? sed 's/rain/snow/' easy_sed.txt; cat easy_sed.txt
? sed 's/plain/mountains/' easy_sed.txt; cat easy_sed.txt
? sed 's/Spain/France/' easy_sed.txt; cat easy_sed.txt
? sed 's/^The //' easy_sed.txt; cat easy_sed.txt
? sed 's/ $//' easy_sed.txt; cat easy_sed.txt
? sed 's/plain$/plains/' easy_sed.txt; cat easy_
1. why
Z shell (zsh)
is cooler
than
your shell
Brendon Rapp - Cave Lunch #1
2. why
Z shell (zsh)
is cooler
than
your shell
(unless your shell is zsh)
Brendon Rapp - Cave Lunch #1
3. (alternate title)
she sells
Z shells
by the
sea shore
4. Donald Knuth
Professor Emeritus of
Computer Science at
Stanford
Author of The Art of
Computer Programming
"Father of algorithmic
analysis"
Creator of TeX
5. In 1986, Knuth was asked to write a guest
feature for the "Programming Pearls" column in
the Communications of the ACM journal.
The task was to write a program that would:
read a file of text, determine the n most
frequently used words, and print out a sorted
list of those words along with their frequencies.
6. Knuth produced a solution in Pascal that, when
printed, was about 10 pages in length. It was
well designed, thoroughly commented, and
used a novel data structure for managing the
word count list.
7. In response, Doug McIlroy wrote a shell script
that produced the same output.
8. In response, Doug McIlroy wrote a shell script
that produced the same output.
McIlroy's script was six lines long.
10. A brief history of shells
1971: Thompson shell
¢ Ken Thompson, Bell Labs, first Unix shell
¢ interactive interpreter, not scripting environment
1977: Bourne shell
¢ scripting language
¢ Version 7 Unix, PDP-11
¢ 1984: The UNIX Programming Environment, Kernighan & Pike
¢ The shell of commercial Unixes
$ System V, AIX, HP-UX, SCO, Solaris, SunOS
$ Still the default on some of these (that are still alive)
¢ /bin/sh
$ compatibility mode in modern shells
$ symlink or hard link to compatible shells in modern Unixes
11. A brief history of shells
1978: C shell
¢ BSD Unix
¢ More "C-like" scripting syntax (kinda)
¢ Command history
¢ Aliasing
¢ tcsh - newer C shell, default on FreeBSD, and OS X systems
10.0-10.2
1983: Korn shell
¢ Bell Labs (AT&T)
¢ Proprietary until 2000
¢ vi and emacs editing modes
¢ Lots of C shell features
¢ "middle road" between Bourne and C shell
¢ pdksh - default on OpenBSD
12. A brief history of shells
1989: Bourne Again shell (bash)
¢ GNU, GPL
¢ first legitimate Free shell (/bin/sh compatible)
$ shells like ksh and csh became Free only much later on
¢ standard shell for Linux distros, Mac OS X 10.3+
¢ TAB completion
¢ extended scripting syntax
1990: Z shell
¢ most closely resembles Korn shell
¢ /bin/bash compatibility, drop-in replacement for Bash
¢ "new" (despite being over 20 years old)
¢ awesome stuff I'll talk about next
16. ... your Bash is old!
(OS X 10.8.2... and many earlier OS X versions too)
17. OS X: GPL Wasteland
¢ no GPLv3 on OS X
¢ OS X bash: final version released as GPLv2
¢ Homebrew has latest Bash (but many use
situation as an excuse to try zsh instead)
28. bash: git completion
It's possible to get completion for git (and many other commands) in Bash
by installing bash-completion package, but the completion is still
rudimentary compared to zsh:
¢ no cycling through options with repeated tabs
¢ no accompanying info with commands, just a list
¢ breaks to new prompt line on each tab instead of updating in-place
There may be ways to improve that situation and bring it more in line with
zsh, but with zsh, you get it basically out-of-the-box, with a single command
in your .zshrc to enable completions.
59. Other zsh bullet points
¢ Simple configuration style
¢ Shared history
$ simple & fast, requires some monkeying to replicate
in bash
¢ Lots of additions for shell scripting
¢ Output redirection to multiple destinations
And, apparently, plenty of other stuff deeper than I've
gotten so far.