Softpanorama

May the source be with you, but remember the KISS principle ;-)
Home Switchboard Unix Administration Red Hat TCP/IP Networks Neoliberalism Toxic Managers
(slightly skeptical) Educational society promoting "Back to basics" movement against IT overcomplexity and  bastardization of classic Unix

file command

News Recommended Books Recommended Links Reference

mv command

 ln command
  tar cpio Admin Horror Stories Unix History

Humor

Etc

The file  command determines what type of data a file contains. It returns a brief explanation of what type of data it believes is in each file. The file  command is useful for knowing what type of data a file contains. It can help prevent you from locking up your terminal by informing you that a file contains executable program text. If you cat  an executable file, your terminal may act strange and, in fact, the keyboard often becomes disabled. The only way out of the situation is to turn your terminal off and back on, then log back in to the system. If you perform file  before you cat  a file, you will know what type of data it contains and whether or not you can display it.

You can invoke it from find in case you want to check who many files are corrupting on in the particulate filesystem by finfing descrapanires between file extention and the type of file that  file provides. this is especially effective for such file types like gz, tar, etc that are corrupted file print type data.

cd Scratch; find . -type f -print0 | xargs file -0 > /tmp/scratch_files.lst
fgrep 'gz:' | grep -P 'gz\:\s+data' > scratch_corrupted_gz_files.lst

Those files then can be investigated further.

The file  command makes calculated assumptions as to what type of data is in a file. The following list describes the types file  may return. Keep in mind file  is trying to guess what type of data is in a file. The known system types of data, such as executable or linkable object code, are known but some shell scripts and English text files may confuse file  and thus an incorrect response is returned.

Following are the general formats of the file  command.

     file [ -h ] [ -m magic_file ] file_list
     file [ -h ] [ -m magic_file ] -f list_file
     file -c     [ -m magic_file ]

Most commonly used options are -f and -h:

   
-f list_file The next argument after the -f is read and the contents are used as the pathnames for files to be examined by file.
-h Do not follow symbolic links.

You can also create your own magic file and specified it using option -m

-m magic_file The next argument after the -m is used as the magic file instead of the default /etc/magic file.

The following list describes the arguments passed to the file  command.

The description given by the file  command you are using may vary but it should inform you of the same type of data stored in the file. You can display the /etc/magic file to see the definitions used by your system's file  command.


CAUTION:  The file  command is not always correct in its assumption of the type of data stored in a file. The most common mistakes of file  are the ASCII text, English text, and commands text.

The /etc/magic file is used as a cross reference to determine what type of data is stored in a file. The magic number is based on numeric or string constants stored within the file itself. The format of the /etc/magic file is described in the first lines of the file (/etc/magic).

Reference

 

file [-bchikLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...

file -C [-m magicfiles]

file [--help]

This manual page documents version 5.04 of the file command.

file tests each argument in an attempt to classify it. There are three sets of tests, performed in this order: filesystem tests, magic tests, and language tests. The first test that succeeds causes the file type to be printed.

The type printed will usually contain one of the words text (the file contains only printing characters and a few common control characters and is probably safe to read on an ASCII terminal), executable (the file contains the result of compiling a program in a form understandable to some UNIX kernel or another), or data meaning anything else (data is usually 'binary' or non-printable). Exceptions are well-known file formats (core files, tar archives) that are known to contain binary data. When modifying magic files or the program itself, make sure to preserve these keywords. Users depend on knowing that all the readable files in a directory have the word 'text' printed. Don't do as Berkeley did and change 'shell commands text' to 'shell script'.

The filesystem tests are based on examining the return from a stat(2) system call. The program checks to see if the file is empty, or if it's some sort of special file. Any known file types appropriate to the system you are running on (sockets, symbolic links, or named pipes (FIFOs) on those systems that implement them) are intuited if they are defined in the system header file

The magic tests are used to check for files with data in particular fixed formats. The canonical example of this is a binary executable (compiled program) a.out file, whose format is defined in #include <a.out.h> and possibly #include <exec.h> in the standard include directory.

These files have a 'magic number' stored in a particular place near the beginning of the file that tells the UNIX operating system that the file is a binary executable, and which of several types thereof. The concept of a 'magic' has been applied by extension to data files. Any file with some invariant identifier at a small fixed offset into the file can usually be described in this way. The information identifying these files is read from the compiled magic file /usr/share/misc/magic.mgc, or the files in the directory /usr/share/misc/magic if the compiled file does not exist. In addition, if $HOME/.magic.mgc or $HOME/.magic exists, it will be used in preference to the system magic files. If /etc/magic exists, it will be used together with other magic files.

If a file does not match any of the entries in the magic file, it is examined to see if it seems to be a text file. ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII character sets (such as those used on Macintosh and IBM PC systems), UTF-8-encoded Unicode, UTF-16-encoded Unicode, and EBCDIC character sets can be distinguished by the different ranges and sequences of bytes that constitute printable text in each set. If a file passes any of these tests, its character set is reported. ASCII, ISO-8859-x, UTF-8, and extended-ASCII files are identified as 'text' because they will be mostly readable on nearly any terminal; UTF-16 and EBCDIC are only 'character data' because, while they contain text, it is text that will require translation before it can be read. In addition, file will attempt to determine other characteristics of text-type files. If the lines of a file are terminated by CR, CRLF, or NEL, instead of the Unix-standard LF, this will be reported. Files that contain embedded escape sequences or overstriking will also be identified.

Once file has determined the character set used in a text-type file, it will attempt to determine in what language the file is written. The language tests look for particular strings (cf. #include <names.h> ) that can appear anywhere in the first few blocks of a file. For example, the keyword .br indicates that the file is most likely a troff(1) input file, just as the keyword struct indicates a C program. These tests are less reliable than the previous two groups, so they are performed last.

The language test routines also test for some miscellany (such as tar(1) archives).

Any file that cannot be identified as having been written in any of the character sets listed above is simply said to be 'data'.

Options

 -b, --brief
Do not prepend filenames to output lines (brief mode).

-C, --compile
Write a magic.mgc output file that contains a pre-parsed version of the magic file or directory.

-c, --checking-printout
Cause a checking printout of the parsed form of the magic file. This is usually used in conjunction with the -m flag to debug a new magic file before installing it.

-e, --exclude testname
Exclude the test named in testname from the list of tests made to determine the file type. Valid test names are:

apptype
EMX application type (only on EMX).

text' Various types of text files (this test will try to guess the text encoding, irrespective of the setting of the 'encoding' option).

encoding
Different text encodings for soft magic tests.

tokens' Looks for known tokens inside text files.

cdf' Prints details of Compound Document Files.

compress
Checks for, and looks inside, compressed files.

elf' Prints ELF file details.

soft' Consults magic files.

tar' Examines tar files.

-F, --separator separator
Use the specified string as the separator between the filename and the file result returned. Defaults to ':'.

-f, --files-from namefile
Read the names of the files to be examined from namefile (one per line) before the argument list. Either namefile or at least one filename argument must be present; to test the standard input, use '-' as a filename argument.

-h, --no-dereference
option causes symlinks not to be followed (on systems that support symbolic links). This is the default if the environment variable POSIXLY_CORRECT is not defined.

-i, --mime
Causes the file command to output mime type strings rather than the more traditional human readable ones. Thus it may say 'text/plain; charset=us-ascii' rather than 'ASCII text'. In order for this option to work, file changes the way it handles files recognized by the command itself (such as many of the text file types, directories etc), and makes use of an alternative 'magic' file. (See the FILES section, below).

--mime-type, --mime-encoding
Like -i, but print only the specified element(s).

-k, --keep-going
Don't stop at the first match, keep going. Subsequent matches will be have the string '\012- ' prepended. (If you want a newline, see the '-r' option.)

-L, --dereference
option causes symlinks to be followed, as the like-named option in ls(1) (on systems that support symbolic links). This is the default if the environment variable POSIXLY_CORRECT is defined.

-m, --magic-file magicfiles
Specify an alternate list of files and directories containing magic. This can be a single item, or a colon-separated list. If a compiled magic file is found alongside a file or directory, it will be used instead.

-N, --no-pad
Don't pad filenames so that they align in the output.

-n, --no-buffer
Force stdout to be flushed after checking each file. This is only useful if checking a list of files. It is intended to be used by programs that want filetype output from a pipe.

-p, --preserve-date
On systems that support utime(2) or utimes(2), attempt to preserve the access time of files analyzed, to pretend that file never read them.

-r, --raw
Don't translate unprintable characters to \ooo. Normally file translates unprintable characters to their octal representation.

-s, --special-files
Normally, file only attempts to read and determine the type of argument files which stat(2) reports are ordinary files. This prevents problems, because reading special files may have peculiar consequences. Specifying the -s option causes file to also read argument files which are block or character special files. This is useful for determining the filesystem types of the data in raw disk partitions, which are block special files. This option also causes file to disregard the file size as reported by stat(2) since on some systems it reports a zero size for raw disk partitions.

-v, --version
Print the version of the program and exit.

-z, --uncompress
Try to look inside compressed files.

-0, --print0
Output a null character '\0' after the end of the filename. Nice to cut(1) the output. This does not affect the separator which is still printed.

--help
Print a help message and exit.

Files

/usr/share/misc/magic.mgc
Default compiled list of magic.
/usr/share/misc/magic' Directory containing default magic files.

Environment

The environment variable MAGIC can be used to set the default magic file name. If that variable is set, then file will not attempt to open $HOME/.magic. file adds '.mgc' to the value of this variable as appropriate. The environment variable POSIXLY_CORRECT controls (on systems that support symbolic links), whether file will attempt to follow symlinks or not. If set, then file follows symlink, otherwise it does not. This is also controlled by the -L and -h options.

Examples

The file  command writes to the standard output. Its output may be piped to another command or redirected to a file.

foreach f (/etc/*)

file $f

end

To see what your types of files the current directory contains 

file *
     bin:      directory
     calendar:       ascii text
     db:  directory
     file1: English text
     letters:    directory
     myfile: empty

Top Visited
Switchboard
Latest
Past week
Past month

NEWS CONTENTS

Old News ;-)

Get over extensions, use file command to determine file types in Linux

Dec 14 2012 | IBM real world Linux Blog
Himanshuz.chd 270004408M | Dec 14 2012 | Tags: linux extensions magic command file ‎ | 58,194 Views

The other day when I was searching for some file in my Linux system, I got a result with name 'TheLinuxCommandLine'. I was not sure what type of file was that as 'vim TheLinuxCommandLine' produced the following output :

%PDF-1.6^M%âãÏÓ^M
3006 0 obj^M<>stream^M
...
...
...
While I got a clue from the word 'PDF' in the output above that it could be a PDF file but then I thought that there should be utility that could gracefully tell the type of file supplied to it as input. I searched a bit and found a Linux command line utility known as 'file' which is used to classify the files (whose names are supplied as input) based on their type. So, I thought to share whatever I learned about the 'file' command in Linux.

Here is the syntax of this command :

file [options] file-name

So we see that the file command expects a file name as a mandatory argument while there are certain options that are non-mandatory but can be supplied to customize the output as per need. Here is a basic example of what file command does. In this exercise, I supplied different types of files as input to file command. The output is shown below :

$ file grof
grof: PostScript document text conforming DSC level 3.0
$ file Desktop/
Desktop/: directory
$ file env_script.sh 
env_script.sh: Bourne-Again shell script, ASCII text executable
$ file a.out 
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xee08a653cc2bcbca7fcd1fc62900bd9d6d053731, not stripped

So, we see that for every type of file supplied, the file command was able to classify it by providing the details related to it's type. Finally I supplied the file 'TheLinuxCommandLine' (that I was originally confused about) to this utility.

Here is the output that I got:

$ file TheLinuxCommandLine 
TheLinuxCommandLine: PDF document, version 1.6

So we see that the file command successfully classified it as a PDF file. This prompted me to look into the details about how this command works. I read the man page and found that there are three sets of tests, performed in this order: file system tests, magic tests, and language tests.

Here is more about these tests from the man page :

The file-system tests are based on examining the return from a stat(2) system call. The program checks to see if the file is empty, or if it's some sort of special file. Any known file types appropriate to the system you are running on (sockets, symbolic links, or named pipes (FIFOs) on those systems that implement them) are intuited if they are defined in the system header file .

The magic tests are used to check for files with data in particular fixed formats. These files have a "magic number" stored in a particular place near the beginning of the file that tells the UNIX operating system that the file is a binary executable, and which of several types thereof. The concept of a "magic" has been applied by extension to data files. Any file with some invariant identifier at a small fixed offset into the file can usually be described in this way. The information identifying these files is read from /etc/magic and the compiled magic file /usr/share/misc/magic.mgc, or the files in the directory /usr/share/misc/magic if the compiled file does not exist. In addition, if $HOME/.magic.mgc or $HOME/.magic exists, it will be used in preference to the system magic files.

If a file does not match any of the entries in the magic file, it is examined to see if it seems to be a text file. ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII character sets (such as those used on Macintosh and IBM PC systems), UTF-8-encoded Unicode, UTF-16-encoded Unicode, and EBCDIC character sets can be distinguished by the different ranges and sequences of bytes that constitute printable text in each set. If a file passes any of these tests, its character set is reported. ASCII, ISO-8859-x, UTF-8, and extended-ASCII files are identified as "text" because they will be mostly readable on nearly any terminal; UTF-16 and EBCDIC are only "character data" because, while they contain text, it is text that will require translation before it can be read.

Once file has determined the character set used in a text-type file, it will attempt to determine in what language the file is written. The language tests look for particular strings (cf. ) that can appear anywhere in the first few blocks of a file. For example, the keyword .br indicates that the file is most likely a troff(1) input file, just as the keyword struct indicates a C program. These tests are less reliable than the previous two groups, so they are performed last. The language test routines also test for some miscellany (such as tar(1) archives).

Any file that cannot be identified as having been written in any of the character sets listed above is simply said to be "data".

This gave me a good idea as to how this command works. Thereon I tried a few options provided by this command.

Examples of file command options

1. Remove file-names from output using -b option.

I used this option in the following example :

$ file -b grof
PostScript document text conforming DSC level 3.0
$

So we see that there was no file name in the output. The output contained only details about the file.

2. Exclude a particular test while determining the file type

There are various test that are performed by file command while determining the type of file. There exists an option -e that can be used to exclude a particular type of test. For example, to exclude a test in which the file command checks and prints the details of an ELF file, we can pass the test name 'elf' to -e option in the file command. Here is an example :

$ file -e elf a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV)

So we see that the details were skipped due to the 'elf' test name supplied to -e option. There are various other test names available. Here is the list of test names available :

apptype EMX application type (only on EMX).
ascii Various types of text files (this test will try to guess the text encoding, irrespective of the setting of the 'encoding' option).
encoding Different text encodings for soft magic tests.
tokens Looks for known tokens inside text files.
cdf Prints details of Compound Document Files.
compress Checks for, and looks inside, compressed files.
elf Prints ELF file details.
soft Consults magic files.
tar Examines tar files.

3. Change the default separator using -F option

If you observe that a separator ':' is used between the file names and the description in the outputs produced by file command. There exists an option -F through which we can change the separator.

Here is an example in which I tried to replace the default ':' with '#'.

$ file -F# *
a.out#         ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xee08a653cc2bcbca7fcd1fc62900bd9d6d053731, not stripped
bufrovrflw#    ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x359ad47b9c29ca2b287e1d0adb26029b859ac7e4, not stripped
bufrovrflw.c#  ASCII English text
Cfile.c#       ASCII text
Cfile.h#       ASCII text
Cfile.o#       ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
cmd#           ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xfac3f75dfae01e0ac037c39099182eb5c51fca82, not stripped
cmd.c#         ASCII English text
CPPfile.cpp#   ASCII C program text
CPPfile.h#     ASCII text

So we see that the separator was changed to '#'.

4. Read input file-names from a file using -f option

This command provides an option -f through which we can provide name of a file that contains input file-names for this command.

Here is an example :

$ cat file.txt
main
main.cpp
The above mentioned file 'file.txt' contains two file names. Let's use 'file.txt' with -f option :
$ file -f file.txt
main:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xee08a653cc2bcbca7fcd1fc62900bd9d6d053731, not stripped
main.cpp: ASCII C program text

So we see that the file command displayed the details about the file-names that were contained in the file 'file.txt'.

5. Output mime type information using -i option

If it is required to display the mime type information rather than the other human readable information then the option -i can be used.

Here is an example :

$ file -i a.out
a.out: application/x-executable; charset=binary

So we see that the output displayed mime type information.

6. Disable padding for file-names in output using -N option.

When file command is run normally, you will see that there is a bit of padding in the output so that file-names and description is distinguishable.

For example, a normal output looks like :

a.out:         ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xee08a653cc2bcbca7fcd1fc62900bd9d6d053731, not stripped
bufrovrflw:    ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x359ad47b9c29ca2b287e1d0adb26029b859ac7e4, not stripped
bufrovrflw.c:  ASCII English text
Cfile.c:       ASCII text
Cfile.h:       ASCII text
Cfile.o:       ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
cmd:           ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xfac3f75dfae01e0ac037c39099182eb5c51fca82, not stripped
cmd.c:         ASCII English text
CPPfile.cpp:   ASCII C program text
CPPfile.h:     ASCII text
CPPfile.o:     ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
dir1:          directory
dir2:          directory

The file command provides an option -N through which this padding can be disabled.

Here is an example using this option :

$ file -N *
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xee08a653cc2bcbca7fcd1fc62900bd9d6d053731, not stripped
bufrovrflw: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x359ad47b9c29ca2b287e1d0adb26029b859ac7e4, not stripped
bufrovrflw.c: ASCII English text
Cfile.c: ASCII text
Cfile.h: ASCII text
Cfile.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
cmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xfac3f75dfae01e0ac037c39099182eb5c51fca82, not stripped
cmd.c: ASCII English text
CPPfile.cpp: ASCII C program text
CPPfile.h: ASCII text
CPPfile.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
dir1: directory
dir2: directory

So we see that the padding was disabled in the output.

7. Provide details about files contained in compressed file using -z option.

Normally, if a compressed file (like .zip) is provided as input to file command, it displays that it is compressed zip file etc.

For example :

$ file grof.zip
grof.zip: Zip archive data, at least v1.0 to extract

But, the command also provides an option -z through which it displays the details of the files contained inside the compressed file. For example, if -z is used with the .zip file we used in above example, here is what we get in output :

$ file -z grof.zip
grof.zip: PNG image data, 64 x 64, 8-bit/color RGBA, non-interlaced (Zip archive data, at least v1.0 to extract)

So we see that this time the details of the data contained in the compressed file is displayed along with the general details that were displayed in the above example.

Some discussions related to file command on forums

Here are a couple of discussions on various forums related to file command that might be an interesting read.

Discussion - 1 :

The results from file are less than perfect, and it has more problems with some types of files than others. File basically just looks for particular pieces of binary data in predictable patterns to figure out filetypes. Unfortunately, in particular, some of the filetypes often used for video fall into this "problematic" category. The newer container formats like .mp4 and .mkv usually have several different MIME types that should properly depend on what type of data is being contained. For example, an .mp4 could properly be identified as video/mp4, audio/mp4, or application/mp4 depending on the content. In practice, file often makes guesses that simply conform with common usage, and it may work perfectly well for you. For example, while I mentioned some theoretical difficulties with identifying Matroska files correctly, file basically just assumes that any Matroska file is a video. On the other hand, the usage of the Ogg container is more evenly split between audio and video, and I believe the current version of file just splits the difference, and identifies Ogg files as application/ogg, which wouldn't fall into any of your categories. The one thing I can say with certainty is that you want the most up-to-date version of file you can get your hands on. The "magic" files that contain the patterns to match against and the MIME types that will result from a match are updated fairly often to include newer filetypes like WebM, or just to improve accuracy for older types.

Read full discussion here

Discussion - 2 :
I have a couple of C++ source files (one .cpp and one .h) that are being reported as type data by the file command in Linux. When I run the file -bi command against these files, I'm given this output (same output for each file): application/octet-stream; charset=binary Each file is clearly plain-text (I can view them in vi). What's causing file to misreport the type of these files? Could it be some sort of Unicode thing? Both of these files were created in Windows-land (using Visual Studio 2005), but they're being compiled in Linux (it's a cross-platform application).

...
...
...

I found the issue using binary search to locate the problematic lines. head -n {1/2 line count} file.cpp > a.txt tail -n {1/2 line count} file.cpp > b.txt Running file against each half, and repeating the process, helped me locate the offending line. I found a Control+P (^P) character embedded in it. Removing it solved the problem.

Read full discussion here

Recommended Links

Google matched content

Softpanorama Recommended

Top articles

Sites

Get over extensions, use file command to determine file types in Linux - Real world Linux Blog

How to see the file type - Linux Audit

How to Find Out File Types in Linux

Linux - UNIX Determine File Type - nixCraft

File Command in Linux 5 Essential Examples



Etc

Society

Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

Quotes

War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes

Bulletin:

Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

History:

Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand ~Archibald Putt. Ph.D


Copyright © 1996-2021 by Softpanorama Society. www.softpanorama.org was initially created as a service to the (now defunct) UN Sustainable Development Networking Programme (SDNP) without any remuneration. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to to buy a cup of coffee for authors of this site

Disclaimer:

The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the Softpanorama society. We do not warrant the correctness of the information provided or its fitness for any purpose. The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Last modified: October, 08, 2019