玩转 Linux 之:磁盘分区、挂载知多少?

转载于:http://my.oschina.net/leejun2005/blog/290073

 

在做日志机扩容的时候,发现运维同学将一块硬盘的挂载点没有同以前的日志机保持一致,考虑到这会给日后的维护带来麻烦,于是尝试着手修改,在修改的同时,review 了下之前日志机的挂载配置,发现居然存在随时掉坑的可能。。。至于什么坑,我会在文末说明。

so,感觉这事儿虽然简单,也许一条命令就搞定的事情,但是,很多童鞋可能不明就里,纯复制粘贴网上的命令,这很容易给人挖坑埋雷,今天就来聊聊 linux 下磁盘分区、挂载的问题,篇幅所限,不会聊的太底层,纯当科普吧~

1、Linux 分区简介

1.1 主分区 vs 扩展分区

硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extended partition),主分区可以马上被使用但不能再分区,扩展分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩展分区再分下去的是什么呢?它就是逻辑分区(Logical Partion),逻辑分区没有数量上限制。

1.2 驱动器标示的含义

对习惯于使用Dos或Windows的同学来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。然而对Red Hat Linux新手来说,可就有点恼人了。因为对Linux用户来说无论有几个分区,都得分给目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。Red Hat Linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“挂载点”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区就在linux的存储空间的某个目录下获得。
下面我们先来看看Red Hat Linux的驱动器是如何标识的。 对于IDE硬盘,驱动器标识符为“hdx1”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“1”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。对于SCSI硬盘则标识为“sdx1”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样,不再赘述。
我们从上面可以看到,Red Hat Linux的分区是不同于其它操作系统分区的,它的分区格式常用的有Ext3和Swap两种,Ext3用于存放系统文件,Swap则作为Red Hat Linux的交换分区(相当于windows中的虚拟内存文件)。那么现在我们就可以知道Red Hat Linux至少需要两个专门的分区(Linux Native(本地)和Linux Swap(交换))。由于不能将Red Hat Linux安装在Dos/Windows分区。一般来说我们将Red Hat Linux安装一个或多个类型为“Linux Native”的硬盘分区,但是在Red Hat Linux的每一个分区都必须要指定一个“Mount Point”(挂载点),告诉Red Hat Linux在启动时,这个目录要给哪个分区使用。对“Swap”分区来说, 一般也定义一个,且它不必要定义载入点。
下面我们先对“Linux Native”和“Linux Swap”有个初步的了解。

  • SWAP分区是LINUX暂时存储数据的交换分区,它主要是把主内存上暂时不用得数据存起来,在需要的时候再调进内存内,且作为SWAP使用的分区不用指定“Mout Point”(载入点),既然它作为交换分区,我们理所当然应给它指定大小,它至少要等于系统上实际内存的量,一般来说它的大小是内存的一至两倍。另外你也可以创建和使用一个以上的交换分区,最多16个。

  • Linux Native是存放系统文件的地方,一般用EXT3的分区类型,对Red Hat Linux来说,有了较大的选择余地,可以把系统文件分几个区来装(必须要说明挂载点),也可以就装在同一个分区中(挂载点是“/”)。

1.3 为什么要自定义多个分区?

分多个区有以下几个目的:

  • 在不损失数据的情况下重装系统,比如独立设置/home挂载点,重装系统的时候直接标记回/home,数据不会有任何损失。

  • 针对不同挂载点的特性分配合适的文件系统以合理发挥性能,比如对/var使用reiserfs,对/home使用xfs,对/使用ext4。

  • 针对不同的挂载点开启不同的挂载选项,如是否需要即时同步,是否开启日志,是否启用压缩。

  • 大硬盘搜索范围大,效率低

  • 磁盘配额只能对分区做设定

  • /home、/var、/usr/local 经常是单独分区,因为经常会操作,容易产生碎片

2、挂载点目录简介

2.1 常见的挂载目录结构

每块硬盘都分为若干个分区,每个分区都有自己的文件系统。Windows为这些文件系统各自指定了一个字母。不过 GNU/Linux 使用唯一的树形结构来管理文件,而每个文件系统都挂载于树形结构的某个位置。
正如 Windows 需要有 C: 驱动器一样,GNU/Linux 必须能够将根文件系统挂载于文件树的根(/)上。当根挂载完成之后,您就可以将其它文件系统挂载于树形结构各种挂载点上。根结构下的任何目录都可以作为挂载点,而您也可以将同一文件系统同时挂载于不同的挂载点上。
挂载点实际上就是linux中的磁盘文件系统的入口目录
Linux文件系统结构.jpg

2.2 常见的挂载目录说明

目录 内容

/   根目录,存放系统命令和用户数据等(如果下面挂载点没有单独的分区,它们都将在根目录的分区中)  
/boot boot loader 的静态链接文件,存放与Linux启动相关的程序
/home 用户目录,存放普通用户的数据
/tmp 临时文件
/usr 是Red Hat Linux系统存放软件的地方,如有可能应将最大空间分给它
/usr/local 自已安装程序安装在此
/var 不断变化的数据,服务器的一些服务、日志放在下面。
/opt (Option可选的)附加的应用程序软件包 

/bin 基本命令执行文件 
/dev 设备文件 
/etc 主机特定的系统配置 
/lib 基本共享库以及内核模块 
/media 用于移动介质的挂载点 
/mnt 用于临时挂载文件系统或者别的硬件设备(如光驱、软驱) 
/proc 系统信息的虚拟目录(2.4 和 2.6 内核),这些信息是在内存中,由系统自己产生的。 
/root root 用户的目录 
/sbin 基本系统命令执行文件 
/sys 系统信息的虚拟目录(2.6 内核) 
/srv 系统提供的用于 service 的数据
/usr/X1186 X-Windows目录,存放一些X-Windows的配置文件
/usr/include 系统头文件,存储一些C语言的头文件
/usr/src Linux内核源代码,Linux系统所安装的内核源代码都保存在此
/usr/bin 对/bin目录的一些补充
/usr/sbin 对/sbin目录的一些补充
/lost+found 这个目录在大多数情况下都是空的。但是如果你正在工作突然停电,或是没有用正常方式关机,在你重新启动机器的时候,有些文件就会找不到应该存放的地方,对于这些文件,系统将他们放在这个目录下。
/boot: 必须总是物理地包含 /etc、/bin、/sbin、/lib 和 /dev,否则您将不能启动系统。
/home:每个用户将放置他的私有数据到这个目录的子目录下。
/tmp: 程序创建的临时数据大都存到这个目录。
/usr:包含所有的用户程序(/usr/bin),库文件(/usr/lib),文档(/usr/share/doc),等等。
/var:所有的可变数据,如新闻组文章、电子邮件、网站、数据库、软件包系统的缓存等等,将被放入这个目录。这个目录的大小取决于您计算机的用途,但是对大多数人来说,将主要用于软件包系统的管理工具。如果做服务器的话空间应尽量大。我的服务器的实际分法及实际使用的大小,还没有实际投入使用。所以/var目录没有用那么多。一般WEB存放网页的目录是/var/www,postfix邮件的存放邮件的目录是:/var/mail,var/log,是系统日志记录分区, /var/spool:存放一些邮件、新闻、打印队列等。
/opt:存放可选的安装的软件。

上面介绍了几个挂载点,一般来说我们最少需要两个分区(当然只要一个 / 分区也可以),需要一个SWAP分区,和一个“/”分区,但把一些常用、重要的挂载点分到其它分区,这样便于管理。一般一个/分区,一个/usr分区,一个/home 分区,一个/var/log分区。当然这没有什么规定,完全是依照需要来定的。我们可以使用Red Hat Linux提供的硬盘管理工具Disk Druid来完成分区和挂载点设置。

对照上图和目录简介,可以把Linux系统的挂载点想象成一棵大树
/ 为大树的树根
/ 衍生的其他挂载点为这颗大树的树枝
挂载点下的文件为树叶

2.3 为什么 linux 的分区需要有挂载这个动作呢?

如果你看过我之前写的 Linux 系列文章,那么应该记得我曾经标红过一句话:linux 下一切皆文件!换言之就是linux操作系统将系统中的一切都作为文件来管理。在windows中我们常见的硬件设备(打印机、网卡、声卡...)、磁盘分区等,在linux中统统都被视作文件,对设备、分区的访问就是读写对应的文件。

3、实战分区挂载

3.1 临时挂载

举个栗子,原来分区情况如下:

?
1
2
<code class="hljs erlang">[root@sg-sl-data]# df -h
Filesystem            Size  Used Avail Use<span class="hljs-comment">% Mounted on</span>/dev/sda2              <span class="hljs-number">20</span>G  <span class="hljs-number">5.6</span>G   <span class="hljs-number">13</span>G  <span class="hljs-number">31</span><span class="hljs-comment">% /</span>/dev/sda6             <span class="hljs-number">996</span>M   <span class="hljs-number">35</span>M  <span class="hljs-number">910</span>M   <span class="hljs-number">4</span><span class="hljs-comment">% /data</span>/dev/sda5             <span class="hljs-number">426</span>G  <span class="hljs-number">199</span>M  <span class="hljs-number">404</span>G   <span class="hljs-number">1</span><span class="hljs-comment">% /disk1</span>/dev/sda1             <span class="hljs-number">996</span>M   <span class="hljs-number">46</span>M  <span class="hljs-number">899</span>M   <span class="hljs-number">5</span><span class="hljs-comment">% /boot</span>tmpfs                 <span class="hljs-number">7.9</span>G     <span class="hljs-number">0</span>  <span class="hljs-number">7.9</span>G   <span class="hljs-number">0</span><span class="hljs-comment">% /dev/shm</span></code>

3.1.1 先卸载分区:

umount /disk1
umount /data

3.1.2 再重新挂起来:

mount /dev/sda5 /data
mount /dev/sda6 /disk1
注意:如前所述,不能2个分区同时挂载到/data

3.2 永久挂载:开机自动挂载

上面步骤中的方法只是临时工干的活儿,开机后磁盘分区会不可见或者还是挂载之前的模样,要想永久生效,还需要修改/etc/fstab,

LABEL=/data /data ext3 defaults 1 2
LABEL=/disk1 /disk1 ext3 defaults 1 2
修改为:
/dev/sda5 /data ext3 defaults 1 2
/dev/sda6 /disk1 ext3 defaults 1 2

说明:fstab 是文件系统分配表的配置文件,该文件有着严格的语法格式限制,类似 crontab 一样,保存时也会对你的输入格式进行校验,请慎重使用,否则会有意想不到的问题发生。其一共有 6 个字段,空格分隔,具体每个字段的含义请参考这里,不再赘述:http://diamonder.blog.51cto.com/159220/282542

3.3 以下是添加硬盘&分区&挂载(高危操作,新手慎用!)

友情提示:分区操作是高危操作,尤其是新手同学请勿在生产环境随意尝试,否则后果自负!

更为详细的分区教程请参见:

linux磁盘分区fdisk命令详解 http://linux008.blog.51cto.com/2837805/548711

?
1
2
3
4
5
6
7
8
9
10
<code class="hljs groovy">fdisk <span class="hljs-regexp">/dev/</span>sdb
  
输入m---n---p--<span class="hljs-number">-1</span>--回车---回车---p---w
  
mkfs.ext3 <span class="hljs-regexp">/dev/</span>sdb1
  
mkdir /disk2
  
mount <span class="hljs-regexp">/dev/</span>sdb1 <span class="hljs-regexp">/disk2/</span>
 在<span class="hljs-regexp">/etc/</span>fstab中添加:<span class="hljs-regexp">/dev/</span>sdb1            /disk2                  ext3    defaults        <span class="hljs-number">1</span> <span class="hljs-number">2</span></code>

4、通过 fstab 设置开机挂载的坑

fstab 文件大家都很熟悉,Linux 在启动的时候通过 fstab 中的信息挂载各个分区,一个典型的分区条目就像这样:

/dev/sdb4 /mnt/usb vfat utf8,umask=0 0 0

/dev/sda4 为需要挂载的分区,sda4 是 Linux 检测硬盘时按顺序给分区的命名,一般来讲,这个名称并不会变化,但是如果你有多块硬盘,硬盘在电脑中的顺序变化的时候,相同的名称可能代表着不同的硬盘分区,如果你是从 USB 设备启动,与其他 USB 设备的插入顺序也会导致分区识别的困难。

因此上面 3.2 小节中的配置直接写 /dev/sda6 是有很大的隐患的,重启后硬盘的顺序可能发生变化,比如 你把 nginx 的用户日志放在一个单独的分区上,那么重启后虽然设置了 fstab,但是由于顺序变了相同的分区号可能代表不同的硬盘分区了,这样就会导致某些分区上的数据服务不可用了。

(PS:文章开头说过在 review 以前同学的挂载配置的时候发现了埋下的一个雷,正是上面的问题。)

这个时候 UUID 就派上用场了,UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。

在 fstab 中用 UUID 挂载分区,看起来向这样:
UUID=1234-5678 /mnt/usb vfat utf8,umask=0 0 0
在 UUID= 后面填入分区相应的 UUID 值,就可以正确挂载分区了。
那么,我们如何知道一个分区的 UUID 呢?
有 3 种方法:

4.1 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息

# ls -l /dev/disk/by-uuid/
------
lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> ../../sdb5
lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -> ../../sda4
..... 

4.2 通过 vol_id 命令

# vol_id /dev/sdb5
ID_FS_USAGE=filesystem
ID_FS_TYPE=vfat
ID_FS_VERSION=FAT32
ID_FS_UUID=0909-090B
ID_FS_UUID_ENC=0909-090B
ID_FS_LABEL=SWAP
ID_FS_LABEL_ENC=SWAP
ID_FS_LABEL_SAFE=SWAP

4.3 通过 blkid 命令

# blkid /dev/sdb5
/dev/sdb5: LABEL="SWAP" UUID="0909-090B" TYPE="vfat"
通过这三种方法都可以获得分区的 UUID,UUID 依据分区不同,长度和格式都不相同。

比如我最后把 /dev/sdb 挂载在了 /data1 目录下(不放心的话重启或者生成文件测试下,看挂载分区的空间被占用没):

?
1
2
3
4
5
6
7
8
<code class="hljs tcl">文件系统       类型   容量  已用  可用 已用% 挂载点
/dev/sda3      ext4   <span class="hljs-number">518</span>G  <span class="hljs-number">2.7</span>G  <span class="hljs-number">489</span>G    <span class="hljs-number">1</span>% /
tmpfs          tmpfs   <span class="hljs-number">16</span>G     <span class="hljs-number">0</span>   <span class="hljs-number">16</span>G    <span class="hljs-number">0</span>% /dev/shm
/dev/sda1      ext4  <span class="hljs-number">1008</span>M   <span class="hljs-number">61</span>M  <span class="hljs-number">896</span>M    <span class="hljs-number">7</span>% /boot
/dev/sdb       ext4   <span class="hljs-number">1.8</span>T  <span class="hljs-number">1.1</span>G  <span class="hljs-number">1.7</span>T    <span class="hljs-number">1</span>% /data1
grep -v <span class="hljs-string">'#'</span/etc/fstab |column -t
UUID=<span class="hljs-number">0</span>c685e8b-dbb3<span class="hljs-number">-4</span>a1c-a106<span class="hljs-number">-3</span>f1716ab34dd  /         ext4    defaults,noatime              <span class="hljs-number">1</span>  <span class="hljs-number">1</span>UUID=<span class="hljs-number">2</span>d7f1bcf<span class="hljs-number">-06</span>d1<span class="hljs-number">-486e-87</span>df<span class="hljs-number">-404</span>ba670fcd9  /boot     ext4    defaults,noatime              <span class="hljs-number">1</span>  <span class="hljs-number">2</span>UUID=<span class="hljs-number">248e7</span>a99-b459<span class="hljs-number">-4800</span>-bbd3<span class="hljs-number">-354047e49</span>a2f  swap      swap    defaults,noatime              <span class="hljs-number">0</span>  <span class="hljs-number">0</span>tmpfs                                      /dev/shm  tmpfs   defaults,nosuid,noexec,nodev  <span class="hljs-number">0</span>  <span class="hljs-number">0</span>devpts                                     /dev/pts  devpts  gid=<span class="hljs-number">5</span>,mode=<span class="hljs-number">620</span>                <span class="hljs-number">0</span>  <span class="hljs-number">0</span>sysfs                                      /sys      sysfs   defaults                      <span class="hljs-number">0</span>  <span class="hljs-number">0</span><span class="hljs-keyword">proc</span>                                       /<span class="hljs-keyword">proc</span><span class="hljs-title">     proc</span> <span class="hljs-title">   defaults</span>                      0  0<span class="hljs-title">UUID=870ebaf6-727f-48d3-b60c-f203339d94ac</span>  /data1<span class="hljs-title">    ext4</span> <span class="hljs-title">   defaults,noatime</span>              0  0</code>

5、FAQ:

  • 挂载点必须是一个目录。

  • 一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文件系统的挂载也是这样,卸载后,目录以前的文件都还在,不会有任何丢失。

  • 目录只占磁盘里的一个inode,存放文件属性等信息。

  • 任何一个分区都必须挂载到某个目录上。

  • 目录是逻辑上的区分。分区是物理上的区分。

  • 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。

  • 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。

  • 一个分区可以挂在多个目录,但反过来一个目录只能是一个分区的挂载点。

6、refer:

[1] Linux入门笔记之一:系统分区及挂载点 http://newthink.blog.51cto.com/872263/223795/

[2] 挂载点 http://wiki.linuxdeepin.com/index.php?title=%E6%8C%82%E8%BD%BD%E7%82%B9

[3] 什么叫“挂载”,“挂载点”?linux文件系统中的概念 http://bbs.csdn.net/topics/380197703

[4] Linux文件系统简介 http://alicsd.iteye.com/blog/816268

[5] 第八章、Linux 磁盘与文件系统管理 http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php

[6] /etc/fstab 详解 http://diamonder.blog.51cto.com/159220/282542 http://dikar.iteye.com/blog/361659

[7] 如何在CentOS下使用fdisk添加新硬盘 http://343308530.blog.51cto.com/7202597/1251558

[8] 多硬盘分区管理fdisk http://blog.fens.me/linux-fdisk/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# NanoFramework 点灯和按键 之 ESP32

本来周末是要搞个大的&#xff0c;WIFI 和 Web网页之类的&#xff0c;奈何搞了两天&#xff0c;并与外国友人聊过后&#xff0c;才发现是固件有问题&#xff0c;晚上与大佬进行交流后才发现&#xff0c;原来ESP32S的官方固件有问题&#xff0c;搞不了。所以&#xff0c;建议买的…

【ArcGIS Pro微课1000例】0002:ArcGIS Pro 2.5二三维联动显示

ArcGIS Pro是一款全新的桌面应用程序,它改变了桌面GIS的工作方式,以满足新一代WebGIS应用模式。ArcGIS Pro采用Ribbon界面风格,给人全新的用户体验。它作为一个高级的应用程序,可以对来自本地、ArcGIS Online、或者Portal for ArcGIS的数据进行可视化、编辑、分析。同时,实…

Spring Boot 解决跨域Cors问题

后端主要代码&#xff1a; &#xff08;http://localhost:8080/ &#xff09; /*WebCorsConfig.java*/ package com.example.demo.Controller;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsR…

C语言试题147之创建一个链表并且排序输出这个链表

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:创建一个链表并且排序输出这…

DOM节点创建(jQuery)

1DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点&#xff0c;从而进行一系列的DOM操作。但实际上一般开发者都习惯性的先定义好HTML结构&#xff0c;但这样就非常不灵活了。 试想下这样的情况&#xff1a;如果我们通过AJAX获取到数据之后然后才能确定结构的话&a…

PHP中刷新输出缓冲

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/mutuan/archive/2012/03/18/2404957.html 转载于:https://my.oschina.net/wuzhencan/blog/652259

2021最新计算机二级C语言试题

一、选择题 (1) 下面叙述正确的是( C ) A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)的条数 C. 算法的有穷性是指算法必须能在执行有限个步骤之后终止 D. 以上三种描述都不对 (2) 以下数据结构中不属于线性数据结构的是( C ) A…

[webpack3.8.1]Guides-4-Output Management(输出管理)

Output Management This guide extends on code examples found in the Asset Management guide.这个指南将在上一个指南的基础上对示例代码进行扩展。 So far weve manually included all our assets in our index.html file, but as your application grows and once you sta…

有条件地 [JsonIgnore]

前言通常&#xff0c;在进行 JSON 序列化或反序列化时&#xff0c;如果要忽略某个属性&#xff0c;我们会使用 [JsonIgnore] 特性&#xff1a;public class User {public int Id { get; set; }[JsonIgnore]public string Name { get; set; } }var user new User { Id 1, Name…

C语言试题145之创建一个链表

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:创建一个链表 2 、温馨提示 …

[转]IntelliJ IDEA 2019.3正式发布,给我们带来哪些新特性?

每篇一句 工欲善其事必先利其器 ——《论语卫灵公》 前言 千呼万唤始出来。自从JetBrains在今年7月24日发布了IDEA 2019.2版本后&#xff0c;从9月份开始我便一直在关注此版本正式版的发布。JetBrains公司在9月中旬就对外公布了下一个主要版本 2019.3的Roadmap&#xff0c;而且…

Git中的日常使用 码云

http://git.mydoc.io/?t83143转载于:https://www.cnblogs.com/yangyuqiu/p/6164822.html

【谭浩强版】C语言程序设计(第三版)课后习题完整答案附源码--高等教育出版社

文章目录 第一章 语言程序设计的概念第二章 基本数据类型第三章 C语言程序的流程控制第四章 模块化程序设计第五章 数组第六章 指针第一章 语言程序设计的概念 1.1 请编写一个程序, 显示以下两行文字。 #include <stdio.h> main() {printf("I am a student.\n&qu…

php判断是否为json格式的方法

http://www.poluoluo.com/jzxy/201403/265005.html 首先要记住json_encode返回的是字符串, 而json_decode返回的是对象 判断数据不是JSON格式: .代码如下:function is_not_json($str){ return is_null(json_decode($str));}判断数据是合法的json数据: (PHP版本大于5.3) .代码如…

FineReport中以jws方式调用WebService数据源方案

在使用WebService作为项目的数据源时&#xff0c;希望报表中也是直接调用这个WebService数据源&#xff0c;而不是定义数据连接调用对应的数据库表&#xff0c;这样要怎么实现呢&#xff1f; 在程序中访问WebService应用服务&#xff0c;将WebService返回的数据转为程序数据集&…

C语言试题148之海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:海滩上有一堆桃子,五只猴子…

一文读懂什么是CTO、技术VP、技术总监、首席架构师

究竟什么是CTO&#xff0c;一个公司真的需要CTO么&#xff1f;哪些公司的职位对于技术管理者来讲真的是CTO的职位&#xff1f;同样是技术最高负责人&#xff0c;为什么有人叫CTO、有人叫技术总监、技术VP&#xff0c;有人叫首席架构师&#xff1f;他们之间的差别是什么&#xf…

与MySQL传统复制相比,GTID有哪些独特的复制姿势?

与MySQL传统复制相比&#xff0c;GTID有哪些独特的复制姿势? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陈华军&#xff0c;苏宁云商IT总部资深技术经理&#xff0c;从事数据库服务相关的开发和维护工作&#xff0c;之前曾长期从事富士通关系数据库的开发&#xff0c…

【ArcGIS Pro微课1000例】0007:ArcGIS Pro 2.5质量检查:拓扑创建与编辑案例教程

文章目录 1. 加载矢量数据2. 创建数据库、要素数据集3. 拓扑创建4. 拓扑错误编辑与修改1. 加载矢量数据 矢量数据可以是单独shp格式的文件数据,也可是存在于数据库中的要素类。 2. 创建数据库、要素数据集 创建数据库 无论是在ArcMap,还是ArcGIS Pro中,创建拓扑都需要在…

C语言试题149之809乘以??=800乘以??+9乘以??+1 其中??代表的两位数,8乘以??的结果为两位数,9乘以??的结果为 3 位数。求??代表 的两位数,及 809乘以??后的结果

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:809*??=800*??+9*??+1…