Linux入门学习,介绍了Linux常用命令,Linux文件系统权限,进程,软件包管理,Shell编程的基础
学习自华为iLearnX官网
Linux简介
Linux内核版本
Linux安装
- 安装程序的引导方式
- RHEL支持从光盘和USB存储设备引导安装程序
- 安装程序包读取软件包的方式
- 从光盘读取软件包进行安装是RHEL提供的缺省安装方式
- 安装程序可读取硬盘中保存的安装光盘镜像文件(ISO文件)进行安装
- 安装程序可从NFS、FTP和HTTP网络服务器中读取文件进行安装
Linux安装过程
- 启动安装程序
- 设置主机引导设备为光盘驱动器
- 从安装光盘启动主机
- 检测安装光盘的完整性
- 安装程序的配置过程
- 安装包选择全部安装
- 划分分区,划分一个swap(物理内存两倍),个/boot(100M)和个/即可
- 文件复制过程
- 安装过程结束
Linux发行版本
- Linux发行版的名称和版本号是由发行版的维护者決定的
- RHEL4,5,6是由 Red Hat公司发布的
- Suse Linux10是由 Novell松司发布的
- Debian Linux3.1是由 Debian维护社区发布的
Linux在企业中的应用
- Linux作为 Internet网络服务器的应用
- 提供Web、DNS、FTP和E-mai服务
- Linux作为中小企业内部服务器的应用
- 提供网络代理、网络防火墙、DHCP和文件共享服务
- Linux作为桌面环境的应用
- 可选择使用KDE、 GNOME等多种桌面环境
- Linux1作为软件开发环境的应用
- 支持C、C++、PERL、PHP、JAVA和 Python语言的开发
常用shell分类
- Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在 Linux内核与用户之间的解释器程序,现在 Linux通常指/bin/bash解释器来负责向内核翻译以及传达用户/程序指令,sheIl相当于操作系统的“外壳“
- ksh .profile
- bash .bash profile
Linux常见命令介绍
Linux常见命令格式
- 命令名称【命令参数】【命令对象】注意,命令名称、命令参数、命令对象用空格键分割开
- Linux命令及其参数是严格区分大小写
- Linux文件名严格区分大小写
- 查看指令用法 man/help 命令
查看文件和文件夹
ls
命令- Is命令的功能是显示指定目录下的文件目录清单
- 相当于dos下的di命令,而且其参数更加丰富多样
ls
示例一 不带参数ls
- 功能:显示指定目录中的文件清单,如果没有指定任何目录,则默认为当前目录。
ls
示例二 显示隐含文件ls -a
- 参数-a的功能:显示隐含文件
- 说明:若文件名以 “.” 开头,则认为是隐含的,进而普通的ls命令不显示以 “.” 开头的文件;所以要完全显示某目录下的文件清单,必须加上 -a 参数オ行。
ls示例三 长格式输出
ls -l
- 参数 -l 的功能是:以长格式列表输出指定目录中的文件清单。
- 解释长格式输出的内容如下:
- 文件类型 文件权限 硬连接数 属主 属组 大小 日期 时间 文件名
`d rwxrwxr-x 2 user1 user1 4096 Aug 17 09:10 abc`
ls示例四 递归显示
ls -R
- 参数-R的功能是:递归显示指定目录下的文件清单,即会显示指定目录分支内各子目录中的文件清单。
文件类型:
标识 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录文件 |
c | 字符设备文件 |
b | 块设备文件 |
p | 管道或FIFO |
l | 符号链接 |
s | 套接字 |
查看命令使用
name --help
显示当前路径
- pwd命令
- 功能:显示当前目录
新建目录
- mkdir
- 示例一:
mkdir abc
- 功能:在当前目录下创建目录abc
- 示例二:创建多级目录
mkdir -p a/b/c
- 功能:参数 -p 功能是如果要创建的目录的父目录,则先创建其父目录,再创建该目录;
- 如果指定的目录存在,则不影响原目录,也不会报错。
创建文件
- touch
示例一:创建空文件
touch myfile
- 功能:如果myfile不存在,则创建一个大小为0字节名为myfile的空文件
示例二:改变文件的最后修改时间
touch myfile
- 功能:如果myfile已存在,则将改变myfile的最后修改时间。
文件复制
- cp
- 示例一:复制文件
cp /etc/php.* abc
- 功能:将 /etc 目录下以 php. 开头的文件复制到目录abc中
- 说明:”*” 是通配符,可以匹配多个字符;”?”只能匹配一个字符
- 增加参数 -r 忽略文件夹
- 示例二:复制目录
cp -R /etc abc
- 功能:增加了参数-R,就能将目录 /etc 下面的所有子目录和文件都能复制到目录abc中
文件移动
- mv
示例一:将文件移动到目录中
mv myfile mydir1
- 功能:如果mydir1存在且是个目录,则将文件myfile移动到目录mydir1中
示例二:修改文件名
mv myfile myfile2
- 功能:将文件(或目录)myfile改名为myfile2
删除空目录
- rmdir
rmdir -p mydir
- 功能:删除指定的空目录
- -p 递归删除目录mydir1,当子目录删除后其父目录为空是,也一并删除。如果整个路径被删除或由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
删除
- rm
示例一:删除文件
rm php.ini
- 功能:删除指定的文件php.ini
示例二:删除目录
rm -rf abc
- 功能:参数 -r 是递归的意思,即可以删除非空目录;参数 -f 是强制的意思。
显示文件内容
- cat
示例一:显示文件内容
cat myfile
- 功能:显示指定文件myfile的内容
示例二:创建文件
cat > myfile2
- Welcome to Linux World!
- 按 ctrl+d 结束输入
- 功能:利用输出重定向符 “>” 来创建简短的文本文件 myfile2 。
分屏显示
- more 和 less 命令
more /etc/httpd/conf/httpd.conf
- 功能:分屏显示指定问津 httpd.conf 的内容,非常适合显示超过一屏的文本文件。
- 每按一下空格键,向后翻一屏;每按一下回车键,向后翻一行。
- more 可以按 B 回翻一页
- 说明:与more功能很相似,只不过less功能更强大,支持PageUp键向前翻屏,及PageDown向后翻屏,按q退出
显示文件头内容
- head
- 示例一:显示文件头10行内容
head /etc/httpd/conf/httpd.conf
- 功能:默认显示指定文件的头10行的内容
- 示例二:显示文件头n行内容
head -n 19 /etc/httpd/conf/httpd.conf
- 功能:参数-n设置显示指定行数
显示文件最后内容
- tail
- 示例一:显示文件最后10行
tail /etc/httpd/conf/httpd.conf
- 功能:默认显示指定文件的末尾10行内容
- 示例二:显示文件末尾n行内容
tail -n 19 /etc/httpd/conf/httpd.conf
- 功能:参数-n设置显示指定行数
建立硬连接和软连接
- ln 建立硬连接
ln myfile myfile.hlink
- 功能:为文件myfile创建名为myfile.hlink的硬连接
ls -l
可以查看到两个文件一样大,但本质上没有复制文件,myfile
的硬连接计数增加
- ls -il
- 说明:通过 ls -il 命令可以看出myfile与myfile.hlink的i节点号(最左边的数)是一样的,即硬连接与原文件共用同一个i节点,请注意两个文件的连接数。
- ln 建立软连接
ln -s myfile myfile.slink
这里为相对路径,移动myfile.slink
文件则无效了- 功能:为文件myfile创建名为myfile.slink的软连接
- 说明:试试用rm命令删除myfile文件,注意观察连接数的变化,再分别访问myfile.hlink和myfile.slink,看看是否能够正常访问。
- 软连接myfile.slink无效了
ln -s ~/myfile myfile.slink
使用绝对路,移动myfile.slink
仍然有效,移动源文件则无效myfile.slink
文件大小 为保存的 路径信息
- 目录不可以创建硬连接,可以创建软连接
查找命令
which
- 示例
which cp
which updatedb
- 功能:显示命令的绝对路径
- 注意:该命令只能在命令搜索路径指定的目录中去查找命令或程序
whereis
- 示例
whereis ln
- 功能:查询指定命令所在目录以及帮助文档所在目录
type
查找一个命令的位置type cd
显示cd is a shell builtin
type cp
显示cp is /usr/bin/cp
- 还可以加上参数
-a
切换用户
- su
- 示例:
su - root
- 功能:切换当前用户的身份
- su命令带有参数 “-” ,其含义是改变身份的同时也改变了工作环境
文件查找
- find
- 示例——按文件名查找
find / -name "dhcpd*"
- 功能:参数 -name 指明按文件名进行查找,即从 / 目录开始查找以”dhcpd”开头的所有文件
- 示例——按文件大小查找
find /etc -size 8
- 功能:从 /etc 下开始查找大小为8块的文件,此处默认512字节为1块。若认为块大小为1k,则应写为8k。
- 其它可以使用的单位有 c(字节)、w(双字节)、M(兆字节)、和 G(吉字节)。
8k
查找等于8k的文件,-8k
小于8k,+8k
大于8kfind /etc -size +8k -size -12k
查找大于8k小于12k
- 示例——按文件类型查找
find /var -type d -print
- 功能:从 /var 目录下开始查找类型为目录的文件,其中参数 -print 是显示到屏幕上,经常省略
- 示例——按文件的修改时间查找
find . -cmin -5
- 功能:从当前目录下查找5分钟之内修改过的文件
- 如果把 “-5” 改为 “+5” ,则表示查找5分钟以前修改过的文件。不带 ”+“ 或 ”-“ ,则认为整5分钟。
- 如果把时间单位改为天,则使用参数 “-ctime” , 如:
find . -ctime -5
- 示例——按文件的权限查找
find mytmp -perm 755
- 功能:查找mytmp目录下的权限恰为755的文件
find mytmp -perm -755
- 功能:查号mytmp目录下的满足755中任何一种权限的文件,即符合任何一个指定的权限位即可
find mytmp -perm +755
- 查找mytmp目录下的权限至少满足755的文件,即指定的所有权限位必须符合才算满足查询条件
- 示例——多条件查询
find / -ctime -5 -a -name "*.conf"
- 功能:查找5天以内修改过的所有 .conf 的文件
- 说明:默认情况下各查询条件之间是“与”的关系,也可用 -a 或 -and 来表示;-o表示“或”;! 表示“非”。
find . \(-type f -or type | \) -ok rm {} \;
- 功能:从当前目录下开始查找普通文件或符号连接文件,针对找到的每个文件,在执行rm命令之前提问是否要执行该命令。
- 其中
\(\)
是优先符号,参数 “-ok” 比 ”-exec” 多了交互功能
文件内容操作
grep
- 示例——在指定文件中查找包含特定的字符串的行
grep "bind" host.conf
- 功能:在文件host.conf中查找包含字符串 “bind” 行。
grep "network" /etc/*.conf
- 功能:利用通配符可在多个文件中查找包含特定的字符串的行。
- 示例——查找不包括指定字符串的行
grep -v "network" /etc/nsswitch.conf
- 功能:查找 /etc/nsswitch.conf 文件中不包含字符串 “network” 的行。
- 示例——在指定目录下递归查找
grep -r "stdio.h" /etc
统计指令
wc
- 示例——统计指定文件的行数、单词数和字符数
wc /etc/nsswitch.conf
- 功能:统计出文件 /etc/nswwitch.conf 共有行数、单词数、字符数。
- 示例——参数使用
wc -l /etc/nsswitch.conf
- 功能:参数
-l
的功能可统计出指定文件的行数。另外,利用参数-w
统计单词,利用-c
统计字符数
按正序逆序输出
sort
- 示例——按正序输出
sort mytest
- 功能:将指定文件以行为单位按正序输出
- 示例——按逆序输出
sort -r mytest
- 功能:将指定文件以行为单位按逆序输出
文件比较
diff
- 示例
diff test mytest
- 功能:比较文件 test 与 mytest 是否相同,将不同之处输出到屏幕上
压缩和解压缩
缺项:只能对文件分别压缩,不能打包压缩成一个文件,且不能压缩目录
gzip
命令 和 gunzip
命令
gzip myetc.tar
功能:将文件 myetc.tar 压缩为 myetc.tar.gz
gunzip myetc.tar.gz
- 功能:将文件 myetc.tar.gz 解压缩为 myetc.tar
类似还有 bzip2
命令 和 bunzip2
命令 压缩文件后缀为bz2
bzip2 -k *.txt
- 将所有
.txt
结尾的文件 压缩为.txt.bz2
-k
可以保留原文件
打包压缩
tar
命令
tar命令是经典的备份/还原命令,几乎所有最新的软件包都是通过tar包发布的
- 参数:
-c
创建 (压缩)-x
释放 (解压缩)-v
显示处理过程-f
指定压缩或解压缩文件名-z
使用gzip
命令压缩文件 后缀.tar.gz
-j
使用bzip2
命令压缩文件 后缀tar.bz2
-Z
调用 compress 命令来压缩,扩展名为.tar.Z
-C
可指定解压缩位置
- 示例——打包(备份)
tar -cvf myetc.tar /etc
- 功能:将目录 /etc 打包为一个名为myetc.tar的文档
- 示例——打包(备份)并压缩
tar -zcvf myetc.tar.gz /etc
- 功能:将目录 /etc 打包并压缩为一个名为 myetc.tar.gz 的文档
- 示例——解压缩还原
tar -zxvf myetc.tar.gz
- 说明:未指明还原位置,将会还原在当前目录下
tar -zxvf myetc.tar.gz -C /tmp
- 参数 -C 可指明还原位置
rar
需手动安装
- 参数
a
压缩x
解压缩
- 压缩
rar a 生成文件名 要压缩的内容
rar a alltxt dir2/
- 将dir2目录压缩,会自动夹上
.rar
后缀
- 解压缩
rar x 压缩文件 释放的位置
rar x dirbk.rar dir/
- 将
dirbk.rar
解压缩值dir
目录中
zip
- 压缩
zip 压缩包名 压缩的文件或目录
压缩目录要加-r
zip -r dirbk dir
压缩目录dir
为dirbk.zip
zip txt *.txt
压缩所有.txt
后缀的文件为txt.zip
- 解压缩
unzip 压缩包名 -d 解压目录
zip dirbk.zip -d dir1/
解压缩到dir1目录
挂载与卸载命令
mount
命令
如果系统挂载成功,在/media
目录下,如果手动挂载,一般置于/mnt
目录
- 示例——挂载光盘
mount -t iso9660 /dev/cdrom /mnt/cdrom
- 功能:参数 -t 指明要挂载的文件系统的类型,设备文件,挂载点
- 本例:将光盘挂载到 /mnt/cdrom 目录下,其中光盘文件系统类型是 iso9660
- 示例——挂载U盘
mount -t vfat /dev/sda1 /mnt/myusb
- 功能:将文件系统类型为 vfat 的U盘 挂载到 /mnt/myusb 目录下
- 说明:vfat 针对的是 FAT32、FAT16文件系统;U盘采用与 SCSI 硬盘相同的设备文件;
- 注意:一般在挂载U盘前,先执行
fdisk -l
命令 查看U盘的名称,如这里是/dev/sda1
- 示例——挂载软盘
mount -t msdos /dev/fd0 /mnt/floppy
- 功能:将软盘挂载到 /mnt/floppy 目录下,软盘的文件系统类型一般为 msdos
- 说明:挂载点不一定必须在 /mnt 下,它可以是任意一个空目录
umount
命令- 示例
umount /mnt/cdrom
- 功能:卸载光盘文件系统
- 说明:在卸载文件系统时可以使用设备文件或挂载点。
- 切记,一定要在挂载点之外,才能卸载相应的设备(文件系统)
网卡配置命令
ifconfig
- 示例——显示接口(网卡)配置参数
ifconfig
- 功能:显示网卡参数的配置情况,包括IP地址、子网掩码、广播地址等
- 示例——设置接口(网卡)配置参数
ifconfig eth0 10.22.1.103 netmask 255.255.255.0
- 功能:设置网卡 eth0 的IP地址为 10.22.1.103、掩码为255.255.255.0
- 说明:eth0 是系统中第1块以太网卡的名称,eth1是系统中第2块以太网卡的名称,以此类推。 Io 是环回测试网卡的名称
- 示例——禁用某块网卡
ifconfig eth0 down
- 功能:禁用网卡 eth0
- 说明:此时再用不带参数的ifconfig命令是不能显示 eth0 的信息,需要加上参数 -a 才可显示被禁用的网卡信息
- 示例——激活某张网卡
ifconfig eth0 up
- 功能:激活网卡 eth0
帮助命令
- man
- 示例——查看指定命令的帮助
man rpm
- 功能:查看 rpm 命令的帮助手册
- 说明:按q键退出man环境
- 示例——查询指定关键字的所有分类
man -a chroot
- 功能:查看关于chroot的所有分类帮助手册
- 示例——查询特定分类的帮助
man 5 named.conf
定时任务命令
- crontab
- 示例——查看任务列表
crontab -l
- 功能:查看crontab的任务列表
- 示例——编辑任务列表
crontab -e
- 功能:利用参数 -e 可以进入crontab的编辑环境,可以设置任务列表
- 说明:crontab任务列表的格式
- 分 时 日 月 星期 命令
- 10 2 * /root/bin/mybackup.sh
- 含义:每天的凌晨2:10 执行 /root/bin/mybackup.sh程序
- 使用 crontab 之前首先得确保服务是开启的
service crond status
查看状态service crond start
开启服务
- 监控执行
tail -f /var/log/cron
- 如果发现 cron 文件为空,那服务可能没有开启
service rsyslog status
查看状态service rsyslog start
开启服务
- 如果rsyslog没有开启,还可以通过邮件查看
tail -f /var/spool/mail/root
- linux 系统邮件功能:/var/spool/mail/root 如果写不进去,可能root文件内容过多,删除以下就好
反引号命令
1 | kill `cat /var/run/xinetd.pid` |
功能:杀掉xinetd进程
说明:该命令行由两个命令组成,首先要执行的是反引号内的命令,这里解释一下文件/var/run/ xinetd.pid中存放的是 xinetd的进程号,cat的执行结果就是显示该文件的内容,即进程号;然后,再执行kill命令来杀掉相应的进程。
时间日期
- date命令
- 示例——显示时间日期
date
- 功能:显示系统当前的时间日期。
- date命令的参数很多
date +%y
- 示例——设置时间日期
date -s"20060901 13:41"
- 功能:将系统的日期设置为2006年9月1日,时间设置为13:41。
显示磁盘空间情况
df 命令
- 示例一一显示文件系统使用磁盘空间的情况
df
- 功能:显示系统中每个文件系统使用磁盘空间的情況。
示例——以习惯的阅读方式显示文件系统使用磁盘空间的情况
df -h
- 功能:加上参数-h,则可以按照人们习惯的阅读方法来显示系统中每个文件系统使用磁盘空间的情况
- 文件系统 容量 已用 可用 已用% 挂载点
du
命令- 示例——显示指定目录中每个文件占用的磁盘空间的大小
du /etc
- 功能:显示出/etc目录中每个文件占用磁盘空间的大小
- 示例——显示指定目录总共占用的磁盘空间大小
du -sh /etc
- 功能:参数-s表示汇总,本例的功能为按照人们习惯的阅读方法显示/etc目录中所用文件总共占用的磁盘空间大小。
管道 |
- 管道示例—— 一级管道
ls -l | grep "^1"
- 功能:以长格式显示当前目录下的符号连接文件。该命令行首先执行
ls -l
,并把其结果当作grep “^l”命令的输入文件,其中 “^1” 表示以1开头。
- 管道示例—— 多级管道
ls -la | grep "^1" | wc -l
输出重定向
- 示例——覆盖方式
sort -r a.txt > b.txt
- 功能:把a.txt文件按行逆序排序并重定向输出到文件b.txt中;若b.txt已存在,则覆盖掉原内容,若不存在,则创建之。
- 示例——追加方式
sort -r a.txt >> b.txt
- 功能:”>>”的功能是按追加方式进行输出重定向;若b.txt已存在,则在该文件末尾追加新内容,若不存在,则创建之。
输入重定向
示例—— “<”
more < /etc/httpd/conf/httpd.conf
- 功能:上述命令与
more /etc/httpd/conf/httpd.conf
的结果是一样。 - 说明:很多命令与more一样可以使用输入重定向符,也可以不用,如cat、wc、less等。
示例—— “<<”
1
2
3
4cat <<! >a.txt
> hello
> world
> !- 功能:将 “!”之间的内容重定向到a.txt文件中去,不包括 “!”。
- 说明:这是一个组合使用输入输出重定向的例子,其中 “!” 是定界符,其它字符也可以充当定界符。
- 注意:”!” 与后面的 “>” 之间至少要有一个空格。这是一种非常经典的用法,可以用在she‖编程环境中。
vi 编辑器
ⅵ编辑器是 Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在 Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。
vimtutor
查看文档
vi 有三种工作方式:命令模式 (Command mode) ,输入模式 (Insert mode) 和 底线命令模式 (Last line mode)
命令模式
光标移动
1
2
3
4
5
6
7
8
9
10
11n - 上移n行
n + 下移n行
h 向左移动
l 向右
k 向上
j 向下
0 行首
$ 行尾
gg 文件首
G 尾行删除(也是剪切)
1
2
3
4
5
6
7
8
9
10
11
12x 删除光标处的单个字符
X 删除光标前的单个字符
dd 删除光标所在行
dw 删除当前字符至单词尾的所有字符,包括空格
de 删除当前字符至单词尾的所有字符,不包括空格
d$ 删除当前字符至行尾的所有字符
d^ 删除当前字符至行首的所有字符
J 删除行尾的换行符,相当于合并当前行和下一行
可以配合数字n使用:
n x 从当前光标开始连续删除n个字符
n dd 从当前行开始连续删除n行复制
1
2
3yy 复制当前行
n yy 从当前开始连续复制 n 行,包括当前行
v进入视图模式->移动光标选择字符->y复制粘贴
1
2p 粘贴在当前行的下方或当前光标后面
n p 在当前行的下方连续粘贴 n 遍翻页
1
2
3
4ctrl+f 向前翻整页
ctrl+b 向后翻整页
ctrl+u 向前翻半页
ctrl+d 向后翻半页撤销:
u
恢复:
ctrl+r
缩进:向后
>>
向前<<
保存退出
ZZ
跳转至
man
帮助文档,shift+k
,跳转到指定页数n+shift+k
[+d
显示宏%
括号跳转输入
r
,从光标开始写入字符覆盖
末行模式
显示/隐藏行号
:set number
显示行号:set nonumber
隐藏行号
跳行
:n
跳到第n行
退出
:q
退出:w
存盘:wq
存盘并退出:q!
不保存退出
执行shell命令
- 如:
:!ls
,:!pwd
- 如:
查找
1
2
3
4
5
6
7/字符串 ENTER 向后查找指定的字符串
/ ENTER 向后查找上一次查找的内容
?字符串 向前查找字符串
? 向后查找上一次查找的内容
n 查找方向的下一个字符串
N 查找方向反向的下一个字符串替换:
1
2
3
4s/jack/luck 将当前行的首个jack替换成luck
s/jack/luck/g 替换当前行所有jack
%s/jack/luck/g 全文替换
27,30s/jack/luck/g 27到30行替换分屏:
1
2
3
4
5
6sp 水平分屏
vsp 垂直分屏
vsp test 分屏打开test文件
ctrl+ww 切换分屏
qall 关闭所有分屏
q 关闭当前光标所在分屏
输入模式
1 | i 当前光标前插入 |
vim打造IDE:
- 系统级配置文件目录:
/etc/vim/vimrc
- 用户级配置文件目录:
~/.vim/vimrc
vi配置文件
/etc/vimrc
或 /etc/vim/vimrc
所有用户的配置
设置默认显示行号
- 拷贝
/etc/vimrc
至当前用户家目录下~/.vimrc
- 追加
set number
设置TAB缩进
默认8空格
在.vimrc中关于tab的设置:
1 | set expandtab //将tab扩展成空格 |
Linux文件系统权限
文件系统
文件系统用来存放和管理所有系统使用的文件和数据,其载体是软盘或硬盘分区。一个软盘或硬盘分区在作为文件系统使用时,必须进行初始化,并将如何组织文件的数据结构写到这些介质上,这个过程就是建立文件系统过程。
Linux的文件系统是树形结构,所有的文件和目录都是树上的节点,树的根就是整个文件系统的最顶层目录,即根目录。文件连接到目录,目录再连接到上一层目录,所有的文件和目录最终都归结到根目录,形成整个文件系统。
Linux使用一个统一的接口支持多种文件系统,每种文件系统都有各自的格式和特征(如文件名长度、最大文件大小等)。目前, Linux支持的文件系统类型MINIX、EXT、EXT2、EXT3、proc、hpfs、nfs、 isofs、 msdos fat、vfat、ntfs、umsdos、 xiafs 及 sysv 等。 Red Hat Linux默认的文件系统是 ext3。
第一个专门为 Linux设计的文件系统被称为扩展文件系统( Extended File System)或EXT。它出现于1992年4月,但性能不太好。1993年扩展文件系统第二版ext2被设计出来并添加 Linux中。ext2是一个强大的可扩展文件系统,被认为是当时最成功的 Linux文件系统。
ext3文件系统的特性
- 可用性
- 除非发生硬件故障,即使非法关机,ext3也不需要文件系统校验
数据完整性
- ext3文件系统在非法关机是,数据完整性能得到可靠的保障
速度
- 尽管ext3写入数据的次数多于ext2,但是ext3常常快于ext2
简易转换
- ext可以容易地不经格式化把ext2转换为ext3系统,体现了可靠的日志文件系统的优越性
Linux的文件系统结构
/home
用户的主目录,比如说有个用户叫wang
,那他的主目录就是/home/wang
/lib
这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows
里的.dll
文件。几乎所有的应用程序都需要用到这些共享库。/mnt
这个目录是空的,系统提供这个目录是让用户临时挂载别的文件系统。/proc
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访可这个目录来获取系统信息/root
系统管理员,超级权限者的用户主目录/sbin
s 就是Super User的意思,也就是说这里存放的是一些系统管理员使用的系统管理程序/tmp
用来存放一些临时文件的地方/usr
这是个最庞大的目录,我们要用到的很多应用程序和文件几乎都存放在这个目录下。/var
这个目录中存放着经常变动的文件,为了保持/usr
的相对稳定,那些经常被修改的目录可以放在这个目录下。系统的日志文件就在/var/log
目录中。
常见文件所在目录
- hosts
/etc
- 全局profile
/etc
- 日志文件
/var/log/message
- 用户环境变量
~/.bash_profile
或者~/.profile
等 - 用户文件
/etc/passwd
- 组对应文件
/etc/group
文件名与文件类型
文件名是一个文件的标识。 Red Hat Linux系统中的文件名的命名规则与 Windows系统基本相同。它同样是由字母、数字、下划线、圆点等组成,最长不能超过255个字符。在 Red Hat Linux系统中,没有像 Windows系统那样明显的扩展名,但它对字母大小写是严格区分的。
Linux有四种基本文件系统类型:
- 普通文件:如文本文件、C语言源代码、Shel脚本、二进制的可执行文件等。
- 目录文件:包括文件名、子目录名及其指针。它是 Linux储存文件名的唯一地方。
- 链接文件:它是一个文件的第二个名字,这是针对多用户共享同一文件而产生的文件。
- 特殊文件:Linux的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,这类文件就是特殊文件,常放在
/dev
目录内。
1 | [user1@server1 ~]$ ls -l |
文件权限
Linux文件有三种典型的权限 rwx
- r(读权限 4)
- w(写权限 2),
- x(执行权限 1)
示例说明:
1 | [user1@server1 ~]$ ls -l |
修改权限
chmod
命令1
chmod [who] operator [permission] filename
who
的含义:1
2
3
4u 文件属主权限
g 同组用户权限
o 其他用户权限
a 所有用户权限(文件属主、同组用户、其他用户),默认值operator
的含义:1
2
3+ 增加权限,原权限基础上增加指定权限
- 取消权限,原权限基础上去掉指定权限
= 设定权限,会覆盖原权限permission
的含义:r
读权限w
写权限x
执行权限
示例:
1 | [root@CentOS8 ~]# ls -l myfile |
文件属主和修改
1 | 查看属主 |
Linux用户和用户组
用户和用户组
Linux用户只有两个等级:root
及 非root
Linux中还有一部分用户,如: apache
、 mysql
、 nobody
、ftp
等,这些也都是非root用户,即普通用户。 Linux的权限实际是上不同用户所能访问的文件的不同产生的假象。而这些假象的造成,还要涉及到另外一个概念:用户组
一个用户至少要属于个用户组
一个用户可以属于多个用户组
Linux采用组来组织和管理用户
在 Linux中每个用户有唯一的用户标识符UID,该UID是一个无符号整数
每个用户也必须至少属于一个组,也有组标识符GID.
其中UD与GID独立编号。
1
2
3UID 0 root用户
UID 1~999 占坑用户,即一些无法登录的用户
UID >=1000 正常的可登录用户
创建用户账号
useradd
命令
示例一:创建用户
[root@CentOS8 ~]# useradd user1
功能:创建一个用户
user1
,同时在/etc/passwd
文件和/etc/shadow
文件增加一行,并自动为用户创建相应的主目录:/home/user1
- 说明:
/etc/passwd
文件记录了系统中每个用户的用户名、UID号、GID号、主目录、shell等信息 - 注意:用户的口令原来也存放在此文件中,现在为了保证安全采用了影子口令文件
/etc/shadow
来保存每个用户的口令。
示例二:创建用户账号并设置相应属性值
[root@CentOS8 ~]# useradd -u 600 -g mygroup1 -G mygroup2 -d /home/student1 s1
- 功能:创建用户s1,参数:
- -u 指定 UID号 为 600
- -g 指定 用户的主要组 为
mygroup1
- -G 指定 用户的附加组 为
mygroup2
,每个用户可以有多个附加组 - -d 指定 用户的主目录 为
/home/student1
adduser
命令
删除用户账号
userdel
命令
示例一:删除用户
[root@CentOS8 ~]# userdel user1
- 功能:删除指定用户
user1
示例二:删除用户并删除主目录
[root@CentOS8 ~]# userdel -r user1
- 功能:删除指定用户
user1
,同时删除其主目录
deluser
命令
创建组账号
groupadd
命令
示例一:创建组账号
[root@CentOS8 ~]# groupadd mygroup1
- 功能:创建一个新组
mygroup1
,其中GID号为已存在GID号的下一个顺序编号 - 说明:创建一个组的同时会在
/etc/group
文件中为改组增加相应的一行,用来记录该组的名称、GID号及成员等信息
示例二:创建组账号并设置其GID号
[root@CentOS8 ~]# groupadd -g 500 mygroup2
- 功能:创建一个新组
mygroup2
,并指定其GID号为5000 - -g 用来设置新组的GID号
删除用户组
groupdel
命令
[root@CentOS8 ~]# groupdel mygroup2
- 功能:删除指定的组
- 注意:当某个组是某现有用户的主要组时,则不能被删除
改变口令
passwd
命令
- 普通用户只能修改自己的密码,
root
用户可以修改所有用户的密码 - 密码长度需要 >= 8,且不能太简单,不然修改或设置失败
示例:
1 | [root@CentOS8 ~]# useradd test1 # 增加用户 user1 |
禁止和恢复用户登录
passwd
命令
参数
-l
可以给指定的用户加锁,禁止该用户登录注意:root 身份下仍能登录
su - username
,但用户不能直接登录了1
2
3[root@CentOS8 ~]# passwd -l test1
锁定用户 test1 的密码 。
passwd: 操作成功参数
-u
可以给指定的用户解锁,恢复用户登录1
2
3[root@CentOS8 ~]# passwd -u test1
解锁用户 test1 的密码。
passwd: 操作成功
删除用户口令
passwd
命令
参数
-d
可以删除指定用户的口令,只有root
用户可以使用1
2
3[root@CentOS8 ~]# passwd -d test1
清除用户的密码 test1。
passwd: 操作成功
显示用户信息
id
命令
格式
id username
显示用户的UID、GID及所属的组信息
1
2
3
4[root@CentOS8 ~]# id root
uid=0(root) gid=0(root) 组=0(root)
[root@CentOS8 ~]# id test1
uid=1001(test1) gid=1001(test1) 组=1001(test1)
修改用户
usermod
usermod -aG wheel user_name
将用户user_name添加到Wheel组中,Wheel组中的用户具有root权限,即使用sudo
Linux进程管理
查看进程命令
ps
命令
示例一:不带参数
1
2
3
4
5[root@CentOS8 ~]# ps
PID TTY TIME CMD
2367 pts/0 00:00:00 bash
2413 pts/0 00:00:00 ps
[root@CentOS8 ~]#示例二:查看所有运行的进程,包括后台进程
-a
所有进程,会话引导进程和与终端无关进程除外-u
显示用户-x
包括不占用控制台的进程
1
2
3
4
5
6[root@CentOS8 ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.7 0.7 175500 13704 ? Ss 17:27 0:02 /usr/lib/systemd/systemd --switched
root 2 0.0 0.0 0 0 ? S 17:27 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 17:27 0:00 [rcu_gp]
省略....1
2
3
4
5
6
7
8
9
10
11USER 所属用户
PID 进程ID
%CPU 占用CPU百分比
%MEM 占用内存百分比
VSZ 虚拟内存占用大小
RSS 实际内存占用大小
TTY 终端类型
STAT 进程状态
START 进程启动时刻
TIME 进程运行时长
COMMAND 启动进程的命令示例三:查看所有运行的进程,包括后台进程,显示每个进程的父进程号
1
2
3
4
5
6[root@CentOS8 ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:27 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system
root 2 0 0 17:27 ? 00:00:00 [kthreadd]
root 3 2 0 17:27 ? 00:00:00 [rcu_gp]
省略....示例四:
ps ajx
1
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
top
命令
动态地显示系统中的进程,
ctrl+c
退出1
2
3
4
5
6
7
8
9
10
11[root@CentOS8 ~]# top
top - 17:44:26 up 16 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 216 total, 1 running, 215 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 1790.0 total, 651.4 free, 563.8 used, 574.8 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 1064.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
940 root 20 0 366260 12004 10220 S 0.3 0.7 0:01.38 vmtoolsd
2522 root 20 0 65752 5200 4292 R 0.3 0.3 0:00.08 top
省略。。。
杀掉指定进程
kill
命令
示例一:杀掉指定进程
- 功能:
kill
命令可以杀掉一个进程,普通用户只能杀掉自己的进程 - 说明:一般在执行
kill
命令前,先用ps
或pstree
来查询一下将要被杀掉的进程的进程号
1
2
3
4
5
6
7
8
9
10
11
12
13[root@CentOS8 ~]# ps
PID TTY TIME CMD
2367 pts/0 00:00:00 bash
2696 pts/0 00:00:00 ps
[root@CentOS8 ~]# ps -ef|grep bash
root 957 1 0 17:27 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned
root 2367 2361 0 17:31 pts/0 00:00:00 -bash
root 2698 2367 0 18:01 pts/0 00:00:00 grep --color=auto bash
[root@CentOS8 ~]# kill 957
[root@CentOS8 ~]# ps -ef|grep bash
root 2367 2361 0 17:31 pts/0 00:00:00 -bash
root 2710 2367 0 18:02 pts/0 00:00:00 grep --color=auto bash
[root@CentOS8 ~]#- 功能:
示例二:强制杀掉指定进程
[root@CentOS8 ~]# kill -9 3029
- 功能:强制终止3029号进程的运行,其中参数-9代表强制的意思
- 说明:实际上
kill
命令是向该进程发送信号,该进程收到信号后决定是否停止运行,有些进程必须要收到参数9才终止运行 kill -l
命令了解有关信号的情况
kill -l
列出所有信号1
2
3
4
5
6
7
8
9
10
11
12
131) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Linux软件包管理
软件包管理
与Windows安装各种应用程序相似,在linux下也可以安装各种需要的应用程序,通常称为软件包。目前,在linux系统下常见的软件包管理工具为RPM
。
rpm
— Redhat Package Management
软件包文件名中 i386, noarch 等含义
- i386.rpm 适用于 80386及以上的cpu
- i596.rpm 适用于 pentium及以上cpu
- i686.rpm 适用于 pentium pro及以上cpu
- noarch.rpm 指该软件包与硬件平台无关
- src.rpm 软件包源码
rpm命令
示例一:查询系统中安装的软件包
[root@CentOS8 ~]# rpm -qa
- 功能:查询系统中安装的软件包列表
-q
是 查询-a
是 所有的
示例二:查询软件包中 文件清单
[root@CentOS8 ~]# rpm -ql php
- 功能:查询已安装的软件包php中的文件列表
-l
是 列出指定软件包中的文件
示例三:卸载指定的软件包
[root@CentOS8 ~]# rpm -e php
- 功能:卸载已安装的软件包php
-e
是 卸载- 说明:执行上述命令是,采用的身份是不同的,普通用户只能执行查询操作
示例四:安装软件包
[root@CentOS8 ~]# rpm -ivh php-4.3.9-3.1-i386.rpm
- 功能:安装软件包php
-i
是 安装-v
是 显示处理过程-h
是 显示#表示进度
示例五:忽略依赖关系安装软件包
[root@CentOS8 ~]# rpm -ivh --nodeps php-4.3.9-3.1-i386.rpm
- 功能:安装软件包php时,忽略与其它软件包的依赖关系
--nodeps
表示 忽略依赖关系- 说明:在安装或卸载软件时经常会遇到提示 ”该软件包与某某软件包存在依赖关系“,只有加上参数
--nodeps
忽略掉依赖关系才能进行安装或卸载
rpm
管理安装:
通过源代码安装软件包
rpmbuild --rebuild software-version.src.rpm
rpm -ivh /usr/src/redhat/RPMS/i386/software-version.i386.rpm
升级:
rpm -U software-version.i386.rpm
rpm -Uvh software-version.i386.rpm
rpm --force -Uvh software-version.i386.rpm
- 删除:
rpm -e software
- 查询:
rpm -qi software
rpm -qpi software-version.i386.rpm
rpm -qf /dir/file
rpm -ql software
rpm -qpl software-version.i386.rpm
Shell编程
Bash
Shell是用户与Linux操作系统沟通的桥梁
Linux的Shell种类众多,这里的是bash
,也就是Bourne Again Shell
- 由于易用和免费,
bash
在日常工作中被广泛使用 bash
是大多数Linux系统默认的Shell
Shell执行方式
a.sh
- 保证脚本具有执行权限并且在环境变量PATH中有(.),这样在执行的时候会从当前目录查找
./a.sh
- 保证这个脚本具有执行权限
bash a.sh
- 直接可以执行,甚至这个脚本文件中的第一行都可以不引用
/bin/bash
,它是将hello.sh
作为参数传给 sh(bash) 命令执行的
后台模式运行脚本
在脚本后面加一个 &
tesh.sh &
- 在后台运行,但是当前会话窗口关闭之后这个脚本也会停止运行
nohup
命令
- 不间断的运行命令,忽略所有挂断(SIGHUP)信号
nohup tesh.sh &
nohup
命令将进程和终端分开,所以关闭当前会话窗口不会影响这个进程的执行nohup
会在当前执行的目录生成一个nohup.out
日志文件
标准输入输出
标准输入、输出、错误可以使用文件描述符 0、1、2 引用
ls >file
或者ls 1>file(ls >>file)
ls >file 2>&1
ls > /dev/null
,把输出信息重定向到无底洞
使用重定向可以把信息转换到其他位置
变量
变量不需要声明,初始化不需要指定类型
变量命名
- 不能使用程序中关键字(保留字)
- 只能使用数字、字母和下划线,且不能以数字开头
- 建议命令要通俗易懂
- 显示变量值使用
echo $变量名
或者${变量名}
echo $JAVA_HOME
echo ${JAVA_HOME}
本地变量
- 只对当前shell进程有效,对当前进程的子进程和其他shell进程无效
- 定义:
VAR_NAME=VALUE
- 变量引用:${VAR_NAME}
- 取消变量:
unset VAR_NAME
环境变量
- 自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效
- 定义:export VAR_NAME=VALUE
- 对所有shell进程都有效需要配置到配置文件中
vi /etc/profile
source /etc/profile
局部变量
- 在函数中调用,函数执行结束,变量就会消失
- 对shell脚本中某代码片段有效
- 定义:
local VAR_NAME=VALUE
位置变量
$1,$2,...,${10},...
test.sh 3 89
$0
脚本自身$1
脚本的第一个参数$2
脚本的第二个参数
- 相当于java中main函数中的args参数,可以获取外部参数
特殊变量
$?
接收到上一条命令的返回状态码,返回状态在0~255
之间$#
脚本执行时,输入的参数的个数$*
或$@
输入的参数的具体内容(将输入的参数作为一个多个对象,即是所有参数的一个列表)
Linux退出状态代码
1 | 0 命令成功完成 |
实例:
1 | [root@CentOS8 ~]# cat test.sh |
for循环
通过使用一个变量去遍历给定列表中的每个元素,在每个变量赋值时执行一次循环体,直至复制完成所有元素退出循环。
格式一
1
2
3
4for ((i=0;i<10;i++))
do
...
done格式二
1
2
3
4for i in 0 1 2 3 4 5 8 9
do
...
done格式三
1
2
3
4for i in {0..9}
do
...
done
while/until循环
适用于循环次数未知,或不便用for直接生成较大的列表时
格式
1
2
3while 测试条件;do
循环体
done测试条件为真,进入循环;测试条件为假,退出循环
until
循环和while
循环格式一致,但是和while
循环的意思相反,测试条件为假,进入循环;测试条件为真,退出循环。
if判断
单分支
1
2
3if 测试条件; then
选择分支
fi双分支
1
2
3
4
5if 测试条件; then
选择分支1
else
选择分支2
fi
循环控制命令
break
命令
在处理过程中跳出循环的一种简单方法,可以使用 break
命令退出任何类型的循环,包括 while
循环和 until
循环
- 跳出单循环
- 跳出内循环
- 使用多循环时
break
自动跳出当前所在的循环,注意,当内循环被break
命令终止,外循环会继续执行
- 使用多循环时
- 跳出外循环
处于内循环但需要终止外循环,break
命令后面需要指定参数
break n
- n 表面要跳出的循环等级,默认为1,跳出当前循环,n=2,停止外面一层循环
continue
命令
提前停止当前循环内命令,而不完全终止循环的方法,这就需要在循环内设置shell不执行命令的条件。
1 | [root@CentOS8 ~]# nano test2.sh |
自定义函数
1 | function 函数名() { |
引用自定义函数文件时,使用
source func.sh
有利于代码的重用性
函数传递参数
函数的返回值,只能是数字
示例:
1 | [root@CentOS8 ~]# nano test3.sh |
Shell样例
1 | # !/bin/bash |
问题
创建用户问题
Ubuntu
创建用户时,默认不会创建家目录
使用useradd -D
查看该命令的默认设置
1 | useradd -D |
- 在
/etc/default/useradd
文件可以更改这些默认值
1、使用useradd
创建用户时可以加上-m
来强制创建家目录
1 | useradd -m username |
2、也可以修改useradd的默认设置,让他默认创建家目录
1 | vi /etc/login.defs |
Unable to locate package xxx
1 | sudo apt-get update |
命令补充
tree
tree dirname
将dirname下的文件以目录树的形式展现,包括子目录- 不带参数默认当前目录
可能需要安装sudo apt-get tree
od
查看二进制文件信息
-t
指定数据的显示格式c
ASCII字符d
有浮点十进制数f
浮点数o
八进制数u
无符号十进制数x
十六进制数
chgrp
修改文件所有组 chgrp groupname filename
chgrp yang text
相近命令chown
free
显示系统中的内存空闲情况
1 | [root@CentOS8 ~]# free |
env
查看环境变量
Linux系统下环境变量: key=value1:value2:value3
ping
ping www.baidu.com -c 4
是否能上网
nslookup
查看域名对应的ip
file
查看文件类型
如:file mypp
:myapp: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=fd62a801dc8e73582184ccf1ec2f0e9f492ab33e, for GNU/Linux 3.2.0, not stripped
stat
查看文件的状态
strace
跟踪系统调用和信号
strace
+ 可执行文件
查看该可执行文件执行过程中使用的系统调用和接收的信号
Ubuntu软件安装
在线安装
apt-get
- 安装
sudo apt-get install tree
- 移除
sudo apt-get remove tree
- 更新
sudo apt-get update
更新软件列表 - 清理所有软件安装包
sudo apt-get clean
/var/cache/apt/archives
下.deb
的文件
aptitude
- 安装
sudo aptitude install tree
- 重新安装
sudo aptitude reinstall tree
- 更新
sudo apt-get update
- 移除
sudo aptitude remove tree
- 显示状态
sudo aptitude show tree
deb包安装
- 安装
sudo dpkg -i xxx.deb
- 删除
sudo dpkg -r xxx
源码安装
查看附带的README
文件查看安装步骤
- 解压缩源代码包
- 进入到安装目录:
cd dir
- 检测文件是否缺失,创建Makefile,检测编译环境:
./configure
- 编译源码,生成库和可执行文件:make
- 把库和可执行程序,安装到系统目录下:
sudo make install
- 删除和卸载软件:
sudo make distclean
补充
磁盘命名
安装中文包
1 | dnf install glibc-langpack-zh.x86_64 |
查看linux系统
uname -a
显示电脑以及操作系统的相关信息
cat /proc/version
显示正在运行的内核版本
cat /etc/issue
显示的是发行版本信息
lsb_release -a
适用于所有版本的linux
赋予sudo权限
visudo
命令修改的是/etc/sudoers
文件,是一个只读文件,直接vi /etc/sudoers
无法修改
执行visudo
或cat /etc/sudoers
查看/etc/sudoers
文件内容
1 | root ALL=(ALL) ALL |
将想要赋予root权限的用户添加到文件中,sudo -l
查看可用的sudo命令
还有一个更简单的方法:usermod -aG wheel 用户名
参考:系统命令sudo权限 - 知乎 (zhihu.com),linux wheel用户组,Linux中的Wheel组的作用_嗨嗨嗨夏天的博客-CSDN博客