Unix is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, development starting in the 1970s at the Bell Labs research center by Ken Thompson, Dennis Ritchie, others. Intended for use inside the Bell System, AT&T licensed Unix to outside parties in the late 1970s, leading to a variety of both academic and commercial Unix variants from vendors including University of California, Microsoft, IBM, Sun Microsystems. In the early 1990s, AT&T sold its rights in Unix to Novell, which sold its Unix business to the Santa Cruz Operation in 1995; the UNIX trademark passed to The Open Group, a neutral industry consortium, which allows the use of the mark for certified operating systems that comply with the Single UNIX Specification. As of 2014, the Unix version with the largest installed base is Apple's macOS. Unix systems are characterized by a modular design, sometimes called the "Unix philosophy"; this concept entails that the operating system provides a set of simple tools that each performs a limited, well-defined function, with a unified filesystem as the main means of communication, a shell scripting and command language to combine the tools to perform complex workflows.
Unix distinguishes itself from its predecessors as the first portable operating system: the entire operating system is written in the C programming language, thus allowing Unix to reach numerous platforms. Unix was meant to be a convenient platform for programmers developing software to be run on it and on other systems, rather than for non-programmers; the system grew larger as the operating system started spreading in academic circles, as users added their own tools to the system and shared them with colleagues. At first, Unix was not designed to be multi-tasking. Unix gained portability, multi-tasking and multi-user capabilities in a time-sharing configuration. Unix systems are characterized by various concepts: the use of plain text for storing data; these concepts are collectively known as the "Unix philosophy". Brian Kernighan and Rob Pike summarize this in The Unix Programming Environment as "the idea that the power of a system comes more from the relationships among programs than from the programs themselves".
In an era when a standard computer consisted of a hard disk for storage and a data terminal for input and output, the Unix file model worked quite well, as I/O was linear. In the 1980s, non-blocking I/O and the set of inter-process communication mechanisms were augmented with Unix domain sockets, shared memory, message queues, semaphores, network sockets were added to support communication with other hosts; as graphical user interfaces developed, the file model proved inadequate to the task of handling asynchronous events such as those generated by a mouse. By the early 1980s, users began seeing Unix as a potential universal operating system, suitable for computers of all sizes; the Unix environment and the client–server program model were essential elements in the development of the Internet and the reshaping of computing as centered in networks rather than in individual computers. Both Unix and the C programming language were developed by AT&T and distributed to government and academic institutions, which led to both being ported to a wider variety of machine families than any other operating system.
Under Unix, the operating system consists of many libraries and utilities along with the master control program, the kernel. The kernel provides services to start and stop programs, handles the file system and other common "low-level" tasks that most programs share, schedules access to avoid conflicts when programs try to access the same resource or device simultaneously. To mediate such access, the kernel has special rights, reflected in the division between user space and kernel space - although in microkernel implementations, like MINIX or Redox, functions such as network protocols may run in user space; the origins of Unix date back to the mid-1960s when the Massachusetts Institute of Technology, Bell Labs, General Electric were developing Multics, a time-sharing operating system for the GE-645 mainframe computer. Multics featured several innovations, but presented severe problems. Frustrated by the size and complexity of Multics, but not by its goals, individual researchers at Bell Labs started withdrawing from the project.
The last to leave were Ken Thompson, Dennis Ritchie, Douglas McIlroy, Joe Ossanna, who decided to reimplement their experiences in a new project of smaller scale. This new operating system was without organizational backing, without a name; the new operating system was a single-tasking system. In 1970, the group coined the name Unics for Uniplexed Information and Computing Service, as a pun on Multics, which stood for Multiplexed Information and Computer Services. Brian Kernighan takes credit for the idea, but adds that "no one can remember" the origin of the final spelling Unix. Dennis Ritchie, Doug McIlroy, Peter G. Neumann credit Kernighan; the operating system was written in assembly language, but in 1973, Version 4 Unix was rewritten in C. Version 4 Unix, still had many PDP-11 dependent codes, is not suitable for porting; the first port to other platform was made five years f
In computing, kill is a command, used in several popular operating systems to send signals to running processes. In Unix and Unix-like operating systems, kill is a command used to send a signal to a process. By default, the message sent, but kill is something of a misnomer. The kill command is a wrapper around the kill system call, which sends signals to processes or process groups on the system, referenced by their numeric process IDs or process group IDs. kill is always provided as a standalone utility as defined by the POSIX standard. However, most shells have built-in kill commands that may differ from it. There are many different signals that can be sent, although the signals in which users are most interested are SIGTERM and SIGKILL; the default signal sent is SIGTERM. Programs that handle this signal can do useful cleanup operations before quitting. However, many programs do not implement a special handler for this signal, so a default signal handler is called instead. Other times a process that has a special handler has gone awry in a way that prevents it from properly handling the signal.
All signals except for SIGKILL and SIGSTOP can be "intercepted" by the process, meaning that a special function can be called when the program receives those signals. The two exceptions SIGKILL and SIGSTOP are only seen by the host system's kernel, providing reliable ways of controlling the execution of processes. SIGKILL kills the process, SIGSTOP pauses it until a SIGCONT is received. Unix provides security mechanisms to prevent unauthorized users from killing other processes. For a process to send a signal to another, the owner of the signaling process must be the same as the owner of the receiving process or be the superuser; the available signals all have different names, are mapped to certain numbers. It is important to note that the specific mapping between numbers and signals can vary between Unix implementations. SIGTERM is numbered 15 while SIGKILL is numbered 9. A process can be sent a SIGTERM signal in four ways: The process can be sent a SIGKILL signal in three ways: Other useful signals include HUP, TRAP, INT, SEGV and ALRM.
HUP sends the SIGHUP signal. Some daemons, including Apache and Sendmail, re-read configuration files upon receiving SIGHUP, so the kill command may be used for this too. A SIGINT signal can be generated simply by pressing CTRL+C in most Unix shells, it is common for CTRL+Z to be mapped to SIGTSTP, for CTRL+\ to be mapped to SIGQUIT, which can force a program to do a core dump. Killall - on some variations of Unix, such as Solaris, this utility is automatically invoked when the system is going through a shutdown, it behaves much like the kill command above, but instead of sending a signal to an individual process, the signal is sent to all processes on the system. However, on others such as IRIX, FreeBSD, an argument is supplied specifying the name of the process to kill. For instance, to kill a process such as an instance of the XMMS music player invoked by xmms, the user would run the command killall xmms; this would kill all processes named xmms, is equivalent to kill `pidof xmms` on systems like Solaris.
Pkill - signals processes based on name and other attributes. It was introduced in Solaris 7 and has since been reimplemented for Linux, NetBSD and OpenBSD. Pkill makes killing processes based on their name much more convenient: e.g. to kill a process named firefox without pkill, one would have to type kill `ps --no-headers -C firefox -o pid` whereas with pkill, one can type pkill firefox. Xkill - if called without any parameters, the mouse cursor changes from an arrow to an "x" icon, the user can click on a window to force the X server to close the connection with the client owning the window; this causes the process to terminate when it detects that its connection to the X server has been closed. The kill command is available as a shell builtin in the OS-9 shell, it is used to kill another process by process ID. Stop the process with the process ID "7": In Microsoft's command-line interpreter Windows PowerShell, kill is a predefined command alias for the Stop-Process cmdlet. Microsoft Windows XP, Vista and 7 include the command taskkill to terminate processes.
The usual syntax for this command is taskkill /im "IMAGENAME". An "unsupported" version of kill was included in several releases of the Microsoft Windows Resource Kits available for Windows 98. GNU versions of kill have been ported via Cygwin and run inside of the Unix environment subsystem that Microsoft Windows Services for UNIX provides. Find all processes beginning with the letter "p" that were developed by Microsoft and use more than 10 MB of memory and kill them: Here is a simpler example, which asks the process Explorer.exe to terminate: This example forces the process to terminate: Processes can be killed by their PID number: Singularity shell, the standard shell for Microsoft Research's microkernel operating system Singularity includes a kill command to terminate background processes. Stop the process with the name "SampleProcess": Stop the process with the process identifier "42": Under Plan 9 from Bell Labs, the kill program does not perform this termination, nor does it take process IDs.
Rather, it takes the actual names of processes an
In computing, a file system or filesystem controls how data is stored and retrieved. Without a file system, information placed in a storage medium would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into pieces and giving each piece a name, the information is isolated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a "file"; the structure and logic rules used to manage the groups of information and their names is called a "file system". There are many different kinds of file systems; each one has different structure and logic, properties of speed, security and more. Some file systems have been designed to be used for specific applications. For example, the ISO 9660 file system is designed for optical discs. File systems can be used on numerous different types of storage devices that use different kinds of media; as of 2019, hard disk drives have been key storage devices and are projected to remain so for the foreseeable future.
Other kinds of media that are used include SSDs, magnetic tapes, optical discs. In some cases, such as with tmpfs, the computer's main memory is used to create a temporary file system for short-term use; some file systems are used on local data storage devices. Some file systems are "virtual", meaning that the supplied "files" are computed on request or are a mapping into a different file system used as a backing store; the file system manages access to the metadata about those files. It is responsible for arranging storage space. Before the advent of computers the term file system was used to describe a method of storing and retrieving paper documents. By 1961 the term was being applied to computerized filing alongside the original meaning. By 1964 it was in general use. A file system consists of three layers. Sometimes the layers are explicitly separated, sometimes the functions are combined; the logical file system is responsible for interaction with the user application. It provides the application program interface for file operations — OPEN, CLOSE, READ, etc. and passes the requested operation to the layer below it for processing.
The logical file system "manage open file table entries and per-process file descriptors." This layer provides "file access, directory operations and protection."The second optional layer is the virtual file system. "This interface allows support for multiple concurrent instances of physical file systems, each of, called a file system implementation."The third layer is the physical file system. This layer is concerned with the physical operation of the storage device, it processes physical blocks being written. It handles buffering and memory management and is responsible for the physical placement of blocks in specific locations on the storage medium; the physical file system interacts with the device drivers or with the channel to drive the storage device. Note: this only applies to file systems used in storage devices. File systems allocate space in a granular manner multiple physical units on the device; the file system is responsible for organizing files and directories, keeping track of which areas of the media belong to which file and which are not being used.
For example, in Apple DOS of the early 1980s, 256-byte sectors on 140 kilobyte floppy disk used a track/sector map. This results in unused space when a file is not an exact multiple of the allocation unit, sometimes referred to as slack space. For a 512-byte allocation, the average unused space is 256 bytes. For 64 KB clusters, the average unused space is 32 KB; the size of the allocation unit is chosen. Choosing the allocation size based on the average size of the files expected to be in the file system can minimize the amount of unusable space; the default allocation may provide reasonable usage. Choosing an allocation size, too small results in excessive overhead if the file system will contain very large files. File system fragmentation occurs; as a file system is used, files are created and deleted. When a file is created the file system allocates space for the data; some file systems permit or require specifying an initial space allocation and subsequent incremental allocations as the file grows.
As files are deleted the space they were allocated is considered available for use by other files. This creates alternating unused areas of various sizes; this is free space fragmentation. When a file is created and there is not an area of contiguous space available for its initial allocation the space must be assigned in fragments; when a file is modified such that it becomes larger it may exceed the space allocated to it, another allocation must be assigned elsewhere and the file becomes fragmented. A filename is used to identify a storage location in the file system. Most file systems have restrictions on the length of filenames. In some file systems, filenames are not case sensitive. Most modern file systems allow filenames to contain a wide range of characters from the Unicode character set. However, they may have restrictions on the use of certain s
Nokia Bell Labs is an industrial research and scientific development company owned by Finnish company Nokia. Its headquarters are located in New Jersey. Other laboratories are located around the world. Bell Labs has its origins in the complex past of the Bell System. In the late 19th century, the laboratory began as the Western Electric Engineering Department and was located at 463 West Street in New York City. In 1925, after years of conducting research and development under Western Electric, the Engineering Department was reformed into Bell Telephone Laboratories and under the shared ownership of American Telephone & Telegraph Company and Western Electric. Researchers working at Bell Labs are credited with the development of radio astronomy, the transistor, the laser, the photovoltaic cell, the charge-coupled device, information theory, the Unix operating system, the programming languages C, C++, S. Nine Nobel Prizes have been awarded for work completed at Bell Laboratories. In 1880, when the French government awarded Alexander Graham Bell the Volta Prize of 50,000 francs (approximately US$10,000 at that time for the invention of the telephone, he used the award to fund the Volta Laboratory in Washington, D.
C. in collaboration with Sumner Tainter and Bell's cousin Chichester Bell. The laboratory was variously known as the Volta Bureau, the Bell Carriage House, the Bell Laboratory and the Volta Laboratory, it focused on the analysis and transmission of sound. Bell used his considerable profits from the laboratory for further research and education to permit the " diffusion of knowledge relating to the deaf": resulting in the founding of the Volta Bureau, located at Bell's father's house at 1527 35th Street N. W. in Washington, D. C, its carriage house became their headquarters in 1889. In 1893, Bell constructed a new building close by at 1537 35th Street N. W. to house the lab. This building was declared a National Historic Landmark in 1972. After the invention of the telephone, Bell maintained a distant role with the Bell System as a whole, but continued to pursue his own personal research interests; the Bell Patent Association was formed by Alexander Graham Bell, Thomas Sanders, Gardiner Hubbard when filing the first patents for the telephone in 1876.
Bell Telephone Company, the first telephone company, was formed a year later. It became a part of the American Bell Telephone Company. American Telephone & Telegraph Company and its own subsidiary company, took control of American Bell and the Bell System by 1889. American Bell held a controlling interest in Western Electric whereas AT&T was doing research into the service providers. In 1884, the American Bell Telephone Company created the Mechanical Department from the Electrical and Patent Department formed a year earlier. In 1896, Western Electric bought property at 463 West Street to station their manufacturers and engineers, supplying AT&T with their product; this included everything from telephones, telephone exchange switches, transmission equipment. In 1925, Bell Laboratories was developed to better consolidate the research activities of the Bell System. Ownership was evenly split between Western Electric and AT&T. Throughout the next decade the AT&T Research and Development branch moved into West Street.
Bell Labs carried out consulting work for the Bell Telephone Company, U. S. government work, a few workers were assigned to basic research. The first president of research at Bell Labs was Frank B. Jewett who stayed there until 1940. By the early 1940s, Bell Labs engineers and scientists had begun to move to other locations away from the congestion and environmental distractions of New York City, in 1967 Bell Laboratories headquarters was relocated to Murray Hill, New Jersey. Among the Bell Laboratories locations in New Jersey were Holmdel, Crawford Hill, the Deal Test Site, Lincroft, Long Branch, Neptune, Piscataway, Red Bank and Whippany. Of these, Murray Hill and Crawford Hill remain in existence; the largest grouping of people in the company was in Illinois, at Naperville-Lisle, in the Chicago area, which had the largest concentration of employees prior to 2001. There were groups of employees in Indianapolis, Indiana. Since 2001, many of the former locations closed; the Holmdel site, a 1.9 million square foot structure set on 473 acres, was closed in 2007.
The mirrored-glass building was designed by Eero Saarinen. In August 2013, Somerset Development bought the building, intending to redevelop it into a mixed commercial and residential project. A 2012 article expressed doubt on the success of the newly named Bell Works site however several large tenants had announced plans to move in through 2016 and 2017 Bell Laboratories was, is, regarded by many as the premier research facility of its type, developing a wide range of revolutionary technologies, including radio astronomy, the transistor, the laser, information theory, the operating system Unix, the programming languages C and C++, solar cells, the CCD, floating-gate MOSFET, a whole host of optical and wired communications
Secure Shell is a cryptographic network protocol for operating network services securely over an unsecured network. Typical applications include remote command-line login and remote command execution, but any network service can be secured with SSH. SSH provides a secure channel over an unsecured network in a client–server architecture, connecting an SSH client application with an SSH server; the protocol specification distinguishes between two major versions, referred to as SSH-1 and SSH-2. The standard TCP port for SSH is 22. SSH is used to access Unix-like operating systems, but it can be used on Microsoft Windows. Windows 10 uses OpenSSH as its default SSH client. SSH was designed as a replacement for Telnet and for unsecured remote shell protocols such as the Berkeley rlogin and rexec protocols; those protocols send information, notably passwords, in plaintext, rendering them susceptible to interception and disclosure using packet analysis. The encryption used by SSH is intended to provide confidentiality and integrity of data over an unsecured network, such as the Internet, although files leaked by Edward Snowden indicate that the National Security Agency can sometimes decrypt SSH, allowing them to read the contents of SSH sessions.
SSH uses public-key cryptography to authenticate the remote computer and allow it to authenticate the user, if necessary. There are several ways to use SSH. Another is to use a manually generated public-private key pair to perform the authentication, allowing users or programs to log in without having to specify a password. In this scenario, anyone can produce a matching pair of different keys; the public key is placed on all computers that must allow access to the owner of the matching private key. While authentication is based on the private key, the key itself is never transferred through the network during authentication. SSH only verifies whether the same person offering the public key owns the matching private key. In all versions of SSH it is important to verify unknown public keys, i.e. associate the public keys with identities, before accepting them as valid. Accepting an attacker's public key without validation will authorize an unauthorized attacker as a valid user. On Unix-like systems, the list of authorized public keys is stored in the home directory of the user, allowed to log in remotely, in the file ~/.ssh/authorized_keys.
This file is respected by SSH only if it is not writable by anything apart from the root. When the public key is present on the remote end and the matching private key is present on the local end, typing in the password is no longer required. However, for additional security the private key itself can be locked with a passphrase; the private key can be looked for in standard places, its full path can be specified as a command line setting. The ssh-keygen utility produces the private keys, always in pairs. SSH supports password-based authentication, encrypted by automatically generated keys. In this case, the attacker could imitate the legitimate server side, ask for the password, obtain it. However, this is possible only if the two sides have never authenticated before, as SSH remembers the key that the server side used; the SSH client raises a warning before accepting the key of a new unknown server. Password authentication can be disabled. SSH is used to log into a remote machine and execute commands, but it supports tunneling, forwarding TCP ports and X11 connections.
SSH uses the client-server model. The standard TCP port 22 has been assigned for contacting SSH servers. An SSH client program is used for establishing connections to an SSH daemon accepting remote connections. Both are present on most modern operating systems, including macOS, most distributions of Linux, OpenBSD, FreeBSD, NetBSD, Solaris and OpenVMS. Notably, versions of Windows prior to 1709 do not include SSH by default. Proprietary and open source versions of various levels of complexity and completeness exist. File managers for UNIX-like systems can use the FISH protocol to provide a split-pane GUI with drag-and-drop; the open source Windows program WinSCP provides similar file management capability using PuTTY as a back-end. Both WinSCP and PuTTY are available packaged to run directly off a USB drive, without requiring installation on the client machine. Setting up an SSH server in Windows involves enabling a feature in Settings app. In Windows 10 version 1709, an official Win32 port of OpenSSH is available.
SSH is important in cloud computing to solve connectivity problems, avoiding the security issues of exposing a cloud-based virtual machine directly on the Internet. An SSH tunnel can provide a secure path over the Internet, through a firewall to a virtual machine. In 1995, Tatu Ylönen, a researcher at Helsinki University of Technology, designed the first version of the protocol prompted by a password-sniffing attack at his university network; the goal of SSH was to replace the earlier rlogin, TELNET, FTP and rsh protocols, which did not provide strong authentication nor guarantee confidentiality. Ylönen released his implementation as freeware in July 1995, an
Magnetic tape data storage
Magnetic tape data storage is a system for storing digital information on magnetic tape using digital recording. Modern magnetic tape is most packaged in cartridges and cassettes; the device that performs writing or reading of data is a tape drive. Autoloaders and tape libraries automate cartridge handling. For example, a common cassette-based format is Linear Tape-Open, which comes in a variety of densities and is manufactured by several companies. Although magnetic tape was primarily for data storage, newer uses included system backup, data archive and data exchange. Magnetic tape for data storage was wound on 10.5-inch reels. This de facto standard for large computer systems persisted through the late 1980s, with increasing capacity due to thinner substrates and changes in encoding. Tape cartridges and cassettes were available starting in the mid-1970s and were used with small computer systems. With the introduction of the IBM 3480 cartridge in 1984, described as "about one-fourth the size... yet it stored up to 20 percent more data," large computer systems started to move away from open reel tapes and towards cartridges.
Magnetic tape was first used to record computer data in 1951 on the Eckert-Mauchly UNIVAC I. The UNISERVO drive recording medium was a thin metal strip of 0.5-inch wide nickel-plated phosphor bronze. Recording density was 128 characters per inch on eight tracks at a linear speed of 100 in/s, yielding a data rate of 12,800 characters per second. Of the eight tracks, six were data, one was a parity track, one was a clock, or timing track. Making allowances for the empty space between tape blocks, the actual transfer rate was around 7,200 characters per second. A small reel of mylar tape provided separation from the read/write head. IBM computers from the 1950s used ferrous-oxide coated tape similar to that used in audio recording. IBM's technology soon became the de facto industry standard. Magnetic tape dimensions were 0.5-inch wide and wound on removable reels up to 10.5 inches in diameter. Different tape lengths were available with 1,200 feet and 2,400 feet on mil and one half thickness being somewhat standard.
During the 1980s, longer tape lengths such as 3,600 feet became available using a much thinner PET film. Most tape drives could support a maximum reel size of 10.5 inches. CDC used IBM compatible 1/2 inch magnetic tapes, but offered a 1 inch wide variant, with 14 tracks in the CDC 626 drive. A so-called mini-reel was common for smaller data sets, such as for software distribution; these were 7-inch reels with no fixed length—the tape was sized to fit the amount of data recorded on it as a cost-saving measure. Early IBM tape drives, such as the IBM 727 and IBM 729, were mechanically sophisticated floor-standing drives that used vacuum columns to buffer long u-shaped loops of tape. Between servo control of powerful reel motors, a low-mass capstan drive, the low-friction and controlled tension of the vacuum columns, fast start and stop of the tape at the tape-to-head interface could be achieved: 1.5 ms from stopped tape to full speed of 112.5 inches per second. The fast acceleration is possible.
When active, the two tape reels thus fed tape into or pulled tape out of the vacuum columns, intermittently spinning in rapid, unsynchronized bursts resulting in visually striking action. Stock shots of such vacuum-column tape drives in motion were used to represent "the computer" in movies and television. Early half-inch tape had seven parallel tracks of data along the length of the tape, allowing six-bit characters plus one bit of parity written across the tape; this was known as seven-track tape. With the introduction of the IBM System/360 mainframe, nine-track tapes were introduced to support the new 8-bit characters that it used. Recording density increased over time. Common seven-track densities started at 200 six-bit characters per inch 556, 800. Nine-track tapes had densities of 800 1600, 6250; this translates into about 5 megabytes to 140 megabytes per standard length reel of tape. The end of a file was designated by a special recorded pattern called a tape mark, end of the recorded data on a tape by two successive tape marks.
The physical beginning and end of usable tape was indicated by reflective adhesive strips of aluminum foil placed on the back side. At least due to the success of the S/360, the resultant standardization on 8-bit character codes and byte addressing, nine-track tapes were widely used throughout the computer industry during the 1970s and 1980s. LINCtape, its derivative, DECtape, were variations on this "round tape", they were a personal storage medium. The tape was 0.75 inches wide and featured a fixed formatting track which, unlike standard tape, made it feasible to read and rewrite blocks in place. LINCtapes and DECtapes had similar capacity and data transfer rate to the diskettes that displaced them, but their "seek times" were on the order of thirty seconds to a minute. In the context of magnetic tape, the term cassette refers to an enclosure that holds two reels with a single span of magnetic tape; the term cartridge is more generic, but means a single reel of tape in a plastic enclosure. The type o
A computer file is a computer resource for recording data discretely in a computer storage device. Just as words can be written to paper, so can information be written to a computer file. Files can be transferred through the internet. There are different types of computer files, designed for different purposes. A file may be designed to store a picture, a written message, a video, a computer program, or a wide variety of other kinds of data; some types of files can store several types of information at once. By using computer programs, a person can open, change and close a computer file. Computer files may be reopened and copied an arbitrary number of times. Files are organised in a file system, which keeps track of where the files are located on disk and enables user access; the word "file" derives from the Latin filum."File" was used in the context of computer storage as early as January 1940. In Punched Card Methods in Scientific Computation, W. J. Eckert stated, "The first extensive use of the early Hollerith Tabulator in astronomy was made by Comrie.
He used it for building a table from successive differences, for adding large numbers of harmonic terms". "Tables of functions are constructed from their differences with great efficiency, either as printed tables or as a file of punched cards." In February 1950: In a Radio Corporation of America advertisement in Popular Science Magazine describing a new "memory" vacuum tube it had developed, RCA stated: "the results of countless computations can be kept'on file' and taken out again. Such a'file' now exists in a'memory' tube developed at RCA Laboratories. Electronically it retains figures fed into calculating machines, holds them in storage while it memorizes new ones - speeds intelligent solutions through mazes of mathematics." In 1952, "file" denoted, information stored on punched cards. In early use, the underlying hardware, rather than the contents stored on it, was denominated a "file". For example, the IBM 350 disk drives were denominated "disk files"; the introduction, circa 1961, by the Burroughs MCP and the MIT Compatible Time-Sharing System of the concept of a "file system" that managed several virtual "files" on one storage device is the origin of the contemporary denotation of the word.
Although the contemporary "register file" demonstrates the early concept of files, its use has decreased. On most modern operating systems, files are organized into one-dimensional arrays of bytes; the format of a file is defined by its content since a file is a container for data, although, on some platforms the format is indicated by its filename extension, specifying the rules for how the bytes must be organized and interpreted meaningfully. For example, the bytes of a plain text file are associated with either ASCII or UTF-8 characters, while the bytes of image and audio files are interpreted otherwise. Most file types allocate a few bytes for metadata, which allows a file to carry some basic information about itself; some file systems can store arbitrary file-specific data outside of the file format, but linked to the file, for example extended attributes or forks. On other file systems this can be done via software-specific databases. All those methods, are more susceptible to loss of metadata than are container and archive file formats.
At any instant in time, a file might have a size expressed as number of bytes, that indicates how much storage is associated with the file. In most modern operating systems the size can be any non-negative whole number of bytes up to a system limit. Many older operating systems kept track only of the number of blocks or tracks occupied by a file on a physical storage device. In such systems, software employed other methods to track the exact byte count; the general definition of a file does not require that its size have any real meaning, unless the data within the file happens to correspond to data within a pool of persistent storage. A special case is a zero byte file. For example, the file to which the link /bin/ls points in a typical Unix-like system has a defined size that changes. Compare this with /dev/null, a file, but its size may be obscure. Information in a computer file can consist of smaller packets of information that are individually different but share some common traits. For example, a payroll file might contain information concerning all the employees in a company and their payroll details.
A text file may contain lines of corresponding to printed lines on a piece of paper. Alternatively, a file may contain an arbitrary binary image or it may contain an executable; the way information is grouped into a file is up to how it is designed. This has led to a plethora of more or less standardized file structures for all imaginable purposes, from the simplest to the most complex. Most computer files are used by computer programs which create, modify or delete the files for their own use on an as-needed basis; the programmers who create the programs decide what files are needed, how they are to be used and their names. In some cases, computer pr