Explore operating system
Now that we know how to move around(equal nagtive) the file system,it's time for a guided tour of our Linux system.Before we start however,we're going to learn some more commands that will be useful along the way:
ls:list directory contents
file:determine(确定) file type
less:view file contents
the funny of ls
The ls command is probably the most used command,and for good reason(这自有它的道理).With it,we can see directory contents and determine a variety of important file and directory attributes.As we have seen,we can simply type ls to see a list of files and subdirectories contained in the current working directory:
Besides the current working directory,we can specify the directory to list,like so:
Or even specify multiple directories.In this example we will list both the user's home directory (symbolized by the "~" character ) and the /usr directory:
We can also change the format of the output to reveal(显示,露出,泄露,透露) more detail
By adding "-l" to the command,we changed the output to the long format.
Options and arguments
This brings us to a very important point about how most commands work.Commands are often followed by one or more options that modify their behavior,and further,by one or more arguments,the items upon which the command acts(这些参数是命令的作用对象).So most command look kind of like this:
Most commands use options consisting of a single character preceded(在...之前) by a dash(破折号),for example,"-l",but many commands,including those from the GNU Project,also support long options,consisting of a word preceded by two dashes.Also,many commands allow multiple short options to be strung together. In this example,the ls command is given two options,the "l" option to produce long format output,and the "t" option to sort the result by the file's modification time.
We'll add the long option "-reverse" to reverse the order of the sort:
The ls command has a large number of possible options.The most common are listed in the Table 4-1
Table 4-1:Common ls Options
Option | Long Option | Description |
-a | --all | List all files,even those with names that begin with a period,which are normally not listed(i.e.,hidden). |
-d | --directory | Ordinaryly,if a directory is specified,ls will list the contents of the directory,not the directory itself.Use this option in conjunction with the -l option to see details about the directory rather than its contents. |
-F | --classify | This option will append (附加) an indicator(显示器) character to the end of each listed name.For example,a '/'if the name is a directroy |
-h | --human-readable | In long format listings,display file sizes in human readable format rather than in bytes |
-l | Display results in long format | |
-r | --reverse | Display the results in reverse order.Normally,ls display its results in ascending (上升的) alphabetical(按字母表的)order |
-S | Sort results by file size | |
-t | Sort by modification time. |
Develop into long format output
As we saw before,the "-l" option causes ls to display its results in long format.This format contains a great deal of useful information.Here is the Examples directory from an Ubuntu system:(RHEL的显示格式和Ubuntu的没差别,除了最近一次修改时间不同)
Unbuntu
Let's look at the different fields from one of the files and examine their meanings:
Table 4-2:ls Long Listing Fields
Field | Meaning |
-rw-r--r-- | Access rights to the file.The first character indicates the type of file.Among the different types,a leading dash means a regular file,while a "d" indicates a directory.The next three characters are the access rights for the file's owner,the next three are for members of the file's group,and the final three are for everyone else.The full meaning of this is discussed in Chapter 10 -Permissions. |
l | File's number of hard links.See the discussion of links later in this chapter. |
root | The user name of the file's owner. |
root | The name of the group which owns the file. |
32059 | Size of the file in bytes. |
2007-04-03 11:05 | Date and time of the file's last modification. |
oo-cd-cover.odf | Name of the file. |
Certain the type of the file
As we explore the system it will be useful to know what files contain.To do this we will use the file command to determine a type. As we discussed earlier,filenames in Linux are not required to reflect a file's contents.While a filename like "picture.jpg" would normally be expected to contain a JPEG compressed image,it is not required to in Linux.We can invoke the file command this way:
When invoked, the file command will print a brief description of the file's contents.For example:
There are many kinds of files.In fact,one of the common ideas(普遍的观念) in Unix-like operating systems such as Linux is that "everything is a file."As we proceed with our lessons,we will see just how true that statement is.
While many of the files on your system are familiar,for example MP3 and JPEG,there are many kinds that are a little less obvious(明显的) and a few(极少数) that are quite strange.
View the contents of the file with less
The less command is a program to view text files.Throughout our Linux system,there are many files that contain human-readable text.The less program provides a convenient way to examine them.
What Is "Text"
There are many ways to represent information on a computer.All methods involve defining a relationship between the information and some numbers that will be used to represent it.Computers,after all,only understand numbers and all data is converted(转换) to numeric representation.
Some of these represention systems are very complex(such as compressed video files),while others are rather simple.One of the earliest and simplest is called ASCII text.ASCII(pronounced"As-Key") is short for American Standard Code for Information Interchange.This is a simple encoding scheme that was first used on Teletype machines to map keyboard characters to numbers.
Text is a simple one-to-one mapping of characters to numbers.It is very compact(紧凑的).Fifty characters of text translates to fifty bytes of data.It is important to understand that text only contains a simple mapping of characters to numbers.It is not the same as a word processor document such as one create by Microsoft Word or OpenOffice.org Writer.Those files,in contrast (对比) to simple ASCII text,contain many non-text elements that are used to describe its structure and formatting.Plain ASCII text files contain only the characters themselves and a few rudimentary(初步的,基础的) control codes (控制符)like tabs(制表符),carriage returns(回车符) and line feeds(换行符).Throughout a Linux system,many files are stored in text format and there are many Linux tools that work with text files.Even Windows recognizes the importance of this format.The well-known NOTEPAD.EXE program is an editor for plain ASCII text files.
Why would we want to examine text files?Because many of the files that contain system settings(called configuration files) are stored in this format,and being able to read them gives us insight about how the system works.In addition,many of the actual programs that the system uses (called scripts) are stored in this format.In later chapters,we will learn how to edit text files in order to modify systems settings and write our own scripts,but for now we will just look at their contents.
The less command is used like this:
Once started,the less program allows you to scroll forward and backward through a text file.For example,to examine the file that defines all the system's user accounts,enter the following command:
Once the less program starts,we may view the contents of the file.If the file is longer than one page,we can scroll up and down.To exit less,press the "q" key.The table below lists the most common keyboard commands used by less.
Table 4-3:less Commands
Command | Action |
Page UP or b | Scroll back one page |
Page Down or space | Scroll forward one page |
UP Arrow | Scroll Up one line |
Down Arrow | Scroll forward one line |
G | Move to the end of the text file |
1G or g | Move to the beginning of the text file |
/characters | Search forward for the next occurrence(发生,出现;发生的事,出现的事) of characters向前查找指定的字符串 |
n | Search forward for the next occurrence of the previous search向前查找下一个出现的字符串,这个字符串是之前所指定查找的 |
h | Display help screen |
q | Quit less |
Less is more(禅语:色即是空)
The less program was designed as an improved replacement of an earlier Unix program called more.The name "less" is a play on the phrase "less is more"—a motto(座右铭) of modernist architects(建筑师,设计师) and designers.
less falls into the class of programs called "pagers," programs that allow the easy viewing of long text documents in a page by page manner.Whereas the more program could only page forward,the less program allows paging both forward and backward and has many other features as well.
Guidbook
The file system layout on your Linux system is much like that found on other Unix-like systems.The design is actually specified in a published standard called the Linux Filesystem Hierarchy(等级制度) Standard.Not all Linux distributions conform(遵照) to the standard exactly but most come pretty close.
Next,we are going to wander around the file system ourselves to see what makes our Linux system trick。This will give you a chance to practice your navigation skills.One of the things we will discover is that many of the interesting files are in plain human-readable text.As we go about our tour,try the following:
1.cd into a given directory
2.List the directory contents with ls -l
3.If you see an interesting file,determine its contents with file
4.If it looks like it might be text,try viewing it with less
Remember the copy and paste trick!If you are using a mouse,you can double click on a filename to copy it and middle click to paste it into commands.
As we wander around,don't be afraid to look at stuff.Regular users are largely prohibited(prohibit禁止) from messing things up.That's the system administrators job! If a command complains about something,just move on to something else.Spend some time looking around.The system is ours to explore.Remember,in Linux,there are no secrets!Table 4-4 lists just a few of the directories we can explore.Feel free to try more!
Table 4-4:Directories Found On Linux Systems
Directory | Comments |
/ | The root directory,Where everything begins. |
/bin | Contains binaries(programs) that must be present for the system to boot and run |
/boot |
Contains the linux kernel,intial RAM disk image(for drivers needed at boot time),and the boot loader. Interesting files: /boot/grub/grub.conf or menu.lst,which are used to configure the boot loader. /boot/vmlinuz,the linux kenerel. |
/dev | This is a special directory which contains device nodes."Everything is a file" also applies to devices.Here is where the kernel maintains a list of all the devices it understands. |
/etc |
The /etc directory contains all of the system-wide configuration files.It also contains a collection of shell scripts which start each of the system services at boot time.Everthing in this directory should be readable text. Interesting files:While everything in /etc is interesting,here are some of my all-time favorites: /etc/crontab,a file that defines when automated jobs will run. 定义自动运行的任务 /etc/fstab,a table of storage devices and their associated(联合的,关联的)mount points. /etc/passwd,a list of the user accounts. |
/home | In normal configurations,each user is given a directory in /home.Ordinary users can only write files in their home directories.This limitation protects the system from errant (错误的) user activity. |
/lib | Contains shared library files used by the core(核心) system programs.These are similar to DLLs in Windows. |
/lost+found | Each formatted partition or device using a Linux file system,such as ext3,will have this directory.It is used in the case of a partial(局部的) recovery(恢复)from a file system corruption (损坏)event.Unless something really bad has happened to your system,this directory will remain empty. |
/media | On modern Linux systems the /media directory will contain the mount points for removable media such USB drives,CD-ROMs,etc.that are mounted automatically at insertion(插入) |
/mnt | On older Linux systems,the /mnt directory contains mount points for removable devices that have been mounted manually. |
/opt | The /opt directory is used to install "optional"software.This is mainly used to hold commercial(商业的,商务的) software products that may be installed on your system. |
/proc | The /proc directory is special.It's not a real file system in the sense of files stored on your hard drive.Rather,it is a virtual file system maintained by the Linux kernel.The "files" it contains are peepholes into the kernel itself.The files are readable and will give you a picture of how the kernel sees your computer. |
/root | This is the home directory for the root account. |
/sbin | The directory contains "system" binaries.These are programs that perform vital(极重要的) system tasks that are generally reserved for the superuser. |
/tmp | The /tmp directory is intended for storage of temporary,transient(短暂的) files created by various programs.Some configurations cause this directory to be emptied each time the system is rebooted. |
/usr | The /usr directory tree is likely the largest one on a Linux system.It contains all the programs and support files used by regular users. |
/usr/lib | The shared libraries for the programs in /usr/bin |
/usr/local | The /usr/local tree is where programs that are not included with your distribution but are intended for system-wide use are installed.Programs compiled (编译)from source code are normally installed in /usr/local/bin.On a newly installed Linux system,this tree exists,but it will be empty until the system administrator puts something in it. |
/usr/sbin | Contains more system administration programs. |
/usr/share | /usr/share contains all the shared data used by programs in /usr/bin.This includes things like default configuration files,icons,screen backgrounds,sound files,etc. |
/usr/share/doc | Most packages installed on the system will include some kind of documentation.In /usr/share/doc,we will find documention files organized by package. |
/var | With the exception of /tmp and /home,the directories we have looked at so far remain relatively static,that is,their contents don't change.The /var directory tree is where data that is likely to change is stored.Various databases,spool files,user mail,etc.are located here. |
/var/log | /var/log contains log files,records of various system activity.These are very important and should be monitored(监控) from time to time.The most useful one is /var/log/messages.Note that for security reasons on some systems,you must be the superuser to view log files. |
Symbolic link
As we look around,we are likely to see a directory listing with an entry like this:
Notice how the first letter of the listing is "l" and the entry seems to have two filenames?This is a special kind of a file called a symbolic link (also known as a soft link or symlink.)In most Unix-like systems it is possible to have a file referenced by multiple names.While the value of this may not be obvious,it is really a useful feature.
Picture this scenario(情景):a program requires the use of a shared resource of some kind contained in a file named "foo," but "foo" has frequent version changes.It would be good to include the version number in the filename so the administrator or other interested party could see what version of "foo" is installed.This presents a problem.If we change the name of the shared resource,we have to track (追踪) down every program that might use it and change it to look for a new resource name every time a new version of the resource is installed.That doesn't sound like fun at all.
Here is where symbolic links save the day.(这就是符号链接存在至今的有原因。)Let's say we install version 2.6 of "foo," which has the filename "foo-2.6" and then create a symbolic link simply called "foo" that points to "foo-2.6."This means that when a program opens the file "foo",it is actually opening the file "foo-2.6".Now everybody is happy.The programs that rely on "foo" can find it and we can still see what actual version is installed.When it is time to upgrade to "foo-2.7,"we just add the file to our system,delete the symbolic link "foo" and create a new one that points to the new version.Not only does this solve the problem o f the version upgrade,but it also one that points to the new version.Not only does this solve the problem of the version upgrade,but it also allows us to keep both versions on our machine.Imagine that "foo-2.7" has a bug(damn those developers!) and we need to revert(恢复) to the old version.Again,we just delete the symbolic link pointing to the new version and create a new symbolic link pointing to the old version.
The directory listing above(from the /lib directory of a Fedora system)shows a symbolic link called"libc.so.6" that points to a shared library file called "libc-2.6.so."This means that programs looking for "libc.so.6" will actually get the file "libc-2.6.so."We will learn how to create symbolic links in the next chapter.
Hard links
While we are on the subject of links,we need to mention that there is a second type of link called a hard link.Hard links also allow files to have multiple names,but they do it in a different way.We'll talk more about the differences between symbolic and hard links in the next chapter.