In previous chapters we've looked at manipulating data at the file level.In this chapter,we will consider data at the device level.Linux has amazing capabilities(能做某事的素质,能力) for  handling storage devices,whether physical storage,such as hard disks,or network storage,or virtual storage devices like RAID(Redundant Array of Independent Disks)(独立磁盘冗余阵列) and LVM(Logical Volume Manager)(逻辑卷管理器)

However,since this is not a book about system administration,we wil not try to cover this entire topic in depth.What we will try to do is introduce some of the concepts(概念,观念,思想)and key commands that are used to manage storage devices.

To carry out the exercises in this chapter,we will see a USB flash drive,a CD-RW disk(for systems equipped with a CD-ROM burner(燃烧器,灯头,火炉)and a floppy(松软的,松弛)disk (again,if the system is so equipped.)

We will look at the following commands:

mount-Mount a file system

umount - Unmount a file system

fsck-Check and repair a file system

fdisk - Partition table manipulator(操作者,操纵者)   分区表控制器

mkfs - Create a file system

fdformat - Format a floppy disk

dd-Write block oriented(导向的) data directly to a device 把面向块的数据直接写入设备

genisoimage(mkisofs)-Create an ISO 9660 image file 创建一个ISO 9660的映像文件

wodim(cdrecord) - Write data to optical(光学的,眼睛的,视觉的) storage media 把数据写入光存储媒介

md5sum - Calculate an MD5 checksum 计算MD5检验码

Amount and Uninstall storage device

Recent advances in the Linux desktop have made storage device management extremely easy for desktop users.For the most part,we attach a device to our system and it "just works." Back in the old days(say,2004),this stuff had to be done manually.On non-desktop systems(i.e.,servers)this is still a largely manual procedure(程序,步骤) since servers often have extreme storage needs and complex configuration requirements.

The first step in managing a storage device is attaching the device to the file system tree.This process,called mounting,allows the device to participate with the operating system.As we recall from Chapter 3,Unix-like operating systems,like Linux,maintain a single file system tree with devices attached at various points.This contrasts(对比,对照) with other operating systems such as MS-DOS and Windows that maintain separate trees for each device (for example C:\,D:\,etc.).

There is a file named /etc/fstab that lists the devices(typically hard disk partitions) that are to be mounted at boot time.Here is an example /etc/fstab file from a Fedora 7 system:

Most of the file systems listed in this example file are virtual and are not applicable(适当的,合适的) to our discussion.For our purpose,the interesting ones are the first three:

These are the hard disk partitions.Each line of the file consists of six fields,as follows:

Table 16-1:/etc/fstab Fields

Field Contents Description
1 Device Traditionally,this field contains the actual name of a device file associated(联合的,关联的) with the physical device,such as /dev/hda1(the first partition of the master device on the first IDE channel).But with today's computers,which have many devices that are hot pluggable(歌手拔)(like USB drivers),many modern Linux distributions associate a device with a text label instead.This label (which is added to the storage media when it is formatted) is read by the operating system when the device is attached to the system.That way,no matter which device file is assigned to the actual physcial device,it can still be correctly indentified.
2 Mount Point The directory where the device is attached to the file system tree.
3 File System Type Linux allows many file system types to be mounted.Most native Linux file systems are ext3,but many others supported,such as FAT16(msdos),FAT32(vfat),NTFS(ntfs),CD-ROM(iso9660),etc.
4 Options File systems can be mounted with various options.It is possible,for example,to mount file systems as read-only,or prevent any programs from being executed from them (a useful security feature for removable media.)
5 Frequency A single number that specifies if and when a file system is to be backed up with the dump  command.
6 Order A single number that specifies in what order file systems should be checked with the fsck command.

View a list of mounted file system

The mount command is used to mount file systems.Entering the command without arguments will display a list of the file systems currently mounted:

The format of the listing is :device on mount_point type file_system_type(options).

The format of the listing is:device on mount_point  type file_system_type(options).For example,the first line shows that device /dev/sda2 is mounted as the root file system and it is of type ext3 and is both  readable and writable(the option "rw").The listing also has two interesting entries at the bottom of the list.The next to last entry shows a 2 gigabyte SD memory card in a card reader mounted at /media/disk,and the last entry is a network drive mounted at  /misc/musicbox.

For our first experiment,we will work with a CD-ROM.First,let's look at a system before a CD-ROM is inserted:

This listing is from a CentOS system,which is using LVM (Logical Volume Manager) to create its root file system.Like many modern Linux distributions,this system will attempt to automatically mount the CD-ROM after insertion(插入).After we insert the disk,we see the following:

After we insert the disk,we see the same listing as before with one additional entry.At the end of the listing we see that the CD-ROM(which is device /dev/hdc on this system) has been mounted on /media/live-1.0.10-8,and is type iso9660(a CD-ROM).For purposes of our experiment,we're interested in the name of the name of the device.When you conduct this experiment yourself,the device name will most likely be different.

Warning:In the examples that follow,it is vitally important that you pay close attention to the actual device names in use on your system and do not use the names used in this text!

Also note that audio CDs are not the same as CD-ROMS.Audio CDs do not contain file systems and thus cannot be mounted in the usual sense.

Now that we have the device name of the CD-ROM drive,let's unmount the disk and remount it another location in the file system tree.To do this,we become the superuser(using the command appropriate(适当的,恰当的) for our system ) and unmount the disk with the umount (notice the spelling) command:

The next step is to create a new mount point for the disk.A mount point is simply a directory somewhere on the file system tree.Nothing special about it.It doesn't even have to be an empty directory,though if you mount a device on a non-empty directory,you will not be able to see the directory's previous contents until you unmount the device.For our purposes,we will create a new directory:

Finally,we mount the CD-ROM at the new mount point.The -t option is used to specify the file system type: 

Afterward,we can examine the contents of the CD-ROM via the new mount point:

Notice what happens when we try to unmount the CD-ROM:

Why is this?The reason is that we cannot unmount a device if the device is being used by someone or some process.In this case,we changed our working directory to the mount point for the CD-ROM,which causes the device to be busy.We can easily remedy(药品,补救方法,治疗方法) the issue by changing the working directory to something other than the mount point:

Now the device unmounts successfully.

Why Unmounting Is Important

If you look at the output of the free command,which displays statistics about memory usage,you will see a statistic called "buffers." Computer systems are designed to go as fast as possible.One of the impediments(妨碍、阻碍某事物进展或活动的人或物) to system speed is slow devices.Printers are a good example.Even the fastest printer is extremely slow by computer standards.A computer would be very slow indeed(真正地) if it had to stop and wait for a printer to finish printing a page.In the early days of PCs(before multi-tasking),this was a real problem.If you were working on a spreadsheet or text document,the computer would stop and become unavailable every time you printed.The computer would send the data to the printer as fast as  the printer could accept it,but it was very slow since printers don't print very fast.This problem was the printer could accept it,but it was very slow since printers don't print very fast.This problem was solved by the advent(到来) of the printer buffer,a device containing some RAM memory that would sit between the computer and the printer.With the printer buffer in place,the computer would send the printer output to the buffer and it would quickly be stored in the fast RAM so the computer could go back to work without waiting.Meanwhile,the printer buffer would slowly spool the data to the printer from the buffer's memory at the speed at which the printer could accept it.

This idea of buffering is used extensively in computers to make them faster.Don't let the need to occasionally(偶尔) read or write data to/from slow devices impede(阻止,妨碍) the speed of the system.Operating systems store data read from,and to be written to storage devices in  memory for as long as possible before actually having to interact with the slower device.On a Linux system for example,you will notice that the system seems to fill up (装满) memory the longer (多于) it is used.This does not mean is "using" all the memory,it means that Linux is taking advantage of all the available memory to do as much buffering as it can.

This buffering allows writing to storage devices to be done very quickly,because the writing to the physical device is being deferred(延期的,推迟的) to a future time.In the meantime(时不时地),the data destined(命定的,注定的) for the device is piling(堆,累积 ) up in memory.From time to time,the operating system will write this data to the physical device.

Unmonuting a device entails(需要) writing all the remaining data to the device so that it can be safely removed.If the device is removed without unmounting it first,the possibility exists that not all the data destined for the device has been transferred(转移的,调动的). In some cases,this data may include vital(极重要的) directory updates,which will lead to file system corruption(腐烂),one of the worst things that can happen on a computer.

Certain the name of the equipment

It's sometimes difficult to determine the name of a device.Back in the old days,it wasn't very hard.A device was always in the same place and it didn't change.Unix-like systems like it that way.Back when Unix was developed,"changing a disk drive" involved using a forklift(铲车) to remove a washing machine-sized device from the computer room.In recent years,the typical desktop hardware configuration has become quite dynamic and Linux has evolved(进化了的) to become more flexible(灵活的) than its ancestors(祖先,祖宗,先驱).In the example above we took advantage of the modern Linux desktop's ability to "automagically"(自动的) mount the device and then determine the name after the fact.But what if we are managing a server or some other environment where this does not occur?How can we figure it out?

First,let's look at how the system names devices.If we list the contents of the /dev directory(where all devices live),we can see that there are lots and lots of devices:

The contents of this listing reveal some patterns of device naming.Here are a few:

Table 16-2:Linux Storage Device Names

Pattern Device
/dev/fd* Floppy disk drives
/dev/hd* IDE(PATA)disks on older systems.Typical motherboards(底板) contain two IDE connectors,each with a cable with two attachment points for drives.The first drive on the cable is called the master device and the second is called the slave device.The device names are ordered such that /dev/hda refers to the master device on the first channel,/dev/hdb is the slave device on the first channel;/dev/hdc,the master device on the second channel,and so on.A trailing digit indicates the partition number on the device.For example,/dev/hda1 refers to the first partition on the first hard drive on the system while /dev/hda refers to the entire drive.
/dev/lp* Printers
/dev/sd* SCSI disks.On recent Linux systems,the kernel treats all disk-like devices(including PATA/SATA hard disks,flash drives,and USB mass(大量) storage devices,such as portable music players and digital cameras) as SCSI disks.The rest of the naming system is similar to the older /dev/hd*naming scheme described above.
/dev/sr* Optical(光学的,视觉的)drives(CD/DVD readers and burners)    光盘(CD/DVD 读取器和烧写器)

In addtition,we often see symbolic links such as /dev/cdrom,/dev/dvd and /dev/floppy,which point to the actual device files,provided as a convenience.If you are working on a system that does not automatically mount removable devices,you can use the following technique to determine how the removable device is named when it is attached.First,start a real-time view of the /var/log/messages file(you may require superuser privileges for this):

The last few lines of the file will be displayed and then pause.Next,plug in the removable device.In this example,we will use a 16 MB flash drive.Almost immediately,the kernel will notice the device and probe it:

After the display pauses again,type Ctrl-c to get the prompt back.The interesting parts of the output are the repeated references to "[sdb]" which matches our expectation of a SCSI disk device name.Knowing this,two lines become particularly illuminating(富于启发的):

This tells us the device name is /dev/sdb for the entire device and /dev/sdb1 for the first partition on the device.As we have seen,working with Linux is full of interesting detective work!

Tip:Using the tail -f /var/log/messages technique is a great way to watch what the system is doing in near real-time.

With our device name in hand,we can now mount the flash drive:

The device name will remain the same as long as it remains physically attached to the computer and the computer is not rebooted.

Create new file system

Let's say that we want to reformat the flash drive with a Linux native file system,rather than the FAT32 system it has now.This involves two steps:1.(optional) create a new partition layout if the existing one is not to our likiing,and 2. create a new,empty file system on the drive.

Warning!In the following exercise,we are going to format a flash drive.Use a drive that contains nothing you care about because it will be erased!Again,make absolutely sure you are specifying the correct device name for your system,not the one shown in the text.Failure to heed(注意,留心) this warning could result in you formatting(i.e..,erasing) the wrong drive!

Operation partitions with the fdisk command

The fdisk program allows us to interact(相互作用,互相影响) directly with disk-like devices(such as hard disk drives and flash drives)at a very low level. With this tool we can edit,delete,and create partitions on the device.To work with our flash drive,we must first unmount it (if needed) and then invoke(调用) the fdisk program as follows:

Notice that we must specify the device in terms of the entire device,not by partition number.After the program starts up,we will see the following prompt:

Entering an "m" will display the program menu:

The first thing we want to do is examine the existing partition layout..We do this by entering "p" to print the partition table for the device:

In this example,we see a 16MB device with a single partition (1) that uses 1006 of the available 1008 cylinders(圆筒,圆柱体) on the device.The partition is identified as Windows 95 FAT32 partition.Some programs will use this identifier to limit the kinds of operation that can be done to the disk,but most of the time it is not critical(批评的,爱挑剔的) to change it.However,in the interested of demonstration(表明,证明,示范) ,we will change it to indicate a Linux partition.To do this,we must first find out what ID is used to identify a Linux partition.In the listing above,we see that the ID "b" is used to specify the exiting partition.To see a list of the available partition types,we refer back to the program menu.There we can see the following choice:

If we enter "l" at the prompt,a large list of possible type is displayed.Among them we see "b" for our existing partition type and "83" for Linux.

Going back to the menu,we see this choice to change a partition ID:

We enter "t" at the prompt enter the new ID:

This completes all the changes that we need to make.Up to this point,the device has been untouched(all the changes have benn stored in memory,not on the physical device),so we will write the modified partition table to the device and exit.To do this,we enter "w" prompt:

If we had decided to leave the device unaltered(未改变的),we could have entered "q" at the prompt,which would have exited the program without the changes.We can safely ignore the ominous(预兆的,不吉利的) sounding warning message.

Create a new file system by mkfs command

With our partition editing done (lightweight though it might have been) it's time to create a new file system on our flash drive.To do this,we will use mkfs(short for "make file system"),which can create file systems in a variety of formats.To create an ext3 file system on the device,we use the "-t" option to specify the "ext3" system type,followed by the name of device containing the partition we wish to format:

The program will display a lot of information when ext3 is the chosen file system type.To re-format the device to its original FAT32 file system,specify "vfat" as the file system type:

This process of partitioning and formatting can be used anytime additional storage devices are added to the system.While we worked with a tiny flash drive,the same process can be applied to internal hard disks and other removable storage devices like USB hard drives.

Test and repair file systems

In our earlier discussion of the /etc/fstab file,we saw some mysterious digits at the end of each line.Each time the system boots,it routinely checks the integrity(正直,诚实,完整) of the file systems before mounting them.This is done by the fsck program(short for "file system check").The last number in each fstab entry specifies the order the devices are to be checked.In our example above,we see that the root file system is checked first,followed by the home and boot file systems.Devices with a zero as the last digit are not routinely checked.

In addition to checking the integrity of file systems,fsck can also repair corrupt(腐败的,贪污的) file systems with varying degrees of success,depending on the command of damage.On Unix-like systems,recovered portions of files are placed in the lost+found directory,located in the root of each file system.

To check our flash drive(which should be unmounted first),we could do the following:

In my experience,file system corruption is quite rare unless there is a hardware problem,such as a failing disk drive.On most systems,file system corruption detected at boot time will cause the system to stop and direct you to run fsck before continuing.

What The fsck?

In Unix culture,the word "fsck" is often used in place of a popular word with which it shares three letters.This is especially appropriate(适当的,恰当的),given that you will probably be uttering(以口发出声音,说,讲) the aforementioned(前面提到的,上述的) word if you find yourself  in a situation where you are forced to run fsck.

Formatted floppy disk

For those of us still using computers old enough to be equipped with floppy diskette drives,we can manage those devices,too.Preparing a blank(空白的,空着的) floppy for use is a two step process.First,we perform a low-format on the diskette,then create a file system.To accomplish the formating,we use the fdformat program specifying the name of the floppy device(usually /dev/fdo):

Next,we apply a FAT file system to the diskette with mkfs

Notice that we use the "msdos" file system type to get the older(and smaller) sytle file allocation tables.After a diskette is prepared,it may be mounted like other devices.

Direct data move in/out device

While we usually think of data on our computers as being organized into files,it is also possible to think of the data in "raw"(生的,未加工的)form.If we look at a disk drive,for example,we see that it consists of a large number of "blocks" of data that the operating system sees as directories and files.However,if we could treat a disk drive as simply a large collection of data blocks,we could perform useful tasks,such as cloning devices.

The dd program performs this task. It copies blocks of data from one place to another.It uses a unique syntax(for historical reasons) and is usually used this way:

Let's say we had two USB flash drives of the same size and we wanted to exactly copy the first drive to the second.If we attached both drives to the computer and they are assigned to devices /dev/sdb and /dev/sdc respectively(各自地,各个的),we could copy everything on the first drive to the second drive with the following:

Alternately,if only the first device were attached to the computer,we could copy its contents to an ordinary file for later restoration or copying:

Warning! The dd command is very powerful.Though its name derives(得到,源于) from "data defination," it is sometimes called "destroy disk" because users often mistype either the if or of specifications.Always double check your input and output specifications before pressing enter!

Create CD-ROM image

Writing a recordable CD-ROM(either a CD-R or CD-RW) consists of two steps;first ,constructing an iso image file that is the exact file system image of the CD-ROM and second,writing the image file onto the CD-ROM media.

Create a copy of the CD-ROM image

If we want to make an iso image of an existing CD-ROM,we can use dd to read all the data blocks off the CD-ROM and copy them to a local file.Say we had an Ubuntu CD and we wanted to make an iso file that we could later use to make more copies.After inserting the CD and determing its device name(we'll assume /dev/cdrom),we can make the iso file like so:

This technique works for data DVDs as well,but will not work for audio CDs,as they do not use a file system for storage.For audio CDs,look at the cdrdao command.

Creates an image from the file collection

To create an iso image file containing the contents of a directory,we use the genisoimage program.To do this,we first create a directory containing all the files we wish to include in the image and then execute the genisoimage command to create the image file.For example,if we had created a directory call ~/cd-rom-files and filled it with files for our CD-ROM,we could create an image file named cd-rom.iso with the following command:

The "-R" option adds metadata for the Rock Ridge extensions,which allows the use of long filenames and POSIX style file permissions.Likewise,the "-J" option enables the Joliet extensions,which permit long filenames for Windows.

A Program By Any Other Name...

If you look at on-line tutorials(家庭教师,指导老师的,指导的) for creating and burning optical media like CD-ROMs and DVDs,you will frequently encouter two programs called mkisofs and cdrecord.These programs were part of a popular package called"cdrtools" authored by Jorg Schilling.In the summer of 2006,Mr,Schilling made a license change to a portion of the cdrtools package which,in the opinion of many in the Linux community,created a license incompatibility with the GNU GPL.As a result,a fork of the cdrtools project was started that now includes replacement programs for cdrecord and mkisofs named wodim and genisoimage,respectively.

Write to CD-ROM

After we have an image file,we can burn it onto our optical media.Most of the commands we will discuss below can be applied to both recordable CD-ROM and DVD media.

mount an ISO image directly

There is a trick that we can use to mount an iso image while it is still on our hard disk and treat it as though it was already on optical media. By adding the "-o loop" option to mount(along with the required "-t iso09660" file system type),we can mount the image file as though it were a device and attach it to the file system tree:

In the example above,we created a mount point name /mnt/iso_image and then mounted the image file image.iso at that mount point.After the image is mounted,it can be treated just as though it were a real CD-ROM or DVD.Remember to unmount the image when it is no longer needed.

Clear a rewritable CD-ROM

Rewritable CD-RW media needs to be erased or blanked before it can be reused.To do this,we can use wodim,specifying the device name for the CD writer and the type of blanking to be performed.The wodim program offers several types.The most minial(and fastest) is the "fast" type:

Write to image

To write an image,we again use wodim,specifying the name of the optical media writer device and the name of the image file:

In addition to the device name and image file,wodim supports a very large set of options.Two common ones are "-v" for verbose output,and "-dao"which writes the disk in disk-at-once mode.This mode should be used if you are preparing a disk for commercial(商业的,商务的) reproduction(繁殖,复制).The default mode for wodim is track-at-once,which is useful for recording music tracks.

Extended reading

We have just touched on the many ways that the command line can be used to manage storage media.Take a look at the man pages of the commands we have covered.Some of them support huge numbers of options and operations.Also,look for on-line tutorials for adding hard drives to your Linux system(there are many)and working with optical media.

Friendship tips

It's often useful to verify(核实,查证) the integrity(正直,诚实) of an iso image that we have downloaded.In most cases,a distributor of an iso image will also supply a checksum file.A checksum is the result of an exotic(从国外引进的,奇异的,吸引人的) mathematical calculation resulting in a number that represents the content of the target file.If the contents of the file change by even one bit,the resulting checksum will be much different.The most common method of checksum generation(同时代的人,一代人,产生,发生) uses the md5sum program.When you use md5sum,it produces a unique hexadecimal(十六进制) number:

After you download an image,you should run md5sum against it and compare the results with the md5sum value supplied by the publisher.

In addition to checking the integrity of a download file,we can use md5sum to verify newly written optical media.To do this,we first calculate the checksum of the image file and then calculate a checksum for the media.The trick to verifying the media is to limit the calculation to only the portion of the optical media that contains the image.We do this by determining the number of 2048 byte blocks the images contains(optical media is always written in 2048 byte blocks) and reading that many blocks from the media.On some type of media,this is not required.A CD-R written in disk-at-once mode can be checked this way:

Many types of media,such as DVDs require a precise(精确的) calculation of the number of blocks.In the example below,we check the integrity of the image file dvd-image.iso and the disk in the DVD reader /dev/dvd. Can you figure out how this works?

转载于:https://www.cnblogs.com/itmeatball/p/7606350.html

Storage medium相关推荐

  1. 提高汽车系统的安全性

    提高汽车系统的安全性 Enhancing security in automotive systems 2015年,奥迪公司.宝马集团和戴姆勒公司共出资28亿欧元收购诺基亚吉泰公司.导航系统在自主驾驶 ...

  2. 时隔16年,Science再次发布“全世界最前沿的125个科学问题”!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 <科学>杂志曾于创刊125周年之际发布过125个推动基础 ...

  3. signature=c4f11bb5142d9f6ce0876b3cc0d888af,PROVISIONAL SIGNATURE SCHEMES

    PRIORITY This is a divisional of application Ser. No. 11/215,550, filed on Aug. 29, 2005, entitled & ...

  4. 数据格式、类型系统与展示

    数据格式.类型系统与展示 UI使用的系统的原生格式: 组合控件使用的是结构体类型的数据: 传输格式使用的是平台无关格式: 多媒体使用的是平台无关的通用格式. 存储格式是平台无关的通用格式. https ...

  5. 《ASP.NET Web 站点高级编程》勘误 Part 3

    <ASP.NET Web 站点高级编程>勘误 Part 3 P201(-2)...一个以两个新闻ID作为输入, 建议:...一个以新闻ID作为输入, 原文:one with no para ...

  6. XML 序列化 【译】

    原文连接:http://www.diranieh.com/NETSerialization/XMLSerialization.htm 总结: 介绍 XML 序列化示例 XML Schema 定义文档 ...

  7. 《现代操作系统》(第4版)文件系统 课后习题解答

    写在前面: 本文为学习<现代操作系统>(第4版)的记录,如有错误,请指正交流. 文章目录 上半部分 1-22题 下半部分 23~42题 编程题部分(略) 上半部分 1-22题 解答 You ...

  8. 什么是raid 容错式磁盘阵列?

    利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或资料冗余,或是两者同时提升. RAID (/reɪd/; "Redundant Array of Inexpe ...

  9. Android开发7:简单的数据存储(使用SharedPreferences)和文件操作

    前言 啦啦啦~大家好,又见面啦~ 本篇博文讲和大家一起完成一个需要注册.登录的备忘录的,一起学习 SharedPreferences 的基本使用,学习 Android 中常见的文件操作方法,复习 An ...

最新文章

  1. win10 VMware15 安装 CentOS6.4 64位(慢慢弄吧,别急)
  2. 为提高访问速度建立本地文件服务器,html5 Application Cache——加快简历二次访问速度...
  3. docker笔记1_安装及常用命令
  4. 威学一百_精彩回顾深圳威学一百低龄校区圣诞活动精彩回顾!
  5. validation注解及自定义注解
  6. 无法将该对象添加到ldap服务器_LDAP 基础知识
  7. C++11 thread使用
  8. java8获取路径_创建和读取目录
  9. 今天实现了一个功能就是,树结点的拖动
  10. js和php难度,有js基础和简单的php基础,但是学习nodejs还是很吃力
  11. 从零开始学习makefile(7) makefile的filter的作用
  12. Nero8刻录引导系统光盘镜像图文教程
  13. 常用合同范本大全|全部是合同,多学学吧。以后少吃亏。
  14. CC2530串口中断接收字符并且判断
  15. 小米平板1刷LineageOS16
  16. [视频教程]macOS运行MAME
  17. sqli-labs(42-45)
  18. 从一篇防范钓鱼邮件的通知说起
  19. 遥感图像计算机自动分类原理,第30讲:8.1遥感图像自动识别分类
  20. 程序员如何提升自己的代码质量?

热门文章

  1. PHP的echo和print小谈
  2. RDCL报表的两种使用方法/为DataSet添加两个Table_AX
  3. 用于构建集成式桌面应用程序的新指南和新工具(转载于MSDN)
  4. C# 不能从数据库更新实体
  5. python操作文件的笔记
  6. 【转】利用WCF的双工通信
  7. 关于在SVG中如何实现gif动画的问题?
  8. Docker安全之用户资源隔离
  9. nginx 多站点配置方法集合
  10. VS2010 LNK1123:转换到 COFF期间失败:文件无效或损坏”的解决方法