apt

All posts tagged apt by Linux Bash
  • Posted on
    Featured Image
    In the world of Linux, package management is a core aspect of system administration and maintenance. While upgrading packages is a common task aimed at ensuring security and getting the latest features, there are times when you might need to downgrade a package. This might be necessary if an update introduces a bug, breaks compatibility, or negatively affects performance. Below, I'll guide you through downgrading packages using three popular package managers: APT (for Debian-based systems), DNF (for Fedora and other RPM-based systems), and Zypper (for openSUSE). APT (Advanced Package Tool) is the go-to for managing packages on Debian-based systems like Ubuntu.
  • Posted on
    Featured Image
    Linux, being a hub of open-source activity, offers a variety of distributions each tailored with unique package managers. Among those, Zypper and APT stand out with substantial user bases, employed by openSUSE and Debian-based distributions respectively. In this blog, we'll explore how the package search functionalities of Zypper and APT differ and extend some knowledge to include Fedora's DNF, discussing the subtleties of searching for software packages across different Linux distributions. Before we dive into specifics, let's understand what a package manager does. A package manager automates the process of installing, upgrading, configuring, and removing software packages from a Linux system.
  • Posted on
    Featured Image
    Linux's flexibility in software management is one of its strongest attributes, offering a variety of methods to install and manage software. Ubuntu, one of the most popular Linux distributions, traditionally uses APT (Advanced Package Tool) as its package management system. However, the introduction of Snap packages by Canonical (the company behind Ubuntu) adds another dimension to managing software on your system. This guide will explain how to use both Snap and APT on Ubuntu, along with relevant instructions for DNF and Zypper where applicable. APT (Advanced Package Tool): APT is the default package management system for Ubuntu and other Debian-based distributions.
  • Posted on
    Featured Image
    Package pinning is a powerful tool for Linux system administrators and users, enabling them to prioritize certain packages from specific repositories during installation or upgrade. This post will explore package pinning in APT (Advanced Package Tool) and provide a basic comparison with other package managers like DNF (used in Fedora and RHEL) and Zypper (used in openSUSE). Package pinning allows the user to specify which versions of packages should be preferred or avoided, regardless of the version or release available in the repositories the system knows about.
  • Posted on
    Featured Image
    When managing a Linux system, ensuring that the system uses the preferred versions and sources of software packages is crucial. Often, different repositories or sources might have different versions of the same package, and controlling which one should be preferred is a key aspect of system administration. Today, we're diving into how you can manage package priorities using the package managers APT (used in Debian-based systems), DNF (used in Fedora), and Zypper (used in openSUSE). Package priorities (or pinning) helps you specify which versions of packages should be preferred if multiple versions are available.
  • Posted on
    Featured Image
    Navigating the world of package management in Linux can be a daunting task for new and even experienced users alike. Among the variety of tools available, apt and apt-get are two of the most widely used on Debian-based distributions. Their names alone suggest similarity and, indeed, they perform similar functions but with a few nuanced differences. Additionally, other Linux distributions utilize different package managers, such as dnf for Fedora and zypper for openSUSE. In this blog, we’ll uncover the differences between apt install and apt-get install and toss in a primer on using dnf and zypper. Both apt install and apt-get install command lines are used for installing software packages on Debian-based systems (like Ubuntu).
  • Posted on
    Featured Image
    When working with Linux operating systems, software package management is a vital skill for system administrators and enthusiasts alike. One common scenario that users encounter is dealing with "held" packages. In this article, we'll explore what holding packages means, its implications, and how to manage held packages in different package management systems including APT (used in Debian and its derivatives like Ubuntu), DNF (used in Fedora), and Zypper (used in openSUSE). In the context of software management, "holding" a package prevents the package from being automatically installed, upgraded, or removed by the package management system.
  • Posted on
    Featured Image
    In Linux, managing packages efficiently is crucial for system administration and development. Among the various package managers, APT (Advanced Package Tool) is one of the most widely used, particularly in Debian-based systems such as Ubuntu. However, apart from APT, Linux distributions may utilize other package managers like DNF for Fedora and Zypper for openSUSE. In this guide, we'll focus on creating a local repository which can be extremely useful for hosting your own packages, ensuring faster installations, and reducing bandwidth usage. Creating a local repository can be beneficial for multiple reasons: 1. Speed: Access packages faster and install them without internet dependency. 2.
  • Posted on
    Featured Image
    Linux systems are known for their robust package management solutions that make software installation and maintenance a breeze. Among the most popular package managers are APT (used by Debian and its derivatives like Ubuntu), DNF (utilized by Fedora), and Zypper (openSUSE's choice). Adding custom repositories to these package managers can significantly expand your software options beyond the defaults provided. Here's a step-by-step guide to adding custom repositories to APT, DNF, and Zypper. A repository in Linux is a storage location from which your system retrieves and installs software.
  • Posted on
    Featured Image
    Exploring the Differences Between APT, DNF, and Zypper: A Guide to Linux Package Managers In the world of Linux, software package management is a critical component of system maintenance and security. Different Linux distributions rely on distinct package managers to handle software installation, update, and removal. Among these, three popular tools are APT (Advanced Package Tool), DNF (Dandified YUM), and Zypper. In this blog, we'll explore the differences between these package managers, applicable to Ubuntu (using APT), Fedora (using DNF), and openSUSE (using Zypper) distributions respectively. We'll also provide operational instructions to get you started with each.
  • Posted on
    Featured Image
    In the world of Linux, managing software packages efficiently and effectively is crucial for system administrators and everyday users alike. One of the most prominent tools used for this purpose in Debian-based distributions, including Ubuntu, is the Advanced Package Tool, commonly known as APT. In this blog, we will delve into an overview of APT and also briefly touch upon other package managers like DNF (used in Fedora) and Zypper (used in openSUSE) to give you a comparative understanding of software management across different Linux distributions. APT is the front-end tool used in Debian and its derivatives like Ubuntu for handling the installation, removal, and management of software packages.
  • Posted on
    Featured Image
    When you embark on the adventure of managing packages in Linux, you’re also unwittingly signing up for a trip through what seasoned administrators often refer to as “dependency hell.” Simply put, dependency issues occur when the software packages that are being installed require other packages, libraries, or versions that either aren’t present on the system, incompatible, or conflict with previously installed packages. Thankfully, each major Linux distribution comes equipped with a powerful package manager designed to handle these headaches: DNF for Fedora, APT for Debian-based systems, and Zypper for openSUSE.
  • Posted on
    Featured Image
    Linux, the ever-evolving open-source operating system, has diversified into multiple distributions over the years, each catering to different needs and preferences of its users. At the heart of most Linux distributions is a critical component: the package manager. A package manager streamlines the process of managing software installation, upgrades, configuration, and removal by automating these complex tasks. Three popular Linux distributions — Ubuntu (Debian-based), AlmaLinux/Rocky (Red Hat descendants), and openSUSE — use different package managers, namely apt, dnf, and zypper, respectively. In this article, we will explore these package managers, highlighting their features, similarities, and differences.
  • Posted on
    Featured Image
    In the realm of Linux, effective package management is crucial. Whether you're a system administrator maintaining numerous servers or a developer keen on maintaining your environment under control, automating package management can save time and reduce human error. Today, we dive deep into automating package management using three popular tools: apt, dnf, and zypper. Before we begin, let’s understand what a package manager is. In Linux distributions, a package manager is a tool that automates the process of installing, upgrading, configuring, and removing software packages. Automation in package management typically involves scripting out common tasks to make software handling smoother and more predictable.
  • Posted on
    Featured Image
    In Linux, flexibility is king. One area where this reigns true is in managing software packages across different architectures. Commonly, users encounter the need to manage 32-bit and 64-bit packages on a single system, especially when running applications that only support one architecture. Linux supports this with mixed-architecture configurations, but handling them efficiently requires proper setup and understanding of your package managers: APT (used by Debian and Ubuntu systems), DNF (Fedoras’s next-generation front-end for rpm), and Zypper (openSUSE’s package manager). 1. Understanding Architectures Before setting up mixed architectures on your systems, it's important to understand the concept.
  • Posted on
    Featured Image
    For many system administrators and DevOps engineers, the process of transitioning workloads between different Linux distributions can be daunting. Each distribution has its preferred package management system, which handles the installation, upgrade, and removal of software packages. If your organization has decided to switch from a Debian-based system (which uses APT) to an openSUSE or SUSE Linux Enterprise Server (SLES) system (which uses Zypper), you'll need to adapt your package management practices accordingly. In this guide, we’ll explore how to transition your workloads from APT-based systems to Zypper-based systems and cover the basics of using APT, DNF (used by Fedora, CentOS, and RHEL systems), and Zypper package managers.
  • Posted on
    Featured Image
    With the increasing need for powerful cross-platform development environments, the integration of Linux capabilities in Windows through WSL (Windows Subsystem for Linux) has become a game-changer. WSL allows users on Windows 10 and Windows 11 to run a Linux distribution alongside their Windows applications, offering remarkable flexibility. This dual capability enriches your environment to manage and deploy software using popular Linux package managers like APT, DNF, and Zypper. Whether you are a developer, a systems administrator, or just a tech enthusiast, mastering these tools within WSL can enhance your workflow significantly. In this guide, we'll dive deep into using these package managers efficiently in WSL.
  • Posted on
    Featured Image
    Linux continues to be a powerful operating system beloved by developers, sysadmins, and tech enthusiasts for its flexibility, security, and robust community support. One of the core strengths of Linux is the ease of managing applications through package managers. This guide will delve into the specifics of managing packages in Linux distributions that use APT (such as Debian and Ubuntu), DNF (used in distributions like Fedora and CentOS Stream), and Zypper (primarily used by openSUSE). A package manager is a tool that helps manage software packages within a Linux system. This includes installing, updating, configuring, and removing software packages.
  • Posted on
    Featured Image
    Navigating through multi-arch support in various Linux distributions often involves using different package managers like APT, DNF, and Zypper. These package managers enable users to manage software installations efficiently, handle dependencies, and ensure stable system operation. In today's multi-architecture environments where both 32-bit and 64-bit applications coexist, understanding how to manage these packages across different systems is critical. Multi-architecture support allows a system to run applications compiled for different types of hardware architectures. For example, on a 64-bit machine (x86_64), you might want to run applications that are available only in 32-bit form (i686).
  • Posted on
    Featured Image
    Package managers are essential tools in Linux systems, used for installing, updating, and managing software packages efficiently. Over time, issues may arise such as broken packages, failed updates, or inconsistencies with the package database. This often necessitates rebuilding the package cache. In this article, we'll look at how to rebuild package caches using APT (used by Debian-based systems), DNF (used by Fedora and RHEL-based systems), and Zypper (used by openSUSE). The package cache is a storage location where metadata about software packages (such as version, architecture, dependencies, etc.) is kept. This metadata helps your system manage software installations and ensure consistency and integrity.
  • Posted on
    Featured Image
    When working with Linux, the ability to configure and use proxy settings efficiently can be essential, especially in corporate environments or regions where direct internet access is restricted. Package managers such as APT (used primarily by Debian and Ubuntu), DNF (used by Fedora), and Zypper (used by openSUSE) are fundamental tools for software management. However, they require proper proxy configuration to function correctly behind a firewall. Here, we will explore how to configure proxy settings for these package managers, ensuring you can install updates and software seamlessly in any network environment. APT (Advanced Package Tool) is the package management system used by Debian and its derivatives like Ubuntu.
  • Posted on
    Featured Image
    Managing software packages on Linux can sometimes lead to unexpected errors, particularly regarding keyring issues that disrupt the update or installation processes. This blog post provides a detailed look at how to resolve keyring issues in APT, as well as guidance for users of other prevalent package managers like DNF (used by Fedora) and Zypper (used by openSUSE). In Linux, the keyring serves a crucial role in the security infrastructure, storing the keys and certificates necessary to verify the authenticity of software packages. When the keyring is corrupted or outdated, it can prevent your package manager from verifying and thus installing or updating packages, leading to potentially frustrating blockages.
  • Posted on
    Featured Image
    When setting up or maintaining a stable environment on your Linux system, sometimes you need to install a specific version of a package. This could be due to compatibility issues, testing requirements, or rollback scenarios after an update didn’t go as expected. While the process can vary slightly depending on the package manager you are using — whether it's APT (used by Debian and Ubuntu), DNF (used by Fedora), or Zypper (used by openSUSE) — the fundamental approach remains similar. Let's explore how to handle this task in each package manager. APT (Advanced Package Tool) is the default package manager for Debian-based distributions like Ubuntu.
  • Posted on
    Featured Image
    Keeping your Linux system up-to-date is critical for ensuring security and stability but sometimes, there are instances when you might not want to update certain packages. In this article, we'll explore how to blacklist or hold packages from being updated in various Linux package managers, including APT (used in Debian-based systems), DNF (utilized in Fedora and its derivatives), and Zypper (the command line interface of openSUSE). APT is the package management system used by Debian and its derivatives like Ubuntu. To prevent a package from being updated, you can hold it using the apt-mark command. This is particularly useful if updating that package would cause issues with your system or disrupt a service.
  • Posted on
    Featured Image
    When diving into the world of Ubuntu or any other Debian-based Linux distribution, mastering the Advanced Package Tool, or apt, is an absolute must. The apt suite is a powerful set of tools used to handle the installation, upgrading, and removal of software on your system. Whether you’re setting up a server, a workplace desktop, or a personal laptop, understanding how to manage packages efficiently with apt can greatly enhance your system's potential and your productivity. In this blog post, we'll cover the basics of installing, updating, and managing packages using apt, ensuring that even if you're just starting out, you'll walk away with a solid foundational knowledge. apt stands for Advanced Package Tool.
This in-depth article explores the function and significance of the `/mnt` and `/media` directories in Linux, which are critical for managing storage devices. It clarifies how these directories act as mount points within the filesystem — `/mnt` is used for temporary mounts often necessary for system administration tasks, while `/media` is tailored for removable media like USB drives and external hard disks. The post discusses best practices for using these directories to maintain an organized and efficient file system, emphasizing the use of `/mnt` for manual, temporary mounts and `/media` for automatically handled removable storage. This distinction helps users and administrators manage data storage effectively and maintain system integrity. The article is a valuable resource for anyone looking to understand or optimize the storage management in Linux environments.
This technical blog post on LinuxBash.sh introduces Glow, a useful tool for rendering Markdown files directly within the terminal. Highlighting major features like stylized reading, pager support, responsiveness, and search integration, the article is a comprehensive guide for developers or content creators who spend significant time in Linux environments. It covers detailed installation instructions for various Linux distributions using package managers like `apt`, `dnf`, and `zypper’. Additionally, it includes practical usage examples to get started and further reading links for those interested in deepening their Markdown and command-line knowledge. This is an ideal read for those looking to enhance their terminal experience and streamline accessing formatted documentation without leaving the CLI.
Discover the robust capabilities of `fzf`, a command-line fuzzy finder for Linux users, through this comprehensive guide. Designed for both beginners and experienced users, this article delves into the usefulness of `fzf` in simplifying the search for files, directories, and text. It explains how `fzf’ works—allowing for partial matches and real-time result updates—thus enhancing search efficiency, especially when exact terms are elusive. Installation instructions are provided for various Linux distributions, including Ubuntu, Fedora, and openSUSE, ensuring you can easily adopt this tool. Additionally, practical examples and advanced usage tips are discussed to maximize productivity. The piece concludes with valuable resources for further exploration, aiming to integrate `fzf` seamlessly into daily computing tasks and significantly streamline your workflow.
Discover the capabilities of `losetup` in mounting loopback devices on Linux in this comprehensive guide. Understand what loopback devices are and delve into practical examples and commands like `losetup -a` and `mount /dev/loop0`. This article covers everything from creating and setting up disk images, to adjusting offset and sizing for specific needs. Ideal for users interested in system recovery, virtualization, or software testing, learn how to manipulate disk images as if they were physical disks. This overview also includes pointers on detaching and managing virtual disks effectively. Expand your Linux skills and system administration by mastering the use of `losetup` for handling filesystems and disk images flexibly. For further insights, explore recommended resources for both beginners and advanced users.
This article provides a detailed overview of the system requirements for various popular Linux distributions, including Ubuntu, Fedora, Debian, Arch Linux, Linux Mint, and Raspberry Pi OS. It is essential for users deciding on a Linux distro to understand whether their system meets the necessary specifications, such as CPU, RAM, and storage requirements, to ensure optimal performance. Whether you're new to Linux or an experienced user, this guide helps you match your hardware capabilities with the right distro, enhancing your overall experience. Additional resources and links are provided for further reading on each distro's specific requirements.
This article delves into the maximum file and partition sizes of various Linux filesystems such as EXT4, XFS, and Btrfs, highlighting their impact on storage solutions. It addresses how these limits affect system design and data management, essential for system administrators, developers, and users managing large data sets. The piece discusses the capabilities and constraints of each filesystem, offering practical considerations for maintaining performance and ensuring compatibility. Understanding these limits is crucial for optimizing system performance and scalability, making informed choices for Linux storage solutions. Additional resources provide further insights into filesystem features and management.
Discover the power of `systemd.automount` for efficient filesystem management in Linux through our comprehensive guide, "Mastering Auto-Mounting in Linux with `systemd.automount`." This insightful article delves into the advantages of using `systemd.automount`, such as reduced boot times, resource efficiency, and enhanced reliability by mounting filesystems only when needed. It provides a step-by-step tutorial on setting up `.mount` and `.automount` unit files, including detailed examples and configurations specifically for network file systems. It's an essential read for system administrators and Linux users who seek to improve system performance and usability through advanced service management techniques. Complete with links to further reading on `systemd` configurations, this article is a gateway to mastering modern system management in Linux environments.
Explore essential DNS troubleshooting with the `dnsutils` package for Linux users, focusing on `dig` and `nslookup` tools in this comprehensive guide. Learn installation steps across various distributions and understand basic usage to effectively diagnose and solve DNS issues. From understanding DNS operations to querying DNS servers, this article equips you with the necessary skills to manage DNS configurations and ensure network reliability. Additionally, find further reading for deep dives into advanced DNS troubleshooting techniques and best practices to enhance your DNS knowledge.
This comprehensive guide on LinuxBash.sh explores the utilization of TCP/UDP sockets for network scripting using Bash. It begins by ensuring the necessary tools like `nc` (netcat) are installed and moves on to practical examples on writing and reading data from TCP and UDP sockets. The tutorial provides thorough step-by-step instructions, including setting up a basic chat interface between two machines and addressing security implications like potential unauthorized access and unencrypted data. Suitable for beginners and seasoned users alike, this guide is invaluable for anyone interested in network programming and administration using Bash scripting. Explore further through linked resources for advanced topics and security in network scripting.
Discover the benefits and setup process of the `tmpfs`, a high-speed, volatile file system in Linux that utilizes RAM and swap space for temporary data storage, in our latest article. We explore why `tmpfs` offers superior performance for applications needing frequent read/write operations, provides security by deleting data on reboot, and reduces wear on SSDs by avoiding unnecessary write operations. Learn how to easily mount `tmpfs` at custom locations, configure its size, and ensure persistence across reboots with edits to the `/etc/fstab` file. The article also discusses best practices, such as managing memory usage and data backup strategies, to maximize the advantages of using `tmpfs` without compromising system stability. Perfect for high-performance computing needs or any scenario demanding quick access to temporary storage.
Learn how to use `figlet`, a fun and practical ASCII art text generator for Linux, to transform ordinary text into visually impressive banners. This article guides readers through the basics of what `figlet` is, including its background, installation methods for different Linux distributions like Debian/Ubuntu, Fedora, and openSUSE, and detailed usage instructions. Enhance your scripts and terminal sessions by mastering `figlet` commands, exploring various customization options like font changes and text alignment, and playing with creativity in text presentations. The blog post not only enriches your Linux toolkit but also encourages exploring further through recommended readings on ASCII art and related tools. Discover the simplicity and creativity `figlet` offers to Linux users.
This engaging article provides an insightful comparison and detailed overview of prominent Linux filesystems including Ext4, XFS, Btrfs, and ZFS. It discusses key features such as journaling, scalability, data integrity, and suitability for various applications, from everyday computing tasks to handling large data sets and ensuring robust data protection. The content is tailored to help users make informed decisions about the best filesystem for their specific needs, balancing factors like reliability, performance, and system resources. Ideal for both beginners and experienced professionals, this guide clarifies the strengths and scenarios best suited for each filesystem, ensuring Linux users leverage optimal performance and data management capabilities.
Explore the essentials of file compression and archiving in Linux with `tar`, `gzip`, and `bzip2` through this comprehensive guide. Whether you're a system administrator or a Linux enthusiast, mastering these tools enhances your data management capabilities. This article thoroughly explains `tar` for compiling files into a single archive, `gzip` for rapid compression, and `bzip2` for superior efficiency in compressing larger files. Detailed installation instructions across different Linux distributions and practical command usage for both compressing and decompressing files are provided to equip you with the skills necessary to manage archives effectively. Dive into various scenarios and improve your handling of logs, backups, and file organization efficiently.
This comprehensive blog post on LinuxBash.sh is a detailed guide to trapping and handling signals in Bash scripts, a crucial technique for managing script interruptions and ensuring reliability. It explains the concept of signal trapping, discusses common signals like SIGINT and SIGTERM, and provides practical examples on using the `trap` command to set up custom signal handlers. The article is beneficial for users interested in enhancing script safety, particularly in environments prone to unexpected terminations. Further sections explore package installations for signal handling tools using different Linux package managers. Additionally, it includes links to further reading for both beginners and advanced users aiming to expand their knowledge in Bash signal handling.
This comprehensive blog outlines the use of Live USB and Rescue Mode to troubleshoot and recover from system malfunctions. Covering the essentials of creating a Live USB, it details the necessary tools and steps, such as selecting a suitable Linux distribution and using software like Rufus for setup. The write-up also explores Rescue Mode, a minimalist boot option for system repair. For real-world scenarios like corrupted system updates, it explains how to boot using Live USB, back up data, diagnose problems, and repair or reinstall the system. The article is a crucial guide for both casual users and IT professionals, emphasizing the importance of these tools in mitigating data loss and enabling users to manage system crises effectively.
Discover the functionalities and applications of the Linux `watch` command through an insightful blog post at LinuxBash.sh. This instructive article, titled "Harnessing the Power of `watch`: Real-Time Command Output Monitoring in Linux," thoroughly explains how to use the `watch` command to monitor command output in real-time efficiently. Aimed at users ranging from system administrators to developers, the guide details the process for installing `watch`, customizing interval settings, and employing several practical examples demonstrating its capability to track dynamic outputs like system logs and process states. Whether you're new to Linux or seeking advanced tips on real-time data observation, this post serves as a robust resource. Enhance your system monitoring tools by mastering `watch` to get real-time updates on your Linux systems, facilitating effective debugging and system analysis.
Discover the essentials of navigating the Linux file system with absolute and relative paths in the Bash shell through our detailed guide at LinuxBash.sh. Learn how paths are defined, the clear distinctions between absolute and relative paths, and the unique advantages of each to streamline your file management, script execution, and overall system navigation. We offer tips for using paths effectively, including common commands and precautions to avoid errors. Enhance your Linux command line skills with practical insights and further reading resources suited for beginners to advanced users. Whether you’re scripting or just managing files, understanding these paths can significantly boost your productivity and system understanding.
This comprehensive guide on setting filesystem quotas in Linux ensures efficient disk space management by limiting the storage each user or group can consume. System administrators often face challenges in managing shared resources; applying quotas solves the issue of unbalanced resource use, maintaining system stability and fair distribution. The article provides precise steps from installing necessary tools like `quota` across different Linux distributions (using `apt`, `dnf`, and `zypper`) to configuring and enforcing quotas on specific filesystems. It also covers creating quota databases, assigning user and group quotas, and managing these quotas effectively. Essential reading for Linux system admins, the guide includes further resources for deeper understanding and advanced management techniques.
This comprehensive meta description covers an insightful article on using `jq` for JSON parsing and processing in Linux Bash. The article explains `jq` as a potent command-line tool that simplifies interactions with JSON data from APIs, configurations, and more. It includes sections on installing `jq` on different Linux distributions, basic command usage, and advanced techniques. Whether you're a developer, system administrator, or tech enthusiast, the guide provides all you need to effectively use `jq` for parsing, filtering, mapping, and transforming JSON structures, making it easier to handle such data. The post also suggests further reading resources for those who wish to delve deeper into mastering `jq` skills.
Harnessing the power of parallel processing in Bash is efficiently detailed in this article, explaining how to use GNU Parallel—a command-line utility for executing tasks concurrently using one or more computers. Benefits, installation instructions for various Linux distributions, and practical usage examples, like counting lines across multiple files, are provided. This guide further delves into advanced tips like job control, output order maintenance, and tracking progress, enhancing command execution significantly. Ideal for tasks like data processing and backups, GNU Parallel optimizes productivity and processing time, making it a valuable tool for anyone looking to improve efficiency in shell scripting.