30 Special system features #
    This chapter starts with information about various software packages, the
    virtual consoles and the keyboard layout. We talk about software components
    like bash,
    cron and
    logrotate, because they were
    changed or enhanced during the last release cycles. Even if they are small
    or considered of minor importance, users should change their default
    behavior, because these components are often closely coupled with the
    system. The chapter concludes with a section about language and
    country-specific settings (I18N and L10N).
   
30.1 Information about special software packages #
  The following chapter provides basic information about the following tools: bash, cron, logrotate, locate, ulimit and free.
 
30.1.1 The bash package and /etc/profile #
Bash is the default system shell. When used as a login shell, it reads several initialization files. Bash processes them in the order they appear in this list:
- /etc/profile
- ~/.profile
- /etc/bash.bashrc
- ~/.bashrc
   Make custom settings in ~/.profile or
   ~/.bashrc. To ensure the correct processing of these
   files, it is necessary to copy the basic settings from
   /etc/skel/.profile or
   /etc/skel/.bashrc into the home directory of the user.
   It is recommended to copy the settings from /etc/skel
   after an update. Execute the following shell commands to prevent the loss of
   personal adjustments:
  
>mv ~/.bashrc ~/.bashrc.old>cp /etc/skel/.bashrc ~/.bashrc>mv ~/.profile ~/.profile.old>cp /etc/skel/.profile ~/.profile
   Then copy personal adjustments back from the *.old files.
  
30.1.2 The cron package #
   Use cron to automatically run
   commands in the background at predefined times. cron uses specially formatted time tables, and
   the tool comes with several default ones. Users can also specify custom
   tables, if needed.
  
   The cron tables are located in /var/spool/cron/tabs.
   /etc/crontab serves as a systemwide cron table. Enter
   the user name to run the command directly after the time table and before
   the command. In Example 30.1, “Entry in /etc/crontab”,
   root is entered. Package-specific
   tables, located in /etc/cron.d, have the same format.
   See the cron man page (man cron).
  
1-59/5 * * * * root test -x /usr/sbin/atrun && /usr/sbin/atrun
   You cannot edit /etc/crontab by calling the command
   crontab -e. This file must be loaded directly into an
   editor, then modified and saved.
  
   Several packages install shell scripts to the directories
   /etc/cron.hourly, /etc/cron.daily,
   /etc/cron.weekly and
   /etc/cron.monthly, whose execution is controlled by
   /usr/lib/cron/run-crons.
   /usr/lib/cron/run-crons is run every 15 minutes from
   the main table (/etc/crontab). This guarantees that
   processes that may have been neglected can be run at the proper time.
  
   To run the hourly, daily or other
   periodic maintenance scripts at custom times, remove the time stamp files
   regularly using /etc/crontab entries (see
   Example 30.2, “/etc/crontab: remove time stamp files”, which removes the
   hourly one before every full hour, the
   daily one once a day at 2:14 a.m., etc.).
  
59 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly 14 2 * * * root rm -f /var/spool/cron/lastrun/cron.daily 29 2 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly 44 2 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly
   Or you can set DAILY_TIME in
   /etc/sysconfig/cron to the time at which
   cron.daily should start. The setting of
   MAX_NOT_RUN ensures that the daily tasks get triggered to
   run, even if the user did not turn on the computer at the specified
   DAILY_TIME for a longer time. The maximum value of
   MAX_NOT_RUN is 14 days.
  
30.1.3 Stopping cron status messages #
   To avoid the mail flood caused by cron status messages, the default value of
   SEND_MAIL_ON_NO_ERROR in
   /etc/sysconfig/cron is set to "no"
   for new installations. Even with this setting to "no",
   cron data output will still be sent to the MAILTO
   address, as documented in the cron man page.
  
In the update case it is recommended to set these values according to your needs.
30.1.4 Log files: package logrotate #
  There are several system services (daemons) that, along
  with the kernel itself, regularly record the system status and specific
  events onto log files. This way, the administrator can regularly check the
  status of the system at a certain point in time, recognize errors or faulty
  functions and troubleshoot them with pinpoint precision. These log files are
  normally stored in /var/log as specified by FHS and grow
  on a daily basis. The logrotate package helps
  control the growth of these files. For more details refer to
  Section 3.3, “Managing log files with logrotate”.
 
30.1.5 The locate command #
locate, a command for quickly finding files, is not
   included in the standard scope of installed software. If desired, install
   the package mlocate, the successor of the package
   findutils-locate. The
   updatedb process is started
   automatically every night or about 15 minutes after booting the system.
  
30.1.6 The ulimit command #
   With the ulimit (user limits)
   command, it is possible to set limits for the use of system resources and to
   have these displayed. ulimit is especially useful for
   limiting available memory for applications. With this, an application can be
   prevented from co-opting too much of the system resources and slowing or
   even hanging up the operating system.
  
ulimit can be used with various options. To limit memory
   usage, use the options listed in Table 30.1, “ulimit: Setting resources for the user”.
  
ulimit: Setting resources for the user #| 
 | The maximum resident set size | 
| 
 | The maximum amount of virtual memory available to the shell | 
| 
 | The maximum size of the stack | 
| 
 | The maximum size of core files created | 
| 
 | All current limits are reported | 
   Systemwide default entries are set in /etc/profile.
   Editing this file directly is not recommended, because changes will be
   overwritten during system upgrades. To customize systemwide profile
   settings, use /etc/profile.local. Per-user settings
   should be made in
   ~USER/.profile.
  
ulimit: Settings in ~/.bashrc ## Limits maximum resident set size (physical memory): ulimit -m 98304 # Limits of virtual memory: ulimit -v 98304
   Memory allocations must be specified in KB. For more detailed information,
   see man bash.
  
ulimit support
    Not all shells support ulimit directives. PAM (for
    example, pam_limits) offers comprehensive adjustment
    possibilities as an alternative to ulimit.
   
30.1.7 The free command #
   The free command displays the total amount of free and
   used physical memory and swap space in the system and the buffers and
   cache consumed by the kernel. The concept of available
   RAM dates back to before the days of unified memory management.
   The slogan free memory is bad memory applies well to
   Linux. As a result, Linux has always made the effort to balance out caches
   without allowing free or unused memory.
  
   The kernel does not have direct knowledge of any applications or user data.
   Instead, it manages applications and user data in a page
   cache. If memory runs short, parts of it are written to the swap
   partition or to files, from which they can initially be read using the
   mmap command (see man mmap).
  
   The kernel also contains other caches, such as the slab
   cache, where the caches used for network access are stored. This
   may explain the differences between the counters in
   /proc/meminfo. Most, but not all, of them can be
   accessed via /proc/slabinfo.
  
   However, if your goal is to find out how much RAM is currently being used,
   find this information in /proc/meminfo.
  
30.1.8 Man pages and info pages #
   For some GNU applications (such as tar), the man pages are no longer
   maintained. For these commands, use the --help option to
   get a quick overview of the info pages, which provide more in-depth
   instructions. Info
   is GNU's hypertext system. Read an introduction to this system by entering
   info info. Info pages can be viewed with
   Emacs by entering emacs -f info or
   directly in a console with info. You can also use tkinfo,
   xinfo or the help system to view info pages.
  
30.1.9 Selecting man pages using the man command #
   To read a man page enter man
MAN_PAGE. If a man page with the same name exists
   in different sections, they will all be listed with the corresponding
   section numbers. Select the one to display. If you do not enter a section
   number within a few seconds, the first man page will be displayed.
  
   To change this to the default system behavior, set
   MAN_POSIXLY_CORRECT=1 in a shell initialization file such
   as ~/.bashrc.
  
30.1.10 Settings for GNU Emacs #
GNU Emacs is a complex work environment. The following sections cover the configuration files processed when GNU Emacs is started. More information is available at https://www.gnu.org/software/emacs/.
  On start-up, Emacs reads several files containing the settings of the user,
  system administrator and distributor for customization or preconfiguration.
  The initialization file ~/.emacs is installed to the
  home directories of the individual users from /etc/skel.
  .emacs, in turn, reads the file
  /etc/skel/.gnu-emacs. To customize the program, copy
  .gnu-emacs to the home directory (with cp
  /etc/skel/.gnu-emacs ~/.gnu-emacs) and make the desired settings
  there.
 
.gnu-emacs defines the file
  ~/.gnu-emacs-custom as custom-file.
  If users make settings with the customize options in
  Emacs, the settings are saved to ~/.gnu-emacs-custom.
 
  With SUSE Linux Enterprise Desktop, the emacs
  package installs the file site-start.el in the directory
  /usr/share/emacs/site-lisp. The file
  site-start.el is loaded before the initialization file
  ~/.emacs. Among other things,
  site-start.el ensures that special configuration files
  distributed with Emacs add-on packages, such as
  psgml, are loaded automatically.
  Configuration files of this type are located in
  /usr/share/emacs/site-lisp, too, and always begin with
  suse-start-. The local system administrator can specify
  systemwide settings in default.el.
 
  More information about these files is available in the Emacs info file under
  Init File: info:/emacs/InitFile.
  Information about how to disable the loading of these files (if necessary) is
  also provided at this location.
 
The components of Emacs are divided into several packages:
- The base package - emacs.
- emacs-x11(usually installed): the program with X11 support.
- emacs-nox: the program without X11 support.
- emacs-info: online documentation in info format.
- emacs-el: the uncompiled library files in Emacs Lisp. These are not required at runtime.
- Numerous add-on packages can be installed if needed: - emacs-auctex(LaTeX),- psgml(SGML and XML),- gnuserv(client and server operation) and others.
30.2 Virtual consoles #
Linux is a multiuser and multitasking system. The advantages of these features can be appreciated even on a stand-alone PC system. In text mode, there are six virtual consoles available. Switch between them using Alt–F1 through Alt–F6. The seventh console is reserved for X and the tenth console shows kernel messages.
To switch to a console from X without shutting it down, use Ctrl–Alt–F1 to Ctrl–Alt–F6. To return to X, press Alt–F7.
30.3 Keyboard mapping #
To standardize the keyboard mapping of programs, changes were made to the following files:
/etc/inputrc /etc/X11/Xmodmap /etc/skel/.emacs /etc/skel/.gnu-emacs /etc/skel/.vimrc /etc/csh.cshrc /etc/termcap /usr/share/terminfo/x/xterm /usr/share/X11/app-defaults/XTerm /usr/share/emacs/VERSION/site-lisp/term/*.el
  These changes only affect applications that use terminfo
  entries or whose configuration files are changed directly
  (vi, emacs, etc.). Applications not
  shipped with the system should be adapted to these defaults.
 
  Under X, the compose key (multikey) can be enabled as explained in
  /etc/X11/Xmodmap.
 
Further settings are possible using the X Keyboard Extension (XKB).
   Information about XKB is available in the documents listed in
   /usr/share/doc/packages/xkeyboard-config (part of the
   xkeyboard-config package).
  
30.4 Language and country-specific settings #
The system is, to a very large extent, internationalized and can be modified for local needs. Internationalization (I18N) allows specific localization (L10N). The abbreviations I18N and L10N are derived from the first and last letters of the words and, in between, the number of letters omitted.
  Settings are made with LC_ variables defined in the
  file /etc/sysconfig/language. This refers not only to
  native language support, but also to the categories
  Messages (Language), Character Set,
  Sort Order, Time and Date,
  Numbers and Money. Each of these
  categories can be defined directly with its own variable or indirectly with a
  master variable in the file language (see the
  locale man page).
 
- RC_LC_MESSAGES,- RC_LC_CTYPE,- RC_LC_COLLATE,- RC_LC_TIME,- RC_LC_NUMERIC,- RC_LC_MONETARY
- These variables are passed to the shell without the - RC_prefix and represent the listed categories. The shell profiles concerned are listed below. The current setting can be shown with the command- locale.
- RC_LC_ALL
- This variable, if set, overwrites the values of the variables already mentioned. 
- RC_LANG
- If none of the previous variables are set, this is the fallback. By default, only - RC_LANGis set. This makes it easier for users to enter their own values.
- ROOT_USES_LANG
- This variable can be set to - yesor- ctype(default). If set to- yes,- rootuses language and country-specific settings, otherwise the system administrator always works in a POSIX environment.
The variables can be set with the YaST sysconfig editor. The value of such a variable contains the language code, country code, encoding and modifier. The individual components are joined by special characters:
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
30.4.1 System-wide locale settings #
systemd reads /etc/locale.conf
   at early boot. The locale settings configured in this file are
   inherited by every service or user, unless there are individual
   settings.
  
    Earlier versions of SUSE Linux Enterprise Desktop read locale settings from
    /etc/sysconfig/language,
    /etc/sysconfig/keyboard, and
    /etc/sysconfig/console.
    Starting with SUSE Linux Enterprise Desktop
15 GA,
    these files are considered obsolete.
    systemd does not read settings from these files anymore.
    Instead, systemd reads /etc/locale.conf.
   
    However, variables defined in /etc/sysconfig/language
    will still be used: They override the system-wide locale and can be used to
    define different locale settings for user shells (see Section 30.4.2, “Some examples”).
   
To set the system-wide locale, you can either:
- Write your settings in - /etc/locale.conf. Each line is a environment-like variable assignment (see- man 5 locale.conffor a list of variables):- LANG=de_DE.UTF-8 - To fine-tune the settings, you can add additional variables, one variable per line. 
- Use the command - localectl:- #- localectlset-locale LANG=de_DE.UTF-8- Same here, you can also specify additional variables after the - localectl set-localecommand.
To keep backward compatibility with old systems during the update of the systemd package, all variables mentioned will be migrated from sysconfig to their final destinations if they are not already defined there.
30.4.2 Some examples #
You should always set the language and country codes together. Language settings follow the standard ISO 639 available at https://www.evertype.com/standards/iso639/iso639-en.html and https://www.loc.gov/standards/iso639-2/. Country codes are listed in ISO 3166, see https://en.wikipedia.org/wiki/ISO_3166.
   It only makes sense to set values for which usable description files can be
   found in /usr/lib/locale. Additional description files
   can be created from the files in /usr/share/i18n using
   the command localedef. The description files are part of
   the glibc-i18ndata package. A description file for
   en_US.UTF-8 (for English and United States) can be
   created with:
  
localedef -i en_US -f UTF-8 en_US.UTF-8
- 
LANG=en_US.UTF-8
- This is the default setting if American English is selected during installation. If you selected another language, that language is enabled but still with UTF-8 as the character encoding. 
- 
LANG=en_US.ISO-8859-1
- This sets the language to English, country to United States and the character set to - ISO-8859-1. This character set does not support the Euro sign, but it can be useful sometimes for programs that have not been updated to support- UTF-8. The string defining the charset (- ISO-8859-1in this case) is then evaluated by programs like Emacs.
- LANG=en_IE@euro
- The above example explicitly includes the Euro sign in a language setting. This setting is obsolete now, as UTF-8 also covers the Euro symbol. It is only useful if an application supports ISO-8859-15 and not UTF-8. 
   Changes to /etc/sysconfig/language are activated by the
   following process chain:
  
- For the Bash: - /etc/profilereads- /etc/profile.d/lang.shwhich, in turn, analyzes- /etc/sysconfig/language.
- For tcsh: At login, - /etc/csh.loginreads- /etc/profile.d/lang.cshwhich, in turn, analyzes- /etc/sysconfig/language.
   This ensures that any changes to
   /etc/sysconfig/language are available at the next login
   to the respective shell, without having to manually activate
   them.
  
   Users can override the system defaults by editing their
   ~/.bashrc accordingly. For example, if you do not want
   to use the system-wide en_US for program messages,
   include LC_MESSAGES=es_ES so that messages are
   displayed in Spanish instead.
  
30.4.3 Locale settings in ~/.i18n #
   If you are not satisfied with locale system defaults, change the settings in
   ~/.i18n according to the Bash scripting syntax. Entries
   in ~/.i18n override system defaults from
   /etc/sysconfig/language. Use the same variable names
   but without the RC_ namespace prefixes. For example, use
   LANG instead of RC_LANG:
  
LANG=cs_CZ.UTF-8 LC_COLLATE=C
30.4.4 Settings for language support #
   Files in the category Messages are, as a rule, only
   stored in the corresponding language directory (like
   en) to have a fallback. If you set
   LANG to en_US and the message
   file in /usr/share/locale/en_US/LC_MESSAGES does not
   exist, it falls back to
   /usr/share/locale/en/LC_MESSAGES.
  
A fallback chain can also be defined, for example, for Breton to French or for Galician to Spanish to Portuguese:
LANGUAGE="br_FR:fr_FR"
LANGUAGE="gl_ES:es_ES:pt_PT"
   If desired, use the Norwegian variants Nynorsk and Bokmål instead (with
   additional fallback to no):
  
LANG="nn_NO"
LANGUAGE="nn_NO:nb_NO:no"
or
LANG="nb_NO"
LANGUAGE="nb_NO:nn_NO:no"
   In Norwegian, LC_TIME is also treated
   differently.
  
   One problem that can arise is a separator used to delimit groups of digits
   not being recognized properly. This occurs if LANG
   is set to only a two-letter language code like de, but
   the definition file glibc uses is located in
   /usr/share/lib/de_DE/LC_NUMERIC. Thus
   LC_NUMERIC must be set to de_DE
   to make the separator definition visible to the system.
  
30.4.5 More information #
- The GNU C Library Reference Manual, Chapter “Locales and Internationalization”. It is included in the package glibc-info. 
- Markus Kuhn, UTF-8 and Unicode FAQ for Unix/Linux, currently at https://www.cl.cam.ac.uk/~mgk25/unicode.html.