实验目的
- 安装
Red Hat Linux
。 - 熟悉
Linux
目录结构以及目录功能简介。 - 熟悉
Linux
系统的基本操作。 Vi
的熟悉与使用。- 安装并使用
Linux
的编译器GCC
,编写一个能通过编译且运行成功的小程序。
步骤
VMware workstation
安装Red Hat Linux
打开
VMware workstation
,一次选择“文件→新建虚拟机→自定义安装→下一步”,选择稍后安装操作系统,点击下一步;选择客户机操作系统为
Linux
,版本为Red Hat Enterprise 6 64位
;命名虚拟机为:
Red Hat Enterprise 6 64位
,设置虚拟机路径点击下一步;配置处理器数量为1,每个处理器的内核内核数量为1,点击下一步;
设置虚拟机内存为
2GB
,点击下一步;设置网络类型为
NAT
模式,点击下一步;选择I/O控制器类型为
LSI Logic
,磁盘类型为SCSI
,点击下一步;选择创建新的虚拟磁盘,磁盘大小为
20GB
,将磁盘拆分成多个文件,点击下一步;命名指定磁盘文件,点击下一步;
点击自定义硬件,添加虚拟机ISO镜像路径,设备状态设置为已连接,否则无法检测到镜像,然后点击安装完成;
打开虚拟机,
Install or upgrade an existing system
进入图形安装界面;开始测试硬盘,选择OK;
测试完成后进入安装界面,开始安装;
选择语言为中文简体;
选择安装键盘为美国英语式;
选择安装将使用基本存储设备;
提示存储设备警告,选择忽略所有数据;
明明计算机为
localhost.leeyuxun
,网络设置选择有线system the0;
时区设置为上海;
设置跟用户密码;
安装种类选择创建自定义布局;
创建一个
200M
的ext4
分区,挂载到/boot
下,依次点击创建→标准分区→创建,挂载点选择/boot
;用上述方法创建一个
swap
分区,不设置挂载点,大小为内存的2倍即4GB,再创建一个ext4
分区,挂载到/目录下,选择“使用全部可用空间”;然后选择格式化→将修改写入磁盘,点击下一步;
基本服务器安装软件组选择桌面,存储库选择自定义;
左侧选择桌面,右侧全部选择;
左侧选择开发,右侧选择桌面平台开发和开发工具;
语言支持选择世界语和中文;
点击下一步开始安装软件包;
安装完成后选择重新引导;
同意许可证信息;
设置用户米、全名、密码,创建用户;
设置日期和时间;
设置
Kdump
内存为128M
;重启后进入桌面,显示如下,安装完成;
熟悉Linux
目录结构以及目录功能简介
安装
tree
,在打开终端,顶级目录下输入tree -L 1
,输出一级目录如下,包括文件夹有:bin
、boot
、dev
、etc
、home
、lib
、lost+found
、media
、misc
、mnt
、opt
、proc
、root
、sbin
、selinux
、srv
、sys
、tmp
、usr
、var
等;分析每个文件夹功能:
/bin
文件内容如下,用于存放使用者最经常使用的命令,如:cat
、ls
、vi
等/boot
文件内容如下,这里存放的是启动Linux
时使用的一些核心文件,包括一些连接文件以及镜像文件;/dev
文件内容如下,dev
是**Device(设备)**的缩写,该目录下存放的是Linux
的外部设备,在Linux
中访问设备的方式和访问文件的方式是相同的;/etc
文件内容如下,这个目录用来存放所有的系统管理所需要的配置文件和子目录;/home
文件内容如下,是用户的主目录,在Linux
中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,前面提到该机器用户的用户名为levi
;/lib
文件内容如下,这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows
里的DLL
文件。几乎所有的应用程序都需要用到这些共享库。/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件;/media
Linux
系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux
会把识别的设备挂载到这个目录下;/misc
该目录自动挂载服务目录,对应autofs
服务;/mnt
目录内容如下,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt
上,然后进入该目录就可以查看光驱里的内容了。/opt
文件内容如下,这是给主机额外安装软件所摆放的目录。比如安装一个ORACLE
数据库则就可以放到这个目录下,默认是空的;/proc
这个目录的内容不在硬盘上而是在内存里,可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping
命令,使别人无法ping
该机器;1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root
文件目录如下,该目录为系统管理员,也称作超级权限者的用户主目录;/sbin
文件目录如下,s
就是Super User
的意思,这里存放的是系统管理员使用的系统管理程序;/selinux
文件目录如下,这个目录是Redhat/CentOS
所特有的目录,Selinux
是一个安全机制,类似于windows
的防火墙,但是这套机制比较复杂,这个目录就是存放selinux
相关的文件的;
/srv
该目录存放一些服务启动之后需要提取的数据;/sys
文件目录如下,这是linux2.6
内核的一个很大的变化,该目录下安装了2.6
内核中新出现的一个文件系统sysfs
,sysfs
文件系统集成了下面3种文件系统的信息:针对进程信息的proc
文件系统、针对设备的devfs
文件系统以及针对伪终端的devpts
文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建;
/tmp
这个目录是用来存放一些临时文件的;/usr
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows
下的program files
目录;
/usr/bin
该目录下存放着许多系统用户使用的应用程序/usr/include
改目录下存放LINUX下开发和编译应用程序需要的头文件/usr/lib
改目录下存放一些常用的动态链接共享库和静态档案库;/usr/local
提供给一般用户的/usr目录,在这安装软件最适合;/usr/man
该目录是帮助文档目录;/usr/sbin
改目录存放超级用户使用的比较高级的管理程序和系统守护程序;/usr/share
该目录包含/usr
中的应用程序需要的所有只读、与硬件架构无关的数据,其中包括时区和地区信息(zoneinfo
和locale
);/usr/src
这是内核源代码默认的放置目录;
/var
文件目录如下,这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log
目录下,另外mail的预设放置也是在这里;
熟悉Linux
系统的基本操作
Linux
挂载
通过mount命令查看已挂载的文件系统,会输出丰富的信息,如下图所示
mount [-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点
各选项的含义:
- -t 系统类型:指定欲挂载的文件系统类型。Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测;
-L 卷标名:除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载;
- -n:在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单人维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项;
- -o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步/异步等,如果不指定,则使用默认值(defaults);
命令尝试:
使用命令mount -t iso9660 /dev/cdrom /mnt/cdrom
将/dev/cdrom
下的iso9660
文件挂载到/mnt/cdrom
文件目录下;
Linux
系统的启动与退出
- shutdown [-t seconds] [-rkhncfF] time [message]
参数说明:- -t seconds,设定在几秒钟之后进行关机程序。
- -k,并不会真的关机,只是将警告讯息传送给所有使用者。
- -r,关机后重新开机。
- -h,关机后停机。
- -n,采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
- -c,取消目前已经进行中的关机动作。
- -f,关机时,不做 fcsk 动作(检查 Linux 档系统)。
- -F,关机时,强迫进行 fsck 动作。
- time,设定关机的时间。
- message,传送给所有使用者的警告讯息。
- 命令尝试:
- Shutdown now //立刻关机
- shutdown +5 “System will shutdown after 5 minutes” // 系统提示五分钟后关机,每分钟提醒一次
- shutdown –r now //立即重启
- shutdown –r 23:59 //23:59重启
- shutdown –h now //将系统的服务停掉之后立即关机
- shutdown -k now ‘this system will reboot’ //立刻发送警告信息
Linux系统对文件和目录的操作命令
ls命令
**ls [**选项] [目录或文件]
显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)
选项包括:
-a
,显示所有的文件,包括隐藏文件(以.开头的文件);-A
,同-a
,但不列出 “.” (目前目录) 及 “..” (父目录);-c
,和-lt
一起使用,显示列表并且以ctime
(文件状态最后改变时间)排序。和-l
一起使用:显示ctime
并且以文件名排序。其他情况,以ctime
排序;-d
,仅列出目录本身,而不是列出目录里的内容列表;-f
,直接列出结果,而不进行排序(ls
默认会以文件名排序);-F
在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/“;-g
,列表显示结果,和-l
类似,但是不显示文件所属者;-h
,将文件内容大小以GB
、KB
等易读的方式显示;-i
,结合-l
参数,列出每个文件的inode
;
- -l:列出长数据串,显示出文件详细信息,依次为文件属性(占10个字符空间)、文件数、拥有者、所属的
group
、文件大小、建档日期、文件名;- 实例如下
ls -l
//将目录下的文件信息详细列出ls –ld media
//列出文件目录下文件media的详细信息ls -as -S
//列出所有文件及文件大小,并以文件大小进行排序
- 实例如下
cp命令
**cp [**选项] 源文件或目录 目标文件或目录
将源文件或目录拷贝到目标文件或目录
选项包括:
- -a,此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容;
- -d,复制时保留链接,这里所说的链接相当于Windows系统中的快捷方式;
- -f,覆盖已经存在的目标文件而不给出提示;
- -i,与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答”y”时目标文件将被覆盖;
- -p,除复制文件的内容外,还把修改时间和访问权限也复制到新文件中;
- -r,若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件;
- -l,不复制文件,只是生成链接文件;
实例如下:
cp tree.txt tree1.txt
//将tree.txt内容复制到tree1.txt里cp -i /root/桌面/json/json.txt /root/桌面/tree/tree1.txt
//将/root/桌面/json目录下的json.txt复制到/root/桌面/tree/tree1.txt并覆tree.txt内容;
mv命令
**mv [**选项] 源文件或目录 目标文件或目录
结构 说明 mv 文件名 文件名 将源文件名改为目标文件名 mv 文件名 目录名 将文件移动到目标目录 mv 目录名 目录名 目标目录已存在,将源目录移动到目标目录; 目标目录不存在则改名 mv 目录名 文件名 出错 选项包括:
- -i,若指定目录已有同名文件,则先询问是否覆盖旧文件;
- -f,在mv操作要覆盖某已有的目标文件时不给任何指示;
实例如下
mv json.txt tree.txt
//将json.txt改为tree.txt;mv tree.txt ..
//将tree.txt移动至父目录;
rm命令
**rm [**选项] 文件名|目录名
选项包括:
- -i,删除前逐一询问确认;
- -f,即使原档案属性设为唯读,亦直接删除,无需逐一确认;
- -r,将目录及以下之档案亦逐一删除;
实例如下
- rm tree.txt //删除tree.txt文件
- rm –i * //删除目录下所有文件并在删除前询问
- rm -rf tree //删除目录下的tree文件,不询问,即使tree是只读文件
- rm tree.txt //删除tree.txt文件
mkdir
命令**mkdir [**选项] dir-name
用于建立子目录
选项包括:
- -p,确保目录名称存在,不存在的就建一个;
- -m,设定权限(类似chmod);
- -v,每次创建目录都显示信息;
实例如下
- mkdir tree //目录下新建名为tree的子目录
- mkdir -p mine/tree //在工作目录的mine目录下新建名为tree的子目录
- mkdir -m 744 list //创建权限为774的目录
- mkdir tree //目录下新建名为tree的子目录
rmdir命令
**rmdir [**选项] dir-name
删除空目录,无法删除非空目录;
选项包括:
- -p,递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除;
- -v,显示指令执行过程;
实例如下:
- rmdir tree //删除目录tree
- rmdir tree //删除目录tree
cd命令
cd [dirName]
切换目录,dirName表示要切换的目标目录
实例如下:
- cd .. //返回到上一级目录
- cd /root //进入到root目录
- cd .. //返回到上一级目录
pwd命令
用于显示工作目录
实例如下:
cat命令
**cat [**选项] 文件列表
用于连接文件并打印到标准输出设备上;
选项包括:
- -n,由 1 开始对所有输出的行数编号;
- -b,和 -n 相似,只不过对于空白行不编号;
- -s,当遇到有连续两行以上的空白行,就代换为一行的空白行;
- -v,使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外;
- -E,在每行结束处显示 $;
- -T,将 TAB 字符显示为 ^I;
- -A,等价于 -vET;
- -e,等价于”-vE”选项;
- -t,等价于”-vT”选项;
实例如下:
- cat –b tree.txt //输出tree.txt内容,且不对空行进行编号;
- cat > mine.txt //清空mine.txt内容
- Zcat file1 file2 > file3 //file1和file2的文档内容,附加到file3里;
- cat –b tree.txt //输出tree.txt内容,且不对空行进行编号;
find命令
find path -option [-print] [-exec -ok |xargs |grep] [command {} ;]
用来在指定目录下查找文件,任何位于参数之前的字符串都将被视为欲查找的目录名,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示;
选项包括:
- path
- ~表示$HOME目录;
- **.**表示当前目录
- /表示根目录
- -print,表示将结果输出到标准输出;
- -exec,对匹配的文件执行该参数所给出的shell命令,形式为”command {} ;”;
- -ok,与exec作用相同,区别在于,在执行命令之前,会给出提示,让用户确认是否执行;
- |xargs,与exec作用相同 ,起承接作用,区别在于 |xargs 主要用于承接删除操作,而-exec都可用,如复制、移动、重命名等;
- option,表示查找方式:
- -name filename //查找名为filename的文件
- -perm //按执行权限来查找
- -user username //按文件属主来查找
- -group groupname //按组来查找
- -mtime -n +n //按文件更改时间来查找文件,-n指n天以内,+n指n天以前
- -atime -n +n //按文件访问时间来查找文件,-n指n天以内,+n指n天以前
- -ctime -n +n //按文件创建时间来查找文件,-n指n天以内,+n指n天以前
- -nogroup //查无有效属组的文件,即文件的属组在/etc/groups中不存在
- -nouser //查无有效属主的文件,即文件的属主在/etc/passwd中不存
- -type b/d/c/p/l/f //查是块设备、目录、字符设备、管道、符号链接、普通文件
- -size n[c] //查长度为n块[或n字节]的文件
- -mount //查文件时不跨越文件系统mount点
- -follow //如果遇到符号链接文件,就跟踪链接所指的文件
- -prune //忽略某个目录
- path
实例如下:
- find / -name a.txt //在根目录查找名字为file1.txt的文件;
- find / -name .htm –a –user leeyuxun //在根目录下查找属主为leeyuxun的htm文件
- find . –name "*.txt" -print //在当前目录查找txt文件并打印
- find /dev -user leeyuxun -print //查找dev目录下的属主为leeyuxun的文件并打印;
- find . -name “*.o” -mtime +1 -mtime -7 -print //查找7天以内1天以前的o文件并打印;
- find / -name a.txt //在根目录查找名字为file1.txt的文件;
grep命令
grep [-abcEFGhHilLnqrsvVwxy][-A<****显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][–help][范本样式][文件或目录…]
选项内容:
- -a,不要忽略二进制的数据;
- -A,除了显示符合范本样式的那一列之外,并显示该行之后的内容
- -b,在显示符合样式的那一行之前,标示出该行第一个字符的编号
- -B,除了显示符合样式的那一行之外,并显示该行之前的内容
- -c,计算符合样式的列数;
- -C,除了显示符合样式的那一行之外,并显示该行之前后的内容;
- -d,当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作;
- -e,指定字符串做为查找文件内容的样式;
- -E,将样式为延伸的正则表达式来使用;
- -f,指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式;
- -F,将样式视为固定字符串的列表;
- -G,将样式视为普通的表示法来使用;
- -h,在显示符合样式的那一行之前,不标示该行所属的文件名称;
- -H,在显示符合样式的那一行之前,表示该行所属的文件名称;
- -i,忽略字符大小写的差别;
- -I,列出文件内容符合指定的样式的文件名称;
- -L,列出文件内容不符合指定的样式的文件名称;
- -n,在显示符合样式的那一行之前,标示出该行的列数编号;
- -o,只显示匹配PATTERN 部分;
- -q,不显示任何信息;
- -r,此参数的效果和指定”-d recurse”参数相同;
- -s,不显示错误信息;
- -v,显示不包含匹配文本的所有行;
- -V,显示版本信息;
- -w,只显示全字符合的列;
- -x,只显示全列符合的列;
- -y,此参数的效果和指定”-i”参数相同;
实例如下:
- grep mine * //在该目录下查找包含mine内容的文件;
- grep ‘text file’ example //在mine.txt中搜索字符串‘mine 12’并打印;
- grep mine * //在该目录下查找包含mine内容的文件;
more命令
**more [**选项] 文件名
类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似)
选项内容:
- -num,一次显示的行数;
- -d,提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声;
- -l,取消遇见特殊字元 ^L(送纸字元)时会暂停的功能;
- -f,计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上);
- -p,不以卷动的方式显示每一页,而是先清除萤幕后再显示内容;
- -c,跟-p相似,不同的是先显示内容再清除其他旧资料;
- -s,当遇到有连续两行以上的空白行,就代换为一行的空白行;
- -u,不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同);
- +/pattern,在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示;
- +num,从第 num 行开始显示;
- fileNames,欲显示内容的文档,可为复数个数;
实例如下:
- more mine.txt //打开mine.txt文件
- more mine.txt //打开mine.txt文件
文档备份与压缩命令
tar命令
tar [ 主选项+辅选项] 文件或者目录
用于备份文件;
主选项包括:
- -A,新增文件到已存在的备份文件;
- -B,读取数据时重设区块大小;
- -c,建立新的备份文件;
- -d,对比备份文件内和文件系统上的文件的差异;
- -g,处理GNU格式的大量备份;
- -G,处理旧的GNU格式的大量备份;
- -i,忽略备份文件中的0 Byte区块,也就是EOF;
- -j,支持bzip2解压文件;
- -k,解开备份文件时,不覆盖已有的文件;
- -l,复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制;
- -m,还原文件时,不变更文件的更改时间;
- -r,添加文件到已经压缩的文件;
- -t,显示压缩文件的内容;
- -u,添加改变了和现有的文件到已经存在的压缩文件;
- -v,显示操作过程;
- -W,确认压缩文件的正确性;
- -x,从压缩的文件中提取文件;
- -z,支持compress解压文件;
辅选项包括
- -b<区块数目>,设置每笔记录的区块数目,每个区块大小为12Bytes;
- -C,切换到指定目录
- -f,指定压缩文件
实例如下:
- tar -cvf data.tar * //将目录下的所有文件打包成data.tar;
- tar -cvzf data.tar.gz * //将目录下的所有文件打包成data.tar.gz;
- tar -tvf data.tar //查看data.tar中文件:所属权限、用户名用户组、日期等
- tar -xvf data.tar //解压data.tar包
- tar -cvf data.tar * //将目录下的所有文件打包成data.tar;
gzip命令
**gzip [**选项] 压缩(解压缩)的文件名
gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出”.gz”的扩展名
选项包括:
- -a,使用ASCII文字模式;
- -c,把压缩后的文件输出到标准输出设备,不去变动原始文件;
- -d,解开压缩文件;
- -r,递归处理,将指定目录下的所有文件及子目录一并处理;
- -f,强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
- -l,列出压缩文件的相关信息;
- -n,压缩文件时,不保存原来的文件名称及时间戳记;
- -N,压缩文件时,保存原来的文件名称及时间戳记;
- -q,不显示警告信息;
- -S<压缩字尾字符串>,更改压缩字尾字符串;
- -t,测试压缩文件是否正确无误;
- -v,显示指令执行过程;
- -V,显示版本信息;
- -L,显示版本与版权信息;
- -num,用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比),系统缺省值为6;
- -h,在线帮助;
实例如下:
- gzip –best mine.txt //高压缩比压缩mine.txt文件;
- gzip -l mine.txt.gz //列出mine.txt.gz相关信息;
- gzip -d mine.txt.gz //解压缩mine.txt.gz;
- gzip –best mine.txt //高压缩比压缩mine.txt文件;
unzip命令
**unzip [**选项] 压缩文件名.zip
用于解压缩zip文件;
选项包括:
- -c,将解压缩的结果显示到屏幕上,并对字符做适当的转换;
- -f,更新现有的文件;
- -l,显示压缩文件内所包含的文件;
- -p,与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换;
- -t,检查压缩文件是否正确;
- -u,与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中;
- -v,执行是时显示详细的信息;
- -z,仅显示压缩文件的备注文字;
- -a,对文本文件进行必要的字符转换;
- -b,不要对文本文件进行字符转换;
- -C, 压缩文件中的文件名称区分大小写;
- -j, 不处理压缩文件中原有的目录路径;
- -L,将压缩文件中的全部文件名改为小写;
- -M,将输出结果送到more程序处理;
- -n,解压缩时不要覆盖原有的文件;
- -o,不必先询问用户,unzip执行后覆盖原有文件;
- -P<密码>,使用zip的密码选项;
- -q,执行时不显示任何信息;
- -s,将文件名中的空白字符转换为底线字符;
- -V,保留VMS的文件版本信息;
- -X,解压缩时同时回存文件原来的UID/GID;
- -d<目录>,指定文件解压缩后所要存储的目录;
- -x<文件>,指定不要处理.zip压缩文件中的哪些文件;
示例如下:
- unzip tree.zip -d mine //将tree.zip解压到mine目录;
- unzip -j tree.zip //解压tree.zip到tree.zip同一目录下,不新建目录;
- unzip tree.zip -d mine //将tree.zip解压到mine目录;
Linux权限改变命令
chmod [操作符] [mode] 文件名
Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x;
Linux下权限的属组有 拥有者 、群组 、其它组 三种。每个文件都可以针对这三个属组(粒度),设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组;- 常见的权限表示形式有:
- -rw——- (600) 只有拥有者有读写权限。
- -rw-r–r– (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
- -rwx—— (700) 只有拥有者有读、写、执行权限。
- -rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
- -rwx–x–x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
- -rw-rw-rw- (666) 所有用户都有文件读、写权限。
- -rwxrwxrwx (777) 所有用户都有读、写、执行权限。
- 示例如下:
- chmod o+w file5 //表示其他人增加对file5的写权限
- chmod g=x file5 //表示群体可以执行file5;
- chmod go-rwx file6 //表示拥有者、群体减少对file6的读写执行权限;
- chmod 751 file6 //表示拥有者为rwx,群体为rx,其他人为x权限;
- chmod o+w file5 //表示其他人增加对file5的写权限
- 常见的权限表示形式有:
chgrp [选项] 组 文件
用于变更文件或目录的所属群组;
- 选项包括:
- -c,效果类似”-v”参数,但仅回报更改的部分;
- -f,不显示错误信息;
- -h,只对符号连接的文件作修改,而不更动其他任何相关文件;
- -R,递归处理,将指定目录下的所有文件及子目录一并处理;
- -v,显示指令执行过程;
- 实例如下:
- chgrp leeyuxun file6 //将file6的用户组权限改为leeyuxun;
- chgrp leeyuxun file6 //将file6的用户组权限改为leeyuxun;
- 选项包括:
chown [选项] 用户或组 文件
将指定文件的拥有者改为指定的用户或组;
- 选项包括:
- -c,显示更改的部分的信息
- -f,忽略错误信息
- -h,修复符号链接
- -v,显示详细的处理信息
- -R,处理指定目录以及其子目录下的所有文件
- 实例如下:
- chown leeyuxun file6 //将file6的拥有者改为leeyuxun;
- chown leeyuxun file6 //将file6的拥有者改为leeyuxun;
- 选项包括:
Linux与用户有关的命令
passwd [-k] [-l] [-u [-f]] [-d] [-S] [用户名]
更改用户密码;
- 参数含义:
- -d,删除密码;
- -f,强制执行;
- -k,更新只能发送再过期之后;
- -l,停止账号使用;
- -S,显示密码信息;
- -u,启用已被停止的账户;
- -x,设置密码的有效期;
- -g,修改群组密码;
- -i,过期后停止用户账号;
- 实例如下:
- passwd -S leeyuxun //显示用户leeyuxun的密码信息;
- passwd -S leeyuxun //显示用户leeyuxun的密码信息;
- 参数含义:
su [-fmp] [-c command] [-s shell] [–help] [–version] [-] [使用者账号]
用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。使用权限:所有使用者。
- 参数说明:
- -f,不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh;
- -m -p,执行 su 时不改变环境变数;
- -c command,变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者;
- -s shell,指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell;
- 实例如下:
- su root //更换为root账号;
- su root //更换为root账号;
- 参数说明:
Linux系统管理命令
write 用户账号 [终端名称]
用于传讯息给其他使用者。使用权限:所有使用者。
- 参数说明:
- 用户账号:预备传讯息的使用者帐号;
- 终端名称:如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息;
- 参数说明:
mesg [y/n]
用于设置终端机的写入权限;
- 参数如下:
- n,不允许其他用户将信息直接显示在你的屏幕上;
- y,允许其他用户将信息直接显示在你的屏幕上;
- 参数如下:
free [-b | -k | -m]
用于显示内存状态。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
- 参数如下:
- -b,以Byte为单位显示内存使用情况。
- -k,以KB为单位显示内存使用情况。
- -m,以MB为单位显示内存使用情况。
- 实例如下:
- free -k //以kb显示内存
- free -k //以kb显示内存
- 参数如下:
Linux磁盘管理命令
df [选项] [文件]
命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计;
- 选项包括:
- -a,包含所有的具有 0 Blocks 的文件系统;
- –block-size={SIZE},使用{SIZE}大小的Blocks;
- -h,使用人类可读的格式(预设值是不加这个选项的…);
- -H,很像 -h, 但是用 1000 为单位而不是用 1024;
- -i,列出 inode 资讯,不列出已使用 block;
- -k,就像是 –block-size=1024;
- -l,限制列出的文件结构;
- -m,就像 –block-size=1048576;
- -P,使用 POSIX 输出格式;
- -t,限制列出文件系统的TYPE;
- -T,显示文件系统的形式;
- -x,限制列出文件系统不要显示 TYPE;
- 实例如下:
- df -aT //显示目录下包含所有的具有 0 Blocks 的文件系统,及其系统形式;
- df -t ext4 //只显示ext4类型的文件系统;
- df -aT //显示目录下包含所有的具有 0 Blocks 的文件系统,及其系统形式;
- 选项包括:
du [选项] [目录名或文件名]
用于显示目录或文件的大小;
- 选项包括:
- -a,显示目录中个别文件的大小;
- -b,显示目录或文件大小时,以byte为单位;
- -c,除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和;
- -D,显示指定符号连接的源文件大小;
- -h,以K,M,G为单位,提高信息的可读性;
- -H,与-h参数相同,但是K,M,G是以1000为换算单位;
- -k,以1024 bytes为单位;
- -l,重复计算硬件连接的文件
- -L<符号连接>,显示选项中所指定符号连接的源文件大小;
- -m,以1MB为单位;
- -s,仅显示总计;
- -S,显示个别目录的大小时,并不含其子目录的大小;
- -x,以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过
- -X<文件>,在<文件>指定目录或文件;
- 实例如下:
- du –a / //显示目录下所有文件大小;
- du -s leeyuxun //显示属于leeyuxun的文件总数;
- du –a / //显示目录下所有文件大小;
- 选项包括:
dd [选项]
用于读取、转换并输出数据;
- 选项如下:
- if=文件名,输入文件名,默认为标准输入。即指定源文件。
- of=文件名,输出文件名,默认为标准输出。即指定目的文件。
- ibs=bytes,一次读入bytes个字节,即指定一个块大小为bytes个字节。
- obs=bytes,一次输出bytes个字节,即指定一个块大小为bytes个字节。
- bs=bytes,同时设置读入/输出的块大小为bytes个字节。
- cbs=bytes,一次转换bytes个字节,即指定转换缓冲区大小。
- skip=blocks,从输入文件开头跳过blocks个块后再开始复制。
- seek=blocks,从输出文件开头跳过blocks个块后再开始复制。
- count=blocks,仅拷贝blocks个块,块大小等于ibs指定的字节数。
- 实例如下:
- dd if=/dev/fd of=/dev/fd1 bs=5120 //将dev下的fd复制到fd1中,设置输入块大小为5120字节;
- dd if=/dev/fd of=/dev/fd1 bs=5120 //将dev下的fd复制到fd1中,设置输入块大小为5120字节;
- 选项如下:
fdformat [−n] 设备名
用于对指定的软碟机装置进行低阶格式化;
-n,关闭确认功能。这个选项会关闭格式化之后的确认步骤;
Linux进程管理命令
at [选项] 时间
设置在指定时间执行指定的命令;
- 选项包括:
- -l,显示等待执行的调度作业;
- -d,删除指定的调度作业;
- -v,显示作业执行的时间;
- -m,作业结束后发送邮件给执行的at命令的用户;
- 选项包括:
bg,fg
前后台切换;
- 前台作业切换到后台运行:bg [作业号];
- 后台作业切换到前台运行:fg [作业号];
- 显示当前所有作业:jobs [选项];
ps [选项]
显示系统中当前的进程及其状态;
- 选项包括:
- -a,显示当前终端上所有用户的进程;
- -e,显示所有进程的信息;
- -f,显示完整格式的输出;
- -l,显示进程的详细信息,包括父进程号、登录的终端号、进程优先级等;
- -u,显示指定用户的所有进程;
- -C <命令>,列出指定命令的状况;
- -x,显示后台进程的信息;
- -t <终端号>,显示指定终端上的进程信息;
- 实例如下:
- ps //列出所有进程
- ps //列出所有进程
- 选项包括:
pstree [选项]
树形图形显示进程之间的相互关系;
- 选项包括
- -a,显示启动进程的命令行;
- -n,按照进程号进行排序;
- -p,显示进程号;
- 实例如下:
- pstree -p //列出进程树,并显示进程号;
- pstree -p //列出进程树,并显示进程号;
- 选项包括
kill命令
kill [-s <****信息名称或编号>] [程序]或kill [-l <信息编号>]
- 参数说明:
- -l <信息编号>,若不加<信息编号>选项,则-l参数会列出全部的信息名称;
- -s <信息名称或编号>,指定要送出的信息;
- [程序],可以是程序的PID或是PGID,也可以是工作编号;
- 参数说明:
Linux其他命令
echo [-n] 字符串
输出字符串;
- -n,不在末尾换行;
- 示例显示:
- echo Hello world! //打印字符串“Hello world!”
- echo Hello world! //打印字符串“Hello world!”
cal [选项] [月份] [年]
用于查看日历信息;
- 实例如下:
- cal 9 2019 //打印2019年9月日历;
- cal 9 2019 //打印2019年9月日历;
- 实例如下:
date [选项] +显示时间格式
用来显示或设定系统的日期与时间;
- 选项包括:
- -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
- -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
- -u:显示GMT;
- 实例如下:
- date 08211550 //显示8月21日15:50;
- date 08211550 //显示8月21日15:50;
- 选项包括:
clear
用于清除屏幕;
Vi的熟悉与使用
vi共分为三种模式:分别是命令模式(Command mode),插入模式(Insert mode)和末行模式(Last line mode)
命令模式
用户刚刚启动vi,即可进入命令模式。
此状态下敲击键盘动作会被vi识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- i,切换到插入模式,以输入字符;
- x,删除当前光标所在处的字符;
- :,切换到末行模式,以在最底一行输入命令
若想要编辑文本:启动vi,进入了命令模式,按下i,切换到插入模式;
命令模式只有一些最基本的命令,因此仍要依靠末行模式输入更多命令;
插入模式
在命令模式下按下i就进入了插入模式。
在插入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符;
- ENTER,回车键,换行;BACK SPACE,退格键,删除光标前一个字符;
- DEL,删除键,删除光标后一个字符;方向键,在文本中移动光标;
- HOME/END,移动光标到行首/行尾;
- Page Up/Page Down,上/下翻页;
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线;
- ESC,退出插入模式,切换到命令模式;
末行模式
在命令模式下按下:(英文冒号)进入末行模式。
末行模式可以输入单个或多个字符的命令,可用的命令非常多。
在末行模式中,基本的命令有(已经省略了冒号):
q,退出程序;
w,保存文件
按ESC键可随时退出末行模式;
实例演示
- 使用命令vi mine.txt,新建txt文件,并打开进入命令模式;
- 按下i,进入插入模式,开始编辑文字;
- 按下esc,回到命令模式,在命令模式中按下:wq,保存并离开,如果只输入:q,是直接离开,不保存;
命令说明
命令模式可用的光标移动、复制粘贴、搜索替换等按钮
移动光标的方法
命令 说明 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键(→) 光标向右移动一个字符 如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键 [Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) [Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) [Ctrl] + [d] 屏幕『向下』移动半页 [Ctrl] + [u] 屏幕『向上』移动半页 + 光标移动到非空格符的下一行 - 光标移动到非空格符的上一行 n n 表示『数字』,按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。 0 或功能键[Home] 移动到这一行的最前面字符处 (常用) $ 或功能键[End] 移动到这一行的最后面字符处(常用) H 光标移动到这个屏幕的最上方那一行的第一个字符 M 光标移动到这个屏幕的中央那一行的第一个字符 L 光标移动到这个屏幕的最下方那一行的第一个字符 G 移动到这个档案的最后一行(常用) nG 移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) gg 移动到这个档案的第一行,相当于 1G N 光标向下移动 n 行(常用) 复制、粘贴、删除
命令 说明 X,x 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) nx 连续向后删除 n 个字符 dd 删除游标所在的那一整行(常用) ndd 删除光标所在的向下 n 行 d1G 删除光标所在到第一行的所有数据 dG 删除光标所在到最后一行的所有数据 d$ 删除游标所在处,到该行的最后一个字符 d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 yy 复制游标所在的那一行(常用) nyy 复制光标所在的向下 n 行 y1G 复制游标所在行到第一行的所有数据 yG 复制游标所在行到最后一行的所有数据 y0 复制光标所在的那个字符到该行行首的所有数据 Y$ 复制光标所在的那个字符到该行行尾的所有数据 P,p p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行 J 将光标所在行与下一行的数据结合成同一行 c 重复删除多个数据,例如向下删除 10 行,[ 10cj ] u 复原前一个动作 [Ctrl]+r 重做上一个动作 . 重复前一个动作 搜索、替换
命令 说明 /word 向光标之下寻找一个名称为 word 的字符串 ?word 向光标之上寻找一个字符串名称为 word 的字符串 n 重复前一个搜寻的动作 N 『反向』进行前一个搜寻动作 :n1,n2s/word1/word2/g 在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 :1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 :1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 ,且在取代前显示提示字符给用户确认 (confirm) 是否需要取代 命令模式切换到插入模式的可用的按钮
命令 说明 I,i 进入插入模式(Insert mode): i 为『从目前光标所在处输入』; I 为『在目前所在行的第一个非空格符处开始输入』 A,a 进入插入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』; A 为『从光标所在行的最后一个字符处开始输入』 O,o 进入插入模式(Insert mode): o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行 R,r 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次; R会一直取代光标所在的文字,直到按下 ESC 为止; vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样,一定要在左下角处看到 INSERT 或 REPLACE 才能输入字符 [Esc] 退出编辑模式,回到命令模式中 末行模式切换到指令行模式的可用的按钮
命令 说明 :w 保存文件 :w! 若文件属性为『只读』时,强制写入保存文件 :q 退出vi :q! 强制退出 :wq 保存并退出 ZZ 文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开 :w [filename] 编辑的数据另存为filename :r [filename] 编辑的数据中,读入另一个filename :n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename :! Command 暂时离开 vi 到指令行模式下执行 command 的显示结果 :set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号 :set nonu 取消行号
安装Linux
的编译器GCC
打开
Linux
终端,输入命令如下,发现已经安装gcc
;1
gcc –version
在终端输入命令如下,卸载
gcc
;1
yum remove gcc --skip -broken
下载安装
gcc
、g++
的必要rpm
包1
2
3
4
5
6
7
8
9
10
11binutils-2.20.51.0.2-5.36.el6.x86_64.rpm
cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
cpp-4.4.7-3.el6.x86_64.rpm
gcc-4.4.7-3.el6.x86_64.rpm
gcc-c++-4.4.7-3.el6.x86_64.rpm
glibc-devel-2.12-1.107.el6.x86_64.rpm
glibc-headers-2.12-1.107.el6.x86_64.rpm
kernel-headers-2.6.32-358.el6.x86_64.rpm
libstdc++-devel-4.4.7-3.el6.x86_64.rpm
mpfr-2.4.1-6.el6.x86_64.rpm
ppl-0.10.2-11.el6.x86_64.rpm在终端输入命令如下,安装上述安装包;
1
rpm -ivh (rpm包名称)
在终端输入如下命令,查看
gcc
版本为4.4.7
,安装成功1
2gcc --version
g++ --version
熟悉使用GCC编译环境
gcc
编译的四个步骤预处理
1
2gcc -o mine.i mine.c -E
*.c --> *.i主要是把头文件展开,完成函数或结构体等的声明;
编译
1
2gcc -o mine.s mine.i -S
*.i --> *.s主要是把c源码文件翻译成汇编文件;
汇编
1
2gcc -o mine.o mine.s -c
*.s --> *.o主要是把汇编文件翻译成二进制的目标文件;
链接
1
*.o --> *.bin
把所有的目标文件添加上和系统对接的代码,最后生成可执行程序;
编译总过程为
1
2
3
4gcc -o ****.i ****.c -E
gcc -o ****.s ****.i -S
gcc -o ****.o ****.s -c
gcc -o ****.bin ****.o新建
mine.c
文件,编写代码如下
实验关键里程碑数据与结果
- 安装
red hat linux
分区和选取服务
熟悉
Linux
文件目录的用途熟悉常用命令,
mount
较难理解
GCC
使用,了解编译过程如下1
2
3
4gcc -o mine.i mine.c -E
gcc -o mine.s mine.i -S
gcc -o mine.o mine.s -c
gcc -o mine.bin mine.o
实验难点与收获
难点
- 安装磁盘时,分区与挂载过程中操作复杂,理解困难;
usr
目录和根目录名称相同的目录代表的意义不相同;gcc
安装与配置需要的rpm
包比较多,容易漏装;
收获
- 之前
VMware
安装虚拟机,一直使用简易安装,这次学会了使用自定义安装虚拟机; - 熟悉了
linux
基本命令,基本学会使用命令行,思维从图形化界面到命令行有了一定的转换; - 对
Linux
目录结构有了一定的了解,与windows
目录结构有一定的区别; - 基本学会使用
vi
编辑器; - 了解了
linux
中GCC
编译执行c
语言文件的过程;
实验思考
该实验主要目的是熟悉linux
虚拟机安装、目录结构、基本命令、GCC
使用。实验内容相对基础,但是比较繁琐,尤其是熟悉基本命令,觉得可以适当精简;实验整体思路符合逻辑。