目录

目录

Linux与windows目录对应表 1

Bash快捷键 1

命令列表 2

分区 4

分区命令: 5

图形界面 6

常用命令 7

主机名 8

修改主机IP 8

linux 目录结构 9

/dev 硬件设备信息 9

/etc 配置文件 9

/bin和/sbin 都是二进制程序文件 9

/tmp临时文件 10

/usr放系统文件和/目录很相似(有点像第二层/) 10

/var存放临时变化数据(如日志) 10

/proc“假目录”映射正在运行内存状态以文件表示 10

/sys“假目录”映射硬件信息 10

挂载 19

Linux硬件设备文件名称 19

Rpm和yum区别及使用 20

安装卸载软件 25

Linux命令行下如何识别文件类型? 26

命令提示符 28

cd命令:切换目录 29

pwd命令:显示当前路径 29

ls命令:查看目录下文件 30

“ls –l” 7 列的含义: 31

ll命令,是ls -l的别名 32

mkdir命令:创建目录(文件夹) 32

rmdir命令:删除空目录 33

Linux文件3个时间点(access time,modify time,change time) 33

touch命令 创建文件 35

语法 36

Stat命令 36

-a:修改文件的access time 36

-m:修改文件的modify time 37

-c:不创建不存在的文件(当touch后操作多个文件时,不存在的文件将不会被创建) 37

-t:修改文件为指定的日期时间。 37

ln命令:在文件之间建立链接(硬链接和软链接) 38

ext 文件系统(Linux 文件系统)是如何工作的 38

ln 命令 39

ln创建链接的深度剖析 40

总结:软连接可以链接目录或者文件,如WINDOWS的快捷方式,链接必须绝对路径。(硬链接只可以链接文件,不可以目录,只删除硬链接文件或者源文件其中一个时,文件依然存在) 46

cp命令:复制文件和目录 46

rm命令:删除文件或目录 47

mv命令:移动文件或改名 48

Shell通配符 50

查看内核及版本,及内存使用率 51

图形命令行切换 51

更改当前登录命令提示颜色: 52

hash缓存表 52

什么是外部命令、什么是内部命令 52

Alias 别名设置 52

系统时间及硬件时间修改 53

变量设置 53

帮助命令 54

内部命令: 54

外部命令: 54

man帮助搜索关键字 56

man常用的搜索功能键 56

软件包文档说明目录: /usr/share/doc 57

登陆前提示信息 57

登陆成功后提示信息 57

Ascii码文本查看工具 58

语言设置 58

时区设置 59

简单命令 59

用户登录查询 59

Screen命令(分屏功能) 59

Echo命令 60

历史命令 61

历史命令参数 63

History命令 64

命令历史环境变量 64

文件名规则 64

颜色代表的文件类型 64

Linux 命令、文件名区分大小写!!! 65

Linux与windows目录对应表

/usr(系统文件) C:\windows()
/home(用户目录) C:\users
/root(管理员的家目录) C:\users\administrator
/boot(启动内核) EFI引导分区
/var /log(变化目录/var) Windows日志
/tmp(临时文件目录) C:\windows\temp
/proc(虚拟目录读取的是内存里的文件)
/etc(配置文件) Windows的注册表配置文件
Swap Windows虚拟内存
/bin(所有用户的基本命令,OS同步启动)
/sbin(管理类的基本命令,OS同步启动)
/lib(启动程序依赖的共享库及内核)
/lib64(专用于X86_64系统)
/media(便携式移动挂载点)

查看默认shell:cat /etc/shells

Bash快捷键

Ctrl+l 清屏(同clear命令)

Ctrl+o 执行当前命令,并重新显示本命令(相当于上箭头+回车)

Ctrl+s 锁定屏幕,但命令依然可以操作

Ctrl+q 解锁屏幕

Ctrl+c 中断

Ctrl+d 退出

Ctrl+u 删除光标位置至行首的命令字符

Ctrl+k 删除光标位置至行尾的命令字符

Alt+r 删除整行

Ctrl+a 光标到行首

Ctrl+e 光标到行尾

Alt+“重复的次数” alt不松,输入重复次数,松开alt后再输入字符

命令列表

A

alias 显示已有的别名命令
Alias abc=cd /etc/sysconfig 定义命令:"abc”为到 sysconfig的快捷命令

B

bc 简单客运
basename 只取命令路径最后的文件名

C

cat(查看文本) cat /etc/redhat-release(查看内核版本)
Cal Cal 查看日历

D

df 显示硬盘分区
dirname 只取命令路径中文件夹路径(踢掉文件名)
dir

E

echo (显示) echo $PS1(查看用户”$PS1”格式)
env 显示当前所有的环境变量
enable (启用) enable (查看已启用的内核命令)
enable echo (启用echo命令)
enable –n echo(禁用echo命令)
exit 通用退出

F

free free –h(查看内存使用率)
file 查看文件类型

G

getenforce Idc策略

H

help 查看内部命令帮助(命令前带"*”表示该命令被禁用了)
Hash 显示缓存的历史命令
Hash –d hostname 清除缓存的"hostname”记录
Hash -r 清除全部缓存
Halt 关机
History 命令历史
Hexdump 查看二进制文件

I

Init Init 3(切换命令行模式)
Init 5(切换图形界面)
Init 0(关机)
Init 6(重启)
ifconfig 查看 ip
iptables –vnL 查看当前IP策略
iconv 文件编码格式转换工具
Iconv –l 系统支持转换的编码

J

K

L

Logout 注销
Localectl 查看本地语言
Lsblk (译为:list block) 列出块信息(硬盘分区列表)

M

mv 移动或重命名 文件、目录
man Man手册帮助
mount "设备路径” "挂载位置” 挂载设备

N

Nano 文本修改工具

O

P

poweroff 关机
pwd 当前路径
Pwd -P 显示真实路径
ps 显示进程

Q

R

runlevel 查看切换历史
rz 上传本地文件到服务器
rm 删除文件、或目录
reboot -f 强制重启
reboot –p 切断电源
rpm –ivh "包路径” 安装rpm包
rename "替换内容” "替换后内容” "文件名”
例如: rename conf conf.bak 1.conf
结果:1.conf.bak
替换文件名中的一部分

S

service network restart 重启网卡
sz 1.txt 下载"1.txt”到本地
Sleep 休眠
su 切换用户
shutdown –r(同价reboot) 重启,不加时间参数默认1分钟后重启
Shutdown –r 3 3分钟后重启
Shutdown –r 14:30 14:30重启
shutdown –h (同价halt) 关机,不加时间参数默认1分钟后关机,同样也可以指定时间关机
shutdown –c 取消关机计划
screen 投屏,远程协助
screen –S "自定义会话名” 创建一个会话
screen –x "会话名” 加入这个会话名的投屏
stat "文件或文件名” 查看详细的原数据
systemctl disable firewalld 禁用防火墙
shred –zvun 5 file.txt 强制删除file.txt ,删除覆盖5次并删除

T

tty 在哪个终端里面
type echo 查看"echo”命令属于内部还是外部命令

U

Uname Uname –r(查看内核版本)
Unalias aaa 取消"aaa”命令的别名

V

Vdir 等价于ll

W

Which显示命令路径 Which cat 显示"cat”命令的绝对路径
Whereis 显示路径及文档 Whereis cat 显示"cat”命令路径及相关文档
Whatis "命令” ====等价====man -f 显示命令man手册在哪个章节

X

xxd 查看二进制文件

Y

Z

分区

  1. 主分区xxx1、xxx2、xxx3,为主分区,逻辑分区从5开始(不会出现4!!!!)

注明:sda1 解释 sd代表是scsi硬盘 a代表是第一块硬盘 1代表是第一个主分区
hdb2 解释 sd代表是ide硬盘 b代表是第二块硬盘 2代表是第二个主分区

1
2
3
sdc5 解释 sd代表是scsi硬盘 c 代表是第三块硬盘 5代表是第一个逻辑区

hdd6 解释 sd代表是ide硬盘 d代表是第四块硬盘 6代表是第二个逻辑区
  1. 最少两个分区”SWAP(虚拟内存)”和“/(根分区)”,其他分区默认在/分区下生产。

理想分区为5个分区:

swap(虚拟内存)、/boot(引导)、/var(日志)、/(所有文件)、/home(用户文件)

分区命令:

df查看文件系统的整体磁盘使用情况 如:分区名称、使用量、可用量、挂载点(目录);默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

-a或--all:包含全部的文件系统;

--block-size=<区块大小>:以指定的区块大小来显示区块数目;

-h或--human-readable:以可读性较高的方式来显示信息;

-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;

-i或--inodes:显示inode的信息;

-k或--kilobytes:指定区块大小为1024字节;

-l或--local:仅显示本地端的文件系统;

-m或--megabytes:指定区块大小为1048576字节;

--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;

-P或--portability:使用POSIX的输出格式;

--sync:在取得磁盘使用信息前,先执行sync指令;

-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;

-T或--print-type:显示文件系统的类型;

-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;

--help:显示帮助;

--version:显示版本信息。

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

Fdisk -l命令用于观察实体硬盘使用情况,也可对硬盘分区查看 新增 删除 合并 分区等。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。所以挂载外设一般用fdisk-l ,然后用mount挂载

-b<分区大小>:指定每个分区的大小;

-l:列出指定的外围设备的分区表状况;

-s<分区编号>:将指定的分区大小输出到标准输出上,单位为区块;

-u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址;

-v:显示版本信息。

图形界面

1.安装图形界面框架:Yum groupinstall “x windows system”

2.查询安装包:yum grouplist (里面会有GNOME Desktop安装包)

3.安装软件:yum install “GNOME Desktop” (dos界面安装包名称区分大小写,必须一致)

4.一路y,确定,直到出现complete! ,表示完成

dos界面与图形化界面切换快捷键:

图形到dos:ctrl+alt+f2 或者 在命令上输入 init 3

dos到图形:输入startx或者 在命令上输入 init 5

startx 与 init5 区别:

startx是单纯的以当前用户执行的身份启动X图形界面,不需要再输入密码语种:英语,无法修改。
init 5 则是启动 runlevel 5所对应的服务,并运行图形登录管理器,重新选择用户登录。只有root有权执,语种:中文

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

在/etc/inittab中设定init:5(使用gdm登录)和使用startx登录图形界面看起来差不多,其实差别挺大的。最主要的差别就是语系。你可能发现你设定的环境是中文的,但是startx后系统桌面环境变成英文的了,并且输入法也调不出来了。
    先说下init 5跟startx启动流程的区别:
    在init 5的模式下,系统会执行/etc/X11目录下的prefdm文件,这是一个script文件,打开看看可以知道,它是用来判断当前的Desktop Manager(桌面系统)的,如gnome还是kde或是其他的。如果都没有找到,那么prefdm会依序执行gdm,kdm,wdm和xdm这几个 Display Manager(显示管理器)。也就是说咱们的fedora默认的Display Manager是gdm。
    which gdm,发现gdm在/usr/sbin/下,file gdm发现是它也是一个script文件,重点就是这里了,打开看看,可以看到在gdm中加载了LC_ALL,LANG, LC_MESSAGES这几个环境变量,从名字可以看出这几个就是语系的信息了,在设定好语系后gdm调用gdm-binary程序。当gdm- binary开始执行时,首先使用的就是gdmgreeter登录程序,到现在就可以看到咱们熟悉的登录界面了。输入用户名密码进入桌面环境。
    再来看使用startx登录图形界面,其实startx也是一个script文件,主要负责加载和设定一些环境变量,最后执行xinit程序,xinit 才是真正的x window启动程序,在startx的执行过程中,不会经过gdm的步骤,所以就没有了语系的定义,也不会有gdmgreeter的登录窗口界面。故而 直接startx后是不用输入用户名密码的,直接以当前用进入xwindow,当然,环境是默认的,English。
    知道了这些就好办了。咱们用startx登录的fvwm的时候,是创建了一个~/.xinitrc文件,在里边写上exec fvwm,那如果要在fvwm中调用中文输入法和定义变量什么的,在这个语句之前写上就OK了。我的.xinitrc文件如下:
export LANGUAGE=zh_CN.UTF-8
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE=SCIM
exec scim&
exec fvwm
重新使用startx进入fvwm,打开gnome-terminal,看看,是不是已经可以输入中文了?OK!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

开机启动图形化界面

首先使用ctrl+alt+f2切换到命令行模式,如果本身就是命令行模式就直接看下面的步骤

然后输入如下命令,查看当前开机启动模式: systemctl get-default

graphical.target代表开机时启动图形化界面

multi-user.target代表开机时启动dos界面

最后输入如下命令设置开机启动图形界面: systemctl set-default graphical.target

如果想开机启动dos界面,就输入如下命令: systemctl set-default multi-user.target

常用命令

图形界面查询IP: ip addr 或者 ifconfig(只能在图形界面用,显示网卡详细信息)

Ping 就是ping

yum install :安装单个软件

yum grouplist :查看这个软件的所有软件包,每次安装前可以先查看yum grouplist有哪些软件,然后再去安装yum groupinstall

yum groupinstall :安装多个软件,安装这个软件的所有依赖的软件包,yum groupinstall安装的时候软件包名必须加双引号,

yum -y groupinstall Desktop (-y自动同意)
yum groupremove :卸载所有软件包,(例:yum groupremove "GNOME Desktop Environment")

关机重启命令:

shutdown -h 10         #计算机将于10分钟后关闭,显示在登录用户的当前屏幕中            

shutdown -h now       #计算机会立刻关机            

shutdown -h 22:22     #计算机会在这个时刻关机            

shutdown -r now        #计算机会立刻重启            

shutdown -r +10        #计算机会将于10分钟后重启          

shutdown –c #取消当前任务

reboot                       #重启            

halt                           #关机            

poweroff                    #关机切断电源

挂载:mount /dev/设备名 /mnt/目录名

卸载2种,设备卸载和挂着目录卸载:umount /dev/设备名字 或者 umount/挂载目录

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。

主机名:hostname

临时修改主机名:hostname “自定义名字”(重启丢失)

永久修改主机名:vi /etc/hostname (修改主机名保存重启)

修改主机IP

Vi /etc/sysconfig/network-scripts/ifcfg-ens33(找到对于网卡文件)编辑该文件(点击i后开始编辑),将bootproto参数改为static(默认为phcp动态)。

onboot参数改为yes,再添加ip、掩码、网关、DNS1、DNS2

linux 目录结构

/dev 硬件设备信息

ll查看/dev下文件列表

d开头的是文件夹

b开头的设备文件是块,以块单位读取数据(如硬盘、光盘,以块为单位4K=4096B个字节)

c开头的设备文件是字符,以字符为单位(如tty,一个字符一个字符的输入)

/etc 配置文件

/bin和/sbin 都是二进制程序文件

/bin给普通用户用

/sbin给系统管理员用

/tmp临时文件

/usr放系统文件和/目录很相似(有点像第二层/)

/var存放临时变化数据(如日志)

/proc“假目录”映射正在运行内存状态以文件表示

/sys“假目录”映射硬件信息

查看块设备列表(查看存储硬件):lsblk

新加硬盘不重启:echo ‘- - -‘ > /sys/class/scsi_host/host0/scan (如果host0不行,可以改为host2)

小技巧:定义别名scandisk方便以后使用:alias scandisk=”echo ‘- - -‘ > /sys/class/scsi_host/host0/scan;echo ‘- - -‘ > /sys/class/scsi_host/host2/scan”

/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中
/bin:/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
/boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/grub。建议单独分区,分区大小100M即可
/dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。
/etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。注:/etc/X11存放与x windows有关的设置。
/home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据
/lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
/lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found
/mnt:/media: 光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。
/opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下
/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
/root: 系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
/sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录,/var/run: 程序或服务启动

后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间

------------------------------------------ 

/dev: 目录
  dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和

windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

Linux沿袭Unix的风格,将所有设备认成是一个文件。

设备文件分为两种:块设备文件(b)和字符设备文件(c)

设备文件一般存放在/dev目录下,对常见设备文件作如下说明:

/dev/hd[a-t]:IDE设备

/dev/sd[a-z]:SCSI设备

/dev/fd[0-7]:标准软驱

/dev/md[0-31]:软raid设备

/dev/loop[0-7]:本地回环设备

/dev/ram[0-15]:内存

/dev/null:无限数据接收设备,相当于黑洞

/dev/zero:无限零资源

/dev/tty[0-63]:虚拟终端

/dev/ttyS[0-3]:串口

/dev/lp[0-3]:并口

/dev/console:控制台

/dev/fb[0-31]:framebuffer

/dev/cdrom => /dev/hdc

/dev/modem => /dev/ttyS[0-9]

/dev/pilot => /dev/ttyS[0-9]

/dev/random:随机数设备

/dev/urandom:随机数设备

(PS:随机数设备,后面我会再写篇博客总结一下)

/dev目录下的节点是怎么创建的?

devf或者udev会自动帮你创建得。

kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的。

------------------------------------------ 

/etc: 目录
  包含很多文件.许多网络配置文件也在/etc 中. 
/etc/rc   or /etc/rc.d   or /etc/rc*.d    启动、或改变运行级时运行的scripts或scripts的目录.
/etc/passwd  
  用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息. 
/etc/fstab  
  启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表. Linux下,也包括用swapon -a启用的swap区的信息.
/etc/group   
  类似/etc/passwd ,但说明的不是用户而是组. 
/etc/inittab  
  init 的配置文件. 
/etc/issue  
  getty 在登录提示符前的输出信息.通常包括系统的一段短说明或欢迎信息.内容由系统管理员确定. 
/etc/motd  
  Message Of The Day,成功登录后自动输出.内容由系统管理员确定.经常用于通告信息,如计划关机时间的警告. 
/etc/mtab  
  当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如df 命令. 
/etc/shadow  
  在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对root可读.这使破译口令更困难. 
/etc/login.defs  
  login 命令的配置文件. 
/etc/printcap  
  类似/etc/termcap ,但针对打印机.语法不同. 
/etc/profile , /etc/csh.login , /etc/csh.cshrc  
  登录或启动时Bourne或C shells执行的文件.这允许系统管理员为所有用户建立全局缺省环境. 
/etc/securetty  
  确认安全终端,即哪个终端允许root登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权. 
/etc/shells  
  列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在 /etc/shells 文件中,如果不是将不允许该用户登录. 
/etc/sysconfig 
  网络配置相关目录

------------------------------------------ 

/proc: 目录

档名    文件内容
/proc/cmdline     加载 kernel 时所下达的相关参数!查阅此文件,可了解系统是如何启动的!
/proc/cpuinfo     本机的 CPU 的相关资讯,包含时脉、类型与运算功能等
/proc/devices     这个文件记录了系统各个主要装置的主要装置代号,与 mknod 有关呢!
/proc/filesystems     目前系统已经加载的文件系统罗!
/proc/interrupts     目前系统上面的 IRQ 分配状态。
/proc/ioports     目前系统上面各个装置所配置的 I/O 位址。
/proc/kcore     这个就是内存的大小啦!好大对吧!但是不要读他啦!
/proc/loadavg     还记得 top 以及 uptime 吧?没错!上头的三个平均数值就是记录在此!
/proc/meminfo     使用 free 列出的内存资讯,嘿嘿!在这里也能够查阅到!
/proc/modules     目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序啦!
/proc/mounts     系统已经挂载的数据,就是用 mount 这个命令呼叫出来的数据啦!
/proc/swaps     到底系统挂加载的内存在哪里?呵呵!使用掉的 partition 就记录在此啦!
/proc/partitions     使用 fdisk -l 会出现目前所有的 partition 吧?在这个文件当中也有纪录喔!
/proc/pci     在 PCI 汇流排上面,每个装置的详细情况!可用 lspci 来查阅!
/proc/uptime     就是用 uptime 的时候,会出现的资讯啦!
/proc/version     核心的版本,就是用 uname -a 显示的内容啦!
/proc/bus/*     一些汇流排的装置,还有 U盘 的装置也记录在此喔!

------------------------------------------ 

/usr: 目录
  /usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution;本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新distribution时无须重新安装全部程序.
/usr/etc            存放设置文件
/usr/games      存放游戏和教学文件
/usr/include      存放C开发工具的头文件
/usr/share         存放结构独立的数据
/usr/bin  
  几乎所有用户命令.有些命令在/bin 或/usr/local/bin 中.
/usr/sbin  
  根文件系统不必要的系统管理命令,例如多数服务程序.  
/usr/share/man , /usr/share/info , /usr/share/doc   
  手册页、GNU信息文档和各种其他文档文件.  
/usr/include  
  C编程语言的头文件.为了一致性这实际上应该在/usr/lib 下,但传统上支持这个名字.
/usr/lib  
  程序或子系统的不变的数据文件,包括一些site-wide配置文件.名字lib来源于库(library); 编程的原始库存在/usr/lib 里.  
/usr/local  
  本地安装的软件和其他文件放在这里.  
/usr/src             存放程序的源代码

------------------------------------------ 

/var: 目录
  /var 包括系统一般运行时要改变的数据.每个系统是特定的,即不通过网络与其他计算机共享.  
/var/catman  
  当要求格式化时的man页的cache.man页的源文件一般存在/usr/man/man 中;有些man页可能有预格式化的版本,存在/usr/man/cat 中.而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了. (/var/catman 经常被清除,就象清除临时目录一样.)  
/var/lib  
  系统正常运行时要改变的文件.  
/var/local  
  /usr/local 中安装的程序的可变数据(即系统管理员安装的程序).注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock .  
/var/lock  
  锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件.  
/var/log  
  各种程序的Log文件,特别是login  (/var/log/wtmp log所有到系统的登录和注销) 和syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除.  
/var/run  
  保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息.
/var/spool  
  mail, news, 打印队列和其他队列工作的目录.每个不同的spool在/var/spool 下有自己的子目录,例如,用户的邮箱在/var/spool/mail 中.  
/var/tmp  
  比/tmp 允许的大或需要存在较长时间的临时文件. (虽然系统管理员可能不允许/var/tmp 有很旧的文件.) 

------------------------------------------ 

比较重要的目录 

在 Linux 系统中,有几个目录是特别需要注意的,以下提供几个需要注意的目录,以及预设相关的用途: 
        /etc: 这个目录相当重要,如前所述,你的开机与系统数据文件均在这个目录之下,因此当这个目录被破坏,那你的系统大概也就差不多该死掉了!而在往后的文件中,你会发现我们常常使用这个目录下的 /etc/rc.d/init.d 这个子目录,因为这个 init.d 子目录是开启一些 Linux 系统服务的 scripts (可以想成是批次檔 )的地方。而在 /etc/rc.d/rc.local 这个文件是开机的执行档。 
        /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的数据都放在这几个目录中,所以如果你在提示字符下找不到某个执行档时,可以在这四个目录中查一查!其中, /bin, /usr/bin 是给系统使用者使用的指令,而 /sbin, /usr/sbin 则是给系统管理员使用的指令!   
        /usr/local: 这是系统预设的让你安装你后来升级的套件的目录。例如,当你发现有更新的 Web 套件(如 Apache )可以安装,而你又不想以 rpm 的方式升级你的套件,则你可以将 apache 这个套件安装在 /usr/local 底下。安装在这里有个好处,因为目前大家的系统都是差不多的,所以如果你的系统要让别人接管的话,也比较容易上手呀!也比较容易找的到数据喔!因此,如果你有需要的话,通常我都会将 /usr/local/bin 这个路径加到我的 path 中。 
        /home: 这个是系统将有账号的人口的家目录设置的地方。     
        /var: 这个路径就重要了!不论是登入、各类服务的问题发生时的记录、以及常态性的服务记录等等的记录目录,所以当你的系统有问题时,就需要来这个目录记录的文件数据中察看问题的所在啰!而 mail 的预设放置也是在这里,所以他是很重要的     
        /usr/share/man, /usr/local/man: 这两个目录为放置各类套件说明档的地方,例如你如果执行 man man,则系统会自动去找这两个目录下的所有说明文件

文件种类: 

谈完了文件格式之后,再来谈谈所谓的文件种类吧!我们在刚刚的属性介绍中提到了最前面的标志 ( d 或 - ) 可以代表目录或文件,那就是不同的文件种类啦!Linux 的文件种类主要有底下

这几种:
    正规文件( regular file ):就是一般类型的文件,在由 ls –al 所显示出来的属性方面,第一个属性为 [ - ]。另外,依照文件的内容,又大略可以分为两种文件种类:
        纯文字文件(ascii) :这是 Unix 系统中最多的一种啰,几乎只要我们可以用来做为设定的文件都属于这一种;
        二进制文件(binary) :通常执行档除了 scripts (文字型批次文件)之外,就是这一种文件格式;   
    目录 (directory):就是目录!第一个属性为 [ d ];
    连结档 (link):就是类似 Windows 底下的快捷方式啦!第一个属性为 [ l ];
    设备档 (device):与系统周边相关的一些文件,通常都集中在 /dev 这个目录之下!通常又分为两种:
    区块 (block) 设备档 :就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘啦!例如你的一号硬盘的代码是 /dev/hda1 等等的文件啦!第一个属性为 [ b ];
    字符 (character) 设备档 :亦即是一些串行端口的接口设备,例如键盘、鼠标等等!第一个属性为 [ c ]。

Linux 的文件系统( inode ): 

在 Linux 系统当中,每个文件不止有文件的内容数据,还包括文件的种种属性,例如:所属群组、所属使用者、能否执行、文

件建立时间、文件特殊属性等等。我们将每个文件的内容分为两个部分来储存,一个是文件的属性,另一个则是文件的内容。

为了应付这两个不同的咚咚,所以 ext2 规划出 inode 与 Block 来分别储存文件的属性( 放在 inode 当中 )与文件的内容( 放置在 Block area 当中 )。当我们要将一个 partition 格式化

( format )为 ext2 时,就必须要指定 inode 与 Block 的大小才行,也就是说,当 partition 被格式化为 ext2 的文件系统时,他一定会有 inode table 与 block area 这两个区域。

Block 已经在前面说过了,他是数据储存的最小单位。那么 inode 是什么?!简单的说, Block 是记录『文件内容数据』的区域,至于 inode 则是记录『该文件的相关属性,以及文件内容

放置在哪一个 Block 之内』的信息。简单的说, inode 除了记录文件的属性外,同时还必须要具有指向( pointer )的功能,亦即指向文件内容放置的区块之中,好让操作系统可以正确的去

取得文件的内容啊

该文件的拥有者与群组(owner/group);
    该文件的存取模式;
    该文件的类型;
    该文件的建立日期(ctime)、最近一次的读取时间(atime)、最近修改的时间 (mtime);
    该文件的容量;
    定义文件特性的旗标(flag),如 SetUID...;
    该文件真正内容的指向 (pointer);

挂载

Linux如何挂载U盘(命令格式:mount /dev/设备名 /mnt/目录名)

1,以root用户登陆
   先加载USB模块 modprobe usb-storage
   fdisk -l 看看U盘的设备
   假如U盘是sda1

2,确定在 目录 /mnt 下建立了 文件夹 /usb,如果未建立可键入一下命令:mkdir /mnt/usb_disk,成功后进行下一步。    

3,载入 u 盘,需键入以下命令:mount  /dev/sda   /mnt/usb_disk     
     成功后,即可使用 u 盘了, 文件就在目录 /mnt/usb 下

Linux如何卸载U盘(命令格式两种umount /dev/设备名 或者 umount /mnt/目录名)

卸载u盘:在使用完u盘后,在拔出前需要先键入卸载U盘命令    
以设备名卸载:umount /dev/sda

以挂载目录卸载:umount /mnt/usb 

Linux硬件设备文件名称

硬件设备 文件名称
IDE设备 /dev/hd[a-d],现在的 IDE设备已经很少见了,因此一般的硬盘设备会以 /dev/sd 开头。
SCSI/SATA/U盘 /dev/sd[a-p],一台主机可以有多块硬盘,因此系统采用 a~p 代表 16 块不同的硬盘。
软驱 /dev/fd[0-1] 
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0 或 /dev/ht0

Rpm和yum区别及使用

一、安装rpm包

格式:rpm -ivh  软件包名
选项
-i:安装软件
-v:显示安装过程
-h:用#表示安装进度(# 2%)
-vv:显示更详细的安装过程信息
-vvv:显示更更详细的安装过程信息

二、卸载rpm包

格式:rpm -e 软件名
选项:
-e:卸载软件

例子:卸载软件包ken

rpm -e ken

三、查询已经安装的rpm包

格式:rpm -q 软件名
选项:
-q:查看一个已经安装的软件(ql qa)
-a:查看所有已经安装的软件all
-l:显示软件安装完成以后生成文件列表(所有文件)list
-i:查看软件包的相关信息 info
-d:显示该软件所生成的说明性质的文档列表docfiles
-c:查看软件所生成的配置文件列表configfiles
--scripts:查看软件相关的脚本

补充:
安装前脚本(preinstall)
安装后脚本(postinstall)
卸载前脚本(preuninstall)
卸载后脚本(postuninstall)


例子:查看ken是否安装

rpm -q ken

例子:查看当前系统所有已经安装的软件

rpm -qa

例子:统计当前系统一共安装了多少个软件

四、查看文件是哪个软件生成的

rpm -qf /path/to/file    

五、升级软件

选项
-U:升级或安装软件
-F:仅仅是升级操作

使用格式;
rpm -Fvh 软件包名
rpm -Uvh 软件包名

软件管理yum 

也是一个rpm包的管理工具,可以实现自动解决rpm包的依赖关系(自动安装依赖顺序进行rpm包的安装)

为何rpm包会有依赖关系?
制作rpm的人,在制作rpm包的时候,就将这个rpm的所依赖的软件的信息保存在这个rpm包的内部

yum的工作原理

1. 需要首先创建一个yum仓库(rpm包仓库、软件仓库)
1)仓库其实就是一个目录
2)仓库中存放的是rpm包
3)仓库中还保存了一个文件,文件中记录了该仓库中所有rpm包的元数据信息
4)元数据信息包括
软件名
软件版本
软件是否已经安装
软件的依赖关系

2. 用 yum 来从仓库中找软件进行安装的过程(比如要安装软件A,A依赖B 和C, B依赖C D)
1)yum首先会扫描保存元数据信息的文件,检查A是否已经安装,如果已经安装,那提示已经安装
2)如果A尚未安装,那么扫描A的依赖关系信息,会发现A 依赖B 和C
3)yum会再次扫描元数据文件,检测B C 是否安装,如果都已经安装,那么会开始开始安装A
4)如果B C尚未安装,那么会检测 B C的依赖关系,会发现B依赖C D
5)yum会再次扫描元数据文件,检测C D是否安装,如果都已经安装,那么会开始开始安装B,然后安装C,,然后安装A

yum仓库

本地:将本地的一个目录做成yum仓库,只有当前系统可以
网络:通过网络将服务器上的一个目录作为yum仓库,网络中的全部主机都可以用

使用yum仓库的方式,就是修改yum的配置文件

yum的配置文件
主:/etc/yum.conf
子:/etc/yum.repos.d/*.repo

/etc/yum.conf文件
cachedir=/var/cache/yum/$basearch/$releasever
指定缓存文件的保存位置,默认:/var/cache/yum/x86_64/7/
keepcache=0
指定是否保留缓存文件


用yum安装软件过程中会从yum仓库下载并缓存多个资源
1)会将yum仓库的元数据文件缓存到配置文件所指定的路径中
2)会将要安装的软件及其依赖的软件一并缓存到配置文件指定的目录中

yum配置文件的构成

[localRpm]      <<< 指定yum仓库的id,可以随便写,但是中间不能有空格
name=xxx        <<< 指定yum仓库的名称,可以随便写
enabled=0|1     <<< 指定是否使用该yum仓库,0表示不使用;1表示使用
gpgcheck=0|1    <<< 指定是否对rpm包做完整性和来源合法性验证,0表示不做验证;1表示必须做验证
gpgkey=         <<< 指定公钥文件(如果gpgcheck=1,那么该项不能省略)
baseurl=        <<< 指定yum仓库的url

yum仓库的url的表示方式

注意:在指定yum仓库的时候,其实不是指向rpm包的目录,而是执行repodata所在目录

本地yum仓库
file://
例子:比如我的yum仓库 /myrpm,此时yum仓库的表示方式就是file:///myrpm
网络yum仓库
http://

创建本地yum仓库

使用光盘中的rpm包作为yum仓库
第一步:挂载光盘

mount /dev/cdrom /mnt

第二步:备份yum自带的配置文件

cd /etc/yum.repos.d

mkdir bak

mv *.repo bak

第三步:创建yum的配置文件,使用光盘作为yum仓库

vim 1.repo

[myrepo]
name=my repo
enabled=1
gpgcheck=0
baseurl=file:///media

第四步:执行yum命令检测结果

yum clean all    <<< 清空yum缓存的全部数据

yum repolist     <<< 检查yum仓库中有多少个可用的rpm包

yum使用
下载不安装
 yum install <软件> --downloadonly --donwloaddir=<目录>
1. 安装软件
yum -y install 软件1 软件2 软件3 ....

2. 卸载软件
yum -y remove 软件1 软件2 软件3 ....

3. 管理包组
        grouplist:查看系统中的全部的包组
        groupinfo 包组名:查看指定包组的信息(包组的作用、包含的软件)
        groupinstall 包组名:安装指定的包组
        groupremove 包组名:卸载指定的包组

CentOS7: 命令行界面升级为图形化界面
yum groupinstall "X Window System" -y
yum groupinstall "GNOME Desktop" "Graphical Administration Tools" -y
这时,我们可以通过命令 startx 进入图形界面,第一次进入会比较慢,请耐心等待。(可能需要重启,命令为reboot)

4. 管理yum的缓存数据
     clean [ packages | metadata | all ]
     all:清除所有数据
     packages:仅仅清除rpm包
     metadata:仅仅清理缓存元数据

5. 查看所有已经安装和尚未安装rpm包
      yum list all 或者yum list 可以列出所有的软件包

6. yum list available:仅仅显示可以安装但是尚未安装的rpm包

7. yum list  installed:仅仅显示已经安装rpm包
     @:表示已经安装rpm

8. 查看yum仓库的信息
      yum repolist

网络yum源的使用方式

国内主流的网络yum仓库地址
mirrors.aliyun.com
mirrors.163.com
mirrors.sohu.com

[epel1]
name = epel
enabled = 1
gpgcheck = 0
baseurl = https://mirrors.aliyun.com/epel/7/x86_64/
cost = 1
[centos]
name = centos base
enabled = 1
gpgcheck = 0
baseurl = http://mirrors.163.com/centos/7/os/x86_64/
rpm的yum源
centos提供的
epel提供的:

例子:使用aliyun提供的epel 和centos的yum源
cd /etc/yum.repos.d
mkdir bak
mv *.repo bak
vim new.repo
[centos]
name=centos repo
enabled=1
gpgcheck=0
baseurl=http://mirrors.163.com

[epel]
name=epel repo
enabled=1
enabled=1
baseurl=http://xxxx

安装卸载软件

rpm管理本地包的安装、卸载、查询,类似Windows 程序卸载
yum拥有rpm的功能,还具备了从网络上下载rpm包和依赖的功能。

程序的格式
1)源码格式的程序:都是以压缩方式呈现的(后缀都是.tar.gz|bz2)
2)rpm格式的程序:这都是编译以后的程序 (后缀都是.rpm)

rpm安装软件:rpm –ivh 软件名 rpm卸载软件:rpm –e 软件名字

yum安装软件:yum install 软件名 yum卸载软件:yum remove 软件名

yum安装本地包(要进入包所在文件目录):yum localinstall 文件名

Linux命令行下如何识别文件类型?

Linux 用蓝色代表目录,其他颜色则表示是文件(绿色代表可执行文件、红色代表压缩文件、浅绿色代表链接文件、白色代表其他文件、黄色代表设备文件等。)

了解不同文件类型所对应的颜色,可以使用 man 命令,例如:

[root@localhost ~]# man dir_colors

有些 Linux 发行版单独使用 ls 命令,无法显示出带有不同颜色的文件和目录,此时就需要使用 ls --color=auto 命令,明确令其使用颜色来区分文件类型

在此基础上,如果不想每次使用 ls 命令时,都显式附带 --color=auto,可以执行如下命令:

[root@localhost ~]# alias ls = 'ls --color=auto'

通过给 ls --color==auto 这个整体设置一个别名 ls,这样当后续使用 ls 命令时,就等同于执行 ls --color=auto 命令。

同时,如果想使这个设置永远生效,还需要将其添加到 /etc/bashrc 或 /home//.bashrc 文件中,前者对所有用户有效,而后者仅对用户有效。

通过 ls -l 命令,我们就可以查看当前目录下所有文件和目录各自的属性

每行代表一个文件或目录,其中第一个字符表示的就是文件的类型

不同字符对应的文件类型
第一个字符 文件类型
- 普通文件,包括纯文本文件、二进制文件、各种压缩文件等。
d 目录,类似 Windows 系统中的文件夹。
b 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。
c 字符设备文件,例如键盘、鼠标等。
s 套接字文件,通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。
p 管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误。
l 链接文件,类似 Windows 系统中的快捷方式。

命令提示符

登录系统后,第一眼看到的内容是:

[root@localhost ~]#

这就是 Linux 系统的命令提示符。那么,这个提示符的含义是什么呢?

  • []:这是提示符的分隔符号,没有特殊含义。

  • root:显示的是当前的登录用户,笔者现在使用的是 root 用户登录。

  • @:分隔符号,没有特殊含义。

  • localhost:当前系统的简写主机名(完整主机名是 localhost.localdomain)。

  • ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。

  • :命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是 #;如果是普通用户,提示符就是 $。

家目录(又称主目录)是什么? Linux 系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家:

  • 超级用户的家目录:/root。

  • 普通用户的家目录:/home/用户名。

cd命令:切换目录

cd 命令的特殊符号
特殊符号 作 用
~ 代表当前登录用户的主目录
~用户名 表示切换至指定用户的主目录
- 代表上次所在目录
. 代表当前目录
.. 代表上级目录

它们的用法分别是:

  1. [root@localhost vbird]# cd ~

表示回到自己的主目录,对于 root 用户,其主目录为 /root

[root@localhost ~]# cd

没有加上任何路径,也代表回到当前登录用户的主目录

[root@localhost ~]# cd ~vbird

代表切换到 vbird 这个用户的主目录,亦即 /home/vbird

  1. [root@localhost ~]# cd ..

表示切换到目前的上一级目录,亦即是 /root 的上一级目录的意思;

需要注意的是,在 Linux 系统中,根目录确实存在 .(当前目录)以及 ..(当前目录的父目录)两个目录,但由于根目录是最顶级目录,因此根目录的 .. 和 . 的属性和权限完全一致,也就是说,根目录的父目录是自身。

  1. [root@localhost /]# cd -

表示回到刚刚的那个目录

pwd命令:显示当前路径

pwd 命令,是 Print Working Directory (打印工作目录)的缩写,目录名是可以重复的使用 pwd 命令,可以输出当前所在目录的完整路径。

pwd –P 显示绝对路径

whoami 命令用于确定当前登陆的用户

ls命令:查看目录下文件

[root@localhost ~]# ls [选项] 目录名称

ls 命令常用选项及功能
选项 功能
-a 显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。
-A 显示全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录。
-d 仅列出目录或文件本身,而不是列出目录或文件内的文件数据。
-f ls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序。
-F 在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket 文件,
-h 以人们易读的方式显示文件或目录大小,如 1KB、234MB、2GB 等。
-i 显示 inode 节点信息。
-l 使用长格式列出文件和目录信息。
-n 以 UID 和 GID 分别代替文件用户名和群组名显示出来。
-r 将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。
-R 连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。
-S 以文件容量大小排序,而不是以文件名排序。
-t 以时间排序,而不是以文件名排序。
--color=never
--color=always
--color=auto
never 表示不依据文件特性给予颜色显示。
always 表示显示颜色,ls 默认采用这种方式。
auto 表示让系统自行依据配置来判断是否给予颜色。
--full-time 以完整时间模式 (包含年、月、日、时、分)输出
--time={atime,ctime} 输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间。

通过使用 -a,你会看到以 . 为开头的几个文件,以及目录文件 (.)、(..)、.gconf 等等,这些都是隐藏的目录和文件。其中,目录文件名以蓝色显示,一般文件以白色显示。
注意,Linux 系统中,隐藏文件不是为了把文件藏起来不让其他用户找到,而是为了告诉用户这些文件都是重要的系统文件,如非必要,不要乱动!所以,不论是 Linux 还是 Windows 都可以非常简单地査看隐藏文件,只是在 Windows 中绝大多数的病毒和木马都会把自己变成隐藏文件,给用户带来了错觉,以为隐藏文件是为了不让用户发现。

只列当前出非隐藏的文件夹:ls –d / (如只列出/root下的非隐藏文件夹:ls –d /root/ /)

只列出.开头的隐藏文件夹:ls –d ./ (如只列出/root下的隐藏文件夹:ls –d /root/./)

只列出.开头的隐藏文件及文件夹:l. (如列出/root下的隐藏文件夹:l. /root)

“ls –l” 7 列的含义:

  1. 第一列:规定了不同的用户对文件所拥有的权限,具体权限的含义将在后续章节中讲解。

  2. 第二列:引用计数,文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。

  3. 第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。

  4. 第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。

  5. 第五列:大小,默认单位是字节。

  6. 第六列:文件修改时间,文件状态修改时间或文件数据修改都会更改这个时间,注意这个时间不是文件的创建时间。

  7. 第七列:文件名或目录名。

想查看某个目录的详细信息,例如:

[root@localhost ~]# ls -l /root/
总用量44
-rw-------.1 root root 1207 1 月 14 18:18 anaconda-ks.cfg
-rw-r-r--.1 root root 24772 1 月 14 18:17 install.log
-rw-r-r--.1 root root 7690 1 月 14 18:17 install.log.syslog

ll命令,是ls -l的别名

mkdir命令:创建目录(文件夹)

mkdir 命令,是 make directories 的缩写,用于创建新目录,此命令所有用户都可以使用。

mkdir 命令的基本格式为:

[root@localhost ~]# mkdir [-mp] 目录名

  • -m 选项用于手动配置所创建目录的权限,而不再使用默认权限。

  • -p 选项递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/test 以及 /home/test/demo。

【例 1】建立目录。

[root@localhost ~]#mkdir cangls
[root@localhost ~]#ls
anaconda-ks.cfg cangls install.log install.log.syslog

我们建立一个名为 cangls 的目录,通过 ls 命令可以查看到这个目录已经建立。注意,我们在建立目录的时候使用的是相对路径,所以这个目录被建立到当前目录下。

【例 2】使用 -p 选项递归建立目录。

[root@localhost ~]# mkdir lm/movie/jp/cangls
mkdir:无法创建目录"lm/movie/jp/cangls":没有那个文件或目录
[root@localhost ~]# mkdir -p lm/movie/jp/cangls
[root@localhost ~]# ls
anaconda-ks.cfg cangls install.log install.log.syslog lm
[root@localhost ~]# ls lm/
movie

这里只查看一级子目录,其实后续的jp目录、cangls目录都已经建立

【例 3】使用 -m 选项自定义目录权限。

[root@localhost ~]# mkdir -m 711 test2
[root@localhost ~]# ls -l
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

仔细看上面的权限部分,也就是 ls 命令输出的第一列数据(绿色部分),test 和 test1 目录由于不是使用 -m 选项设定访问权限,因此这两个目录采用的是默认权限(这里的默认权限值是 755,后续章节再详细介绍默认权限)。
而在创建 test2 时,使用了 -m 选项,通过设定 711 权限值来给予新的目录 drwx--x--x 的权限,

rmdir命令:删除空目录

和 mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为:

[root@localhost ~]# rmdir [-p] 目录名

-p 选项用于递归删除空目录。

这个命令比较"笨",所以并不常用。后续我们会学习 rm 命令,使用此命令不但可以删除目录,还可以删除文件

Linux文件3个时间点(access time,modify time,change time)

查看文件的3个时间:stat “文件目录或路径”

如图所示,会出现3个类型的时间,分别是Access,Modify,Change。

access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。

查看a.txt的访问时间:ll –-time=atime a.txt

modify time:表示最后一次修改文件的时间

查看a.txt的修改时间:ll a.txt

change time:表示最后一次文件属性改变的时间,包括权限大小属性等等

查看a.txt的属性改变时间:ll –-time=ctime a.txt

access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。

modify time:表示最后一次修改文件的时间。

change time:表示最后一次对文件属性改变的时间,包括权限,大小,属性等等。

总结:

1)当仅读取或访问文件时,access time 改变,而modify time ,change time 不会改变。

2)当修改文件内容时,modify time ,change time 会改变,access time 不一定改变。

3)当修改文件权限属性时,change time 改变,而access time ,modify time 不会改变。

touch命令 创建文件

Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

ls -l 可以显示档案的时间记录,stat 命令显示3个时间戳

语法

touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

参数说明:

a 改变档案的读取时间记录。
m 改变档案的修改时间记录。
c 假如目的档案不存在,不会建立新的档案。与--no-create的效果一样。
f 不使用,是为了与其他unix系统的相容性而保留。
r 使用参考档的时间记录,与--file的效果一样。
d 设定时间与日期,可以使用各种不同的格式。
t 设定档案的时间记录,格式与date指令相同。
--no-create 不会建立新档案。
--help 列出指令格式。
--version 列出版本讯息。

Stat命令显示某个文件3个时间戳命令:stat [文件或目录…]

-a:修改文件的access time

例如更新1.txt文件的access为当前时间命令:touch –a 1.txt

注意:access time修改后,change time也被修改(因为状态发生了改变)。

-m:修改文件的modify time

例如更新1.txt文件的modify为当前时间命令:touch –m 1.txt

注意:modify time修改后,change time也被修改(因为状态发生了改变)。

-c:不创建不存在的文件(当touch后操作多个文件时,不存在的文件将不会被创建)

-t:修改文件为指定的日期时间。

例如修改test.txt文件的access时间为2010年12月12日17时50分30秒(参数为-at)

修改Modify时间参数为:-mt

注意:change time发生了变化,变成了当前时间。

该选项的时间格式为[[CC]YY]MMDDhhmm[.ss] 

ln命令:在文件之间建立链接(硬链接和软链接)

ext 文件系统(Linux 文件系统)是如何工作的。我们在前面讲解了分区的格式化就是写入文件系统,而我们的 Linux 目前使用的是 ext4 文件系统。用一张示意图来描述 ext4 文件系统

ext4 文件系统会把分区主要分为两大部分(暂时不提超级块):小部分用于保存文件的 inode (i 节点)信息;剩余的大部分用于保存 block 信息。

inode 的默认大小为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。大家如果仔细查看,就会发现 inode 中是不记录文件名的,那是因为文件名记录在文件所在目录的 block 中。

block 的大小可以是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,如果一个 block 放不下数据,则可以占用多个 block。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block,虽然最后一个 block 不能占满,但也不能再放入其他文件的数据。这 3 个 block 有可能是连续的,也有可能是分散的。

由此,我们可以知道以下 2 个重要的信息:

  1. 每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向;

  2. 如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块;

ln 命令

ln 命令用于给文件创建链接,根据 Linux 系统存储文件的特点,链接的方式分为以下 2 种:

  • 软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。

  • 硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。

ln 命令的基本格式如下:

[root@localhost ~]# ln [选项] 源文件 目标文件

选项:
-s:建立软链接文件。如果不加 "-s" 选项,则建立硬链接文件;

-f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;

【例 1】创建软链接:

[root@localhost ~]# touch bols
[root@localhost ~]# In -s /root/bols /tmp

建立软链接文件

这里需要注意,软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接文件会报错。这是初学者非常容易犯的错误。

【例 2】创建硬链接:

[root@localhost ~]# touch cangls
[root@localhost ~]# ln /root/cangls /tmp

建立硬链接文件,目标文件没有写文件名,会和原名一致

也就是/tmp/cangls 是硬链接文件

ln创建链接的深度剖析

建立硬链接和软链接非常简单,那这两种链接有什么区别?它们都有什么作用?这才是链接文件最不容易理解的地方,我们分别来讲讲。

ln创建硬链接

我们再来建立一个硬链接文件,然后看看这两个文件的特点。

[root@localhost ~]# touch test

建立源文件

[root@localhost ~]# ln /root/test /tmp/test-hard

给源文件建立硬链接文件 /tmp/test-hard

[root@localhost ~]# ll -i /root/test /tmp/test-hard
262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /root/test-hard
262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /tmp/test-hard

查看两个文件的详细信息,可以发现这两个文件的 inode 号是一样的,"ll"等同于"ls -l"。

这里有一件很奇怪的事情,我们之前在讲 inode 号的时候说过,每个文件的 inode 号都应该是不一样的。inode 号就相当于文件 ID,我们在查找文件的时候,要先查找 inode 号,才能读取到文件的内容。
但是这里源文件和硬链接文件的 inode 号居然是一样的,那我们在查找文件的时候,到底找到的是哪一个文件呢?我们来画一张示意图

在 inode 信息中,是不会记录文件名称的,而是把文件名记录在上级目录的 block 中。也就是说,目录的 block 中记录的是这个目录下所有一级子文件和子目录的文件名及 inode 的对应;而文件的 block 中记录的才是文件实际的数据。
当我们查找一个文件,比如 /root/test 时,要经过以下步骤:

  1. 首先找到根目录的 inode(根目录的 inode 是系统已知的,inode 号是 2),然后判断用户是否有权限访问根目录的 block。

  2. 如果有权限,则可以在根目录的 block 中访问到 /root 的文件名及对应的 inode 号。

  3. 通过 /root/ 目录的 inode 号,可以查找到 /root/ 目录的 inode 信息,接着判断用户是否有权限访问 /root/ 目录的 block。

  4. 如果有权限,则可以从 /root/ 目录的 block 中读取到 test 文件的文件名及对应的 inode 号。

  5. 通过 test 文件的 inode 号,就可以找到 test 文件的 inode 信息,接着判断用户是否有权限访问 test 文件的 block。

  6. 如果有权限,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问。

按照这个步骤,在给源文件 /root/test 建立了硬链接文件 /tmp/test-hard 之后,在 /root/ 目录和 /tmp/ 目录的 block 中就会建立 test 和 test-hard 的信息,这个信息主要就是文件名和对应的 inode 号。但是我们会发现 test 和 test-hard 的 inode 信息居然是一样的,那么,我们无论访问哪个文件,最终都会访问 inode 号是 262147 的文件信息。

这就是硬链接的原理。硬链接的特点如下:

  • 不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。

  • 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 262147 的文件)都可以被访问。

  • 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。

  • 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。

  • 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。

硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除 inode 号是一样的之外,没有其他明显的特征。这些特征都使得硬链接并不常用,大家有所了解就好。

我们通过实验来测试一下。

[root@localhost ~]# echo 1111 >>/root/test

向源文件中写入数据

[root@localhost ~]# cat /root/test
1111
[root@localhost ~]# cat /tmp/test-hard
1111

源文件和硬链接文件都会发生改变

[root@localhost ~]# echo 2222 >> /tmp/test-hard

向硬链接文件中写入数据

[root@localhost ~]# cat /root/test
1111
2222
[root@localhost ~】# cat /tmp/test-hard
1111
2222

源文件和硬链接文件也都会发生改变

[root@localhost ~]# rm -rf/root/test

删除源文件

[root@localhost ~]# cat /tmp/test-hard
1111 2222

硬链接文件依然可常读取

ln创建软链接

软链接也称作符号链接,相比硬链接来讲,软链接就要常用多了。我们先建立一个软链接,再来看看软链接的特点。

[root@localhost ~]# touch check

建立源文件

[root@localhost ~]# ln -s /root/check /tmp/check-soft

建立软链接文件

[root@localhost ~]# ll -id /root/check /tmp/check-soft
262154 -rw-r--r-- 1 root root 0 6月 19 11:30 /root/check
917507 lrwxrwxrwx 1 root root 11 6月 19 11:31 /tmp/ check-soft -> /root/check

软链接和源文件的 inode 号不一致,软链接通过 -> 明显地标识出源文件的位置

在软链接的权限位 lrwxrwxrwx 中,l 就代表软链接文件

再强调一下,软链接的源文件必须写绝对路径,否则建立的软链接文件就会报错,无法正常使用。

软链接的标志非常明显,首先,权限位中"l"表示这是一个软链接文件;其次,在文件的后面通过 "->" 显示出源文件的完整名字。所以软链接比硬链接的标志要明显得多,而且软链接也不像硬链接的限制那样多,比如软链接可以链接目录,也可以跨分区来建立软链接。

软链接完全可以当作 Windows 的快捷方式来对待,它的特点和快捷方式一样,我们更推荐大家使用软链接,而不是硬链接。

大家在学习软链接的时候会有一些疑问:Windows 的快捷方式是由于源文件放置的位置过深,不容易找到,建立一个快捷方式放在桌面,方便查找,那 Linux 的软链接的作用是什么呢?

笔者个人觉得,软链接主要是为了照顾管理员的使用习惯。比如,有些系统的自启动文件 /etc/rc.local 放置在 /etc 目录中,而有些系统却将其放置在 /etc/rc.d/rc.local 中,那么干脆对这两个文件建立软链接,不论你习惯操作哪一个文件,结果都是一样的。

如果你比较细心,则应该已经发现软链接和源文件的 inode 号是不一致的,我们也画一张示意图来看看软链接的原理

软链接和硬链接在原理上最主要的不同在于:硬链接不会建立自己的 inode 索引和 block(数据块),而是直接指向源文件的 inode 信息和 block,所以硬链接和源文件的 inode 号是一致的;而软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的,而且在软链接的 block 中,写的不是真正的数据,而仅仅是源文件的文件名及 inode 号。

我们来看看访问软链接的步骤和访问硬链接的步骤有什么不同。

  1. 首先找到根目录的 inode 索引信息,然后判断用户是否有权限访问根目录的 block。

  2. 如果有权限访问根目录的 block,就会在 block 中查找到 /tmp/ 目录的 inode 号。

  3. 接着访问 /tmp/ 目录的 inode 信息,判断用户是否有权限访问 /tmp/ 目录的 block。

  4. 如果有权限,就会在 block 中读取到软链接文件 check-soft 的 inode 号。因为软链接文件会真正建立自己的 inode 索引和 block,所以软链接文件和源文件的 inode 号是不一样的。

  5. 通过软链接文件的 inode 号,找到了 check-soft 文件 inode 信息,判断用户是否有权限访问 block。

  6. 如果有权限,就会发现 check-soft 文件的 block 中没有实际数据,仅有源文件 check 的 inode 号。

  7. 接着通过源文件的 inode 号,访问到源文件 check 的 inode 信息,判断用户是否有权限访问 block。

  8. 如果有权限,就会在 check 文件的 block 中读取到真正的数据,从而完成数据访问。

通过这个过程,我们就可以总结出软链接的特点(软链接的特点和 Windows 中的快捷方式完全一致)。

  • 不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变。

  • 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。

  • 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号。

  • 软链接可以链接目录。

  • 软链接可以跨分区。

  • 我们测试一下软链接的特性。

  • [root@localhost ~]# echo 111>>/root/check

修改源文件

[root@localhost ~]# cat /root/check
111
[root@localhost ~]# cat /tmp/check-soft
111

不论是源文件还是软链接文件,数据都发生改变

[root@localhost ~]# echo 2222 >>/tmp/check-soft

修改软链接文件

[root@localhost ~]# cat /tmp/check-soft
111
2222
[root@localhost ~]# cat /root/check
111
2222

不论是源文件还是软链接文件,数据也都会发生改变

[root@localhost ~]# rm -rf/root/check

删除源文件

[root@localhost ~]# cat /tmp/check-soft
cat: /tmp/check-soft:没有那个文件或目录

软链接无法正常使用

  • 软链接是可以链接目录的,例如:

  • [root@localhost ~]# mkdir test

建立源目录

[root@localhost ~]# ln -s /root/test/ /tmp/
[root@localhost ~]# ll -d /tmp/test
lrwxrwxrwx 1 root root 11 6月 19 12:43 /tmp/test->/root/test/

软链接可以链接目录

总结:软连接可以链接目录或者文件,如WINDOWS的快捷方式,链接必须绝对路径。(硬链接只可以链接文件,不可以目录,只删除硬链接文件或者源文件其中一个时,文件依然存在)

cp命令:复制文件和目录

基本格式如下:

[root@localhost ~]# cp [选项] 源文件 目标文件

选项:

  • -a:相当于 -d、-p、-r 选项的集合,all,充当备份效果!原文件大小属性权限一样!

(常用备份方法:cp –a 1.txt 1.txt.bak ,实现复制1.txt到1.txt.bak

也可以:cp –a 1.txt{,.bak},可理解为“逗号”将花括号内分两部分,空格和.bak)

  • -v 显示copy过程

常用备份配合 cp –av

  • -d:如果复制文件为软链接(硬链接无效),则复制出的目标文件也为软链接;(如果不加这个参数,复制文件为软连接,则复制过来的是真是文件)

  • -i:询问,如果目标文件已经存在,则会询问是否覆盖;(如果默认别名是cp –i,不想每次询问,可以在命令前加“\”,使用原始命令而不使用别名的时候,执行原始命令,相当于不加任何参数,实现不询问)

  • -n 不覆盖

  • -l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;

  • -s:把目标文件建立为源文件的软链接文件,而不是复制源文件;

  • -p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);

  • -r:递归复制,用于复制目录;

  • -u:(--update)若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。常用于更新文件使用时间

  • -b:备份一次,只能备份上一次,再次备份会被覆盖。

  • --backup=numbered 备份的文件带次数

复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为 cp 命令默认执行的是“cp -i”

复制目录只需使用“-r”选项

复制软链接文件时不使用 "-d" 选项,则 cp 命令复制的是源文件,而不是软链接文件;只有加入了 "-d" 选项,才会复制软链接文件。请大家注意,"-d" 选项对硬链接是无效

如果使用 "-l" 选项,则目标文件会被建立为源文件的硬链接;而如果使用了 "-s" 选项,则目标文件会被建立为源文件的软链接。

两个选项和 "-d" 选项是不同的,"d" 选项要求源文件必须是软链接,目标文件才会复制为软链接;而 "-l" 和 "-s" 选项的源文件只需是普通文件,目标文件就可以直接复制为硬链接和软链接。

rm命令:删除文件或目录

基本格式为:

[root@localhost ~]# rm[选项] 文件或目录

选项:

  • -f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录。

  • -i:和 -f 正好相反,在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录。

  • -r:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。

rm 命令如果任何选项都不加,则默认执行的是"rm -i 文件名",也就是在删除一个文件之前会先询问是否删除

删除目录,则需要使用"-r"

"-rf" 选项是用来删除目录的,也可删除文件。为了使用方便,一般不论是删除文件还是删除目录,都会直接使用 "-rf" 选项

一些重要文件需要强制删除,防止恢复的文件可以使用shred命令来覆盖删除:

命令格式:Shred - 【选项】 文件名

选项:

-z 最后一次覆盖添加0,以隐藏覆盖操作

-v 显示操作进度

-u 覆盖后截断并删除文件

-n “次数” 指定覆盖次数

例如:#shred –zvun 5 file.txt (将file.txt删除并覆盖5次后删除)

mv命令:移动文件或改名

基本格式如下:

[root@localhost ~]# mv 【选项】 源文件 目标文件

选项:

  • -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;

  • -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);

  • -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;

  • -v:显示文件或目录的移动过程;

  • -u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级;

【例 1】移动文件或目录。

[root@localhost ~]# mv cangls /tmp

移动之后,源文件会被删除,类似剪切

[root@localhost ~]# mkdir movie
[root@localhost ~]# mv movie/ /tmp

也可以移动目录。和 rm、cp 不同的是,mv 移动目录不需要加入 "-r" 选项

如果移动的目标位置已经存在同名的文件,则同样会提示是否覆盖,因为 mv 命令默认执行的也是 "mv -i" 的别名,例如:

[root@localhost ~]# touch cangls

重新建立文件

[root@localhost ~]# mv cangls /tmp
mv:县否覆盖"tmp/cangls"?y

由于 /tmp 目录下已经存在 cangls 文件,所以会提示是否覆盖,需要手工输入 y 覆盖移动

【例 2】强制移动。
之前说过,如果目标目录下已经存在同名文件,则会提示是否覆盖,需要手工确认。这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。

如果我们确认需要覆盖已经存在的同名文件,则可以使用 "-f" 选项进行强制移动,这就不再需要用户手工确认了。例如:

[root@localhost ~]# touch cangls

重新建立文件

[root@localhost ~]# mv -f cangls /tmp

就算 /tmp/ 目录下已经存在同名的文件,由于"-f"选项的作用,所以会强制覆盖

【例 3】不覆盖移动。
既然可以强制覆盖移动,那也有可能需要不覆盖的移动。如果需要移动几百个同名文件,但是不想覆盖,这时就需要 "-n" 选项的帮助了。例如:

[root@localhost ~]# ls /tmp
/tmp/bols /tmp/cangls

在/tmp/目录下已经存在bols、cangls文件了

[root@localhost ~]# mv -vn bols cangls lmls /tmp/、
"lmls"->"/tmp/lmls"

再向 /tmp/ 目录中移动同名文件,如果使用了 "-n" 选项,则可以看到只移动了 lmls,而同名的 bols 和 cangls 并没有移动("-v" 选项用于显示移动过程)

【例 4】改名。
如果源文件和目标文件在同一目录中,那就是改名。例如:

[root@localhost ~]# mv bols lmls

把 bols 改名为 lmls

目录也可以按照同样的方法改名。

【例 5】显示移动过程。
如果我们想要知道在移动过程中到底有哪些文件进行了移动,则可以使用 "-v" 选项来查看详细的移动信息。例如:

[root@localhost ~]# touch test1.txt test2.txt test3.txt

建立三个测试文件

[root@localhost ~]# mv -v *.txt /tmp
"test1.txt" -> "/tmp/test1.txt"
"test2.txt" -> "/tmp/test2.txt"
"test3.txt" -> "/tmp/test3.txt"

加入"-v"选项,可以看到有哪些文件进行了移动

Shell通配符

Shell 通配符及其作用
符号 作用
* 匹配任意数量的字符。(不匹配隐藏文件)
? 匹配任意一个字符。
[ ] 匹配括号内的任意一个字符,甚至 [ ] 中还可以包含用 -(短横线)连接的字符或数字,表示一定范围内的字符或数字。注意:[a-c] 包含的是a、A、b、B、c、C
例:[wang],表示包或w或a或n或g,下图中fw,fa,fn,fg
例:剔除[^wang],表示剔除含有或w,或a,或n,或g如下图,不显示fw,fa,fn,fg

只列出文件夹:ls –d */

只列出.开头的隐藏文件及文件及:l. (如:列出/root下的隐藏文件夹:l. /root)

为了学习这些通配符的用法,首先需要建立一个空目录(如 test),并在该目录中创建一些文件(供测试用),执行命令如下:

[root@localhost etc]# makdir test
[root@localhost etc]# cd test
[root@localhost test]# touch apple banana grape grapefruit watermelon
[root@localhost test]# ls
apple banana grape grapefruit watermelon

在此基础上,继续执行如下命令:

[root@localhost test]# ls a <--匹配所有以 a 字符开头的文件名
apple
[root@localhost test]# ls g
t <--匹配所有以 g 字符开头,以 t 字符结尾的文件名
grapefruit
[root@localhost test]# ls e <--匹配所有包含 e 字符的文件名
apple grape grapefruit watermelon
[root@localhost test]# ls n <--匹配所有包含 n 字符的文件名
banana watermelon

结合以上实例,因为 * 可以匹配任何数量的字符,因此可以一一实现实例中标注的功能。

接下来,列举一下使用 ? 匹配文件名的示例:

[root@localhost test]# ls ????e
apple grape
[root@localhost test]# ls g???e*
grape grapefruit

因为 1 个 ? 只能匹配 1 个任意字符,因此该示例中第一个例子表示的是匹配任意包含 5 个字符但以 e 结尾的文件(apple 和 grape),第二例子表示匹配任何以 g 开头且第 5 个字符为 e 的文件(grape 和 grapefruit)。

最后,列举一些使用括号 [] 匹配文件名的示例:

[root@localhost test]# ls [abw]
apple banana watermelon
[root@localhost test]# ls [agw]
[ne]
apple grape watermelon

此示例中,第一个例子表示匹配任何以 a、b 或 w 开头的文件;第二个例子中表示匹配任何以 a、g、w 开头,以 n 或 e 结尾的文件名。

不仅如此,[] 中还可以通过 -(短横线)表示一定范围内的任意字符(或数字),例如:

[root@localhost test]# ls [a-g]*
apple banana grape grapefruit

其中,[a-g]* 表示匹配以字母 a 到  g 之间任何一个字母开头的文件名。

查看内核及版本,及内存使用率

查看内核版本:Uname –r

查看系统版本:cat /etc/redhat-release

查看当前终端号:tty

查看内存使用率:free –h

图形命令行切换

命令行模式(关闭图形):init 3

切换图形模式:init 5

关机模式:init 0

查看模式切换历史:runlevel

注:N表示开机,3表示命令行,5图形模式

更改当前登录命令提示颜色:

PS1="[\e[1;41;33m][\u@\h \W]\$[\e[0m]"

效果图:

临时使用直接敲命令重启后失效即可

如果要保存颜色属性长期使用,需要将命令保存到文件

Centos在/etc/profile.d/下创建自己定义的文件“自己任意起名.sh”即可。

Ubuntu如果只对当前用户,需要修改当前用户“家目录”下的“.profile”文件最后加入命令。如果全局用户修改颜色属性在/etc/.profile 即可。

hash缓存表

hash 显示曾经使用过的命令

hash –d “命令” ,清除 “命令”的缓存记录

什么是外部命令、什么是内部命令

在 /usr/bin/bash 内核的为内部命令,集成在bash内的命令。

外部就不是没有集成在/usr/bin/bash 的命令

Alias 别名设置

一些常用的命令或者路径比较长且繁琐的时候可以使用。

命令执行优先级(缓存为王):别名最高——然后,内部命令——再后,hash表(内存中)——最后是$PASH路径。

定义别名NAME,其执行相当于执行VALUE:alias NAME=’VALUE’

例:alias abc=’cd /etc/sysconfig’ ,下次敲命令abc即执行 cd /etc/sysconfig

例:alias aaa=’hostname’, 下次敲命令即执行hostname命令

命令行中定义别名,仅对当前shell进程有效,只保持当前内存中,注销退出后失效。

想长期有效需配置文件:对当前用户修改~/.bashrc文件;对所有用户修改/etc/bashrc文件

注:别人只是个人使用习惯,建议放在自己家目录文件

编辑的别名不会立即生效,需要刷新别名

bash重新读取配置文件:source .bashrc或者 . .bashrc(“source”命令=“.”命令)

撤销别名:unalias “别名”

当别名和原始命令相同时,如果想使用原始命令有3中方法:1.可再命令前加\(如:\echo),2.用单引号包括命令(如:’echo’),3直接写命令路径

系统时间及硬件时间修改

date 显示当前系统时间

修改时间:date 月日时分年.秒 (如:050214072020.08 表示05月02日14时07分 2020年08秒)

同步时间,以某个ip或域名:ntpdate ntp1.aliyun.com(和百度同步时间)

clock 显示当前BIOS时间

clock -s (bios和系统时间同步,以BIOS时间为准)

clock -w(bios和系统时间同步,以系统时间时间为准)

变量设置

临时设置变量,退出注销shell失效

[root@localhost ~]# WORKDIR=/home/work1
[root@localhost ~]# cd $WORKDIR
[root@localhost work1]# pwd
/home/work1

帮助命令

简单命令帮助说明:whatis “命令”

详细命令帮助分内部和外部

内部命令:

简单命令帮助使用:help “命令”

详细命令帮助使用:man “命令”

外部命令:

第一种:“命令” --help或者 “命令” -h

第二种:man “命令”

man命令中文包安装,需要加装光盘,并安装中文包,命令:rpm -ivh /run/media/test/CentOS 7 x86_64/Packages/man-pages-zh-CN-1.5.2-4.el7.noarch.rpm

注销后man帮助为中文

使用方法:

1.Whatis “命令”,查看命令在哪个章节(带字幕p的和开发有关的)

2.man “章节号” “命令”(如果不加章节号,默认从最小的章节号显示帮助)

3.如果想每个章节都看可以使用命令:man -a “命令”(首个帮助章节退出以后会提示是否继续后面章节),

4.如下图whatis man (显示3个手册,1、1ssl、5)

man –a passwd (手册展开顺序从小到大,也就是先1>1ssl>5)

寻找和命令相关的手册:man –k “命令”

如下图,寻找与echo相关的命令,然后打开 fcping 的第8张手册

Whatis 等价 man -f

man帮助搜索关键字时可以使用“/要搜索的关键字”,可以实现搜索功能,如下图搜索 second关键字,

man常用的搜索功能键:

小写n 向下搜索
大写N 反向搜索
空格 向下翻页
Ctrl+b 向上翻页
小写q 退出
1G 回到文件首部
G 翻至文件尾部

软件包文档说明目录: /usr/share/doc

登陆前提示信息

修改配置直接 /etc/issue

效果如下图

登陆成功后提示信息

修改配置文件 /etc/motd ,注此文件为 UTF-8格式文件。(ASCIIGenerator软件可将图片转换为字符)

Ascii码文本查看工具

下面2个查看工具,可将文件以16进制查看

hexdump –C 1.txt

xxd 1.txt

语言设置

显示已有语言包列表:localectl list-locales

设置为中文:localectl set-locale LANG=zh_CN.utf8

设置为英文:localectl set-locale LANG=en_US.utf8

时区设置

查看时区列表:timedatectl list-timezones

设置本地时区:timedatectl set-timezone “Asia/Shanghai时区名字”

查看本地时区:ll /etc/localtime

查看当月日历:cal

查看一年日历:cal –y

查看日历帮助:cal –help

查看2008年8月日历:cal 8 2008

简单命令

用户登录查询

1
2
3
4
5
Whoami:显示当前登录用户

Who: 所有当前登录的用户

W:系统当前所有的登录会话及操作

Screen命令(分屏功能)

为防止操作过程以为终端,可提前分出一个屏幕端单独操作;或者创建分屏窗口实现远程协助,远程协助必须是同一主机同一用户(外部软件,需要在线安装或者光盘安装/run/media/CentOS\ 7\ x86_64/Packages/screen。。。。。。rpm)

创建:screen –S “窗口名”

加入:screen –x “窗口名或ID号”

关闭:exit

临时剥离窗口:CTRL+a,d

显示所有已经打开的分屏窗口:screen –ls

重新打开某个分屏窗口:screen –r “窗口名或ID号”

Echo命令

‘’单引号,傻子符合,放里面的都不认识,只认为是是普通字符:

“”双引号,一般聪明符合,只能识别变量符号。

` 反引号,最聪明符合,放命令、放变量都可识别,(一个命令调用另一个命令是常使用)

历史命令

查看历史执行命令:History

执行重复过的命令:!“命令编号”

也可倒数第10个命令:! “-10”

退出后命令会保存到:家目录 ~/.bash_history 内

从历史命令中找到最近以cat字符串开头的命令:!cat

从历史命令中找到最近包含cat字符的命令:!?cat

当只是开始命令不同而路径相同的情况下,可以使用:^上个命令^要替换的命令

如图:(此命令只替换第一个命令)

Ctrl+r,在历史中搜索命令

Ctrl+g,从历史命令中退出

重新调用上个命令的最后一个参数可以有3中方式:

第一种:!$

第二种:ESC,.(点击ESC松开后,点击.键)

第三种:Alt+ . (按住ALT的同时点击.键)

历史命令参数

!* 利用上个命令的全部参数

如下图

History命令

History –c :清除内存中的历史命令

History –d “命令编号”:清除指定编号的命令

History –n “数量”:显示最近“数量”的历史命令

Echo $HISTSIZE:查看保存历史命令可存放的数量(可更改数量: /etc/profile 文件下修改HISTSIZE=你想要保存的数量,修改后注销登录才生效)

History –a “命令”,直接将命令存入history历史

History –p “命令”:执行命令,但不保存到历史里面

History –s “命令”:伪造历史“命令”,但不执行

命令历史环境变量

查看命令历史的条数:echo $HISTSIZE (或者用echo $HISTFILESIZE,可更改保存的历史数量: /etc/profile 文件下修改HISTSIZE=你想要保存的数量,修改后注销登录才生效)

查看history文件位置:echo ¥HISTFILE

历史命令附带时间:HISTTIMEFORMAT=”%F %T ”(注销丢失,保存到文件才可以实现永久,需要放在/etc/profile.d/”定义名字”.sh 文件。)

不记录敏感的命令,如不记录str1命令,及以str2开头的命令:HISTIGNORE=“str1:str2*。。。”(推荐存放到/etc/profile.d/”定义名字”.sh,自己定义的环境文件)

环境变量:HISTCONTROL

查看当前环境控制:echo $HISTCONTROL (控制记录命令的方式)

当HISTCONTROL等于ignoredups:默认,不记录重复的命令,连续且相同为“重复”

当HISTCONTROL等于ignorespace 不记录以空格开头的命令

当HISTCONTROL等于ignoreboth 相当上面2个组合:不记录连续重复及空格开头

文件名规则

文件名最长255个字节

包括路径在内文件名称最长4095个字节

文件名命名规则:除了“/”以为的所有字符(包括特殊字符的文件名,但不推荐)

如创建文件名为“-h”的文件,使用命令:touch -- -h

如删除特殊文件名“-h”的文件,使用命令:rm -- -h

(也可使用相对路径:rm –f ./-h 也可以用绝对路径)

使用绝对路径法创建“-h”的文件:touch /root/-h

使用相对路径法创建“-h”的文件:touch ./-h (./表示当前目录)

同理绝对路径和相对路径的删除。

颜色代表的文件类型: /etc/DIR_COLORS

-开头文件:普通文件

B开头黄色:设备文件:块设备文件

C开头黄色:设备文件:字符文件

D开头蓝色:目录(directory)

L开头浅蓝色:链接文件

S开头粉色:套接字文件(实现网络工具)

P开头棕色:管道文件(同一个电脑不同程序之间交互数据)

绿色:可执行文件

红色:压缩文件

灰色:其他文件

Linux 命令、文件名区分大小写!!!

和操作系统没有太大区别,跟磁盘文件系统有关,windows系统使用的fat、ntfs不区分大小写,而linux使用的是xfs、ext4文件系统都区分大小写。(如果把fat挂在到linux下可以实现在fat分区上不区分大小写)

PWD命令显示路径

pwd 显示当前路径

pwd –P 显示真是物理绝对路径

pwd –L 显示连接路径(默认)

相对路径和绝对路径

绝对路径是从“/”开始描述路径

相对路径是从当前目录开始,如下图要显示/etc/issue文件,而当前在/etc/sysconfig目录,也就是说/etc是上级目录用两个点: “../”表示上级目录(1个“./”表示当前目录)

基名:basename(提取命令路径最后一个文件名)

目录名:dirname(提取命令路径的文件夹路径)

切换目录

回到上级目录:cd ..

回到家目录:cd ~ (直接CD 也可以回到家目录)

回到“test”用户的家目录:cd ~test

回到刚才离开的目录:cd – (上次目录变量:$OLDPWD)

关闭selinux和防火墙

关闭selinux:打开 /etc/selinux/config文件,修改值SELINUX=disabled。(重启生效)

查看selinux状态:getenforce

关闭防火墙:systemctl disable firewalld.service(重启生效)

查看防火墙状态:iptables –vnL

Touch安全的创建空文件或刷新时间

Touch创建空文件,如果文件存在则只更新时间。

“>”创建文件或导入文件,如果文件名存在则会被覆盖,谨慎使用(基于shell内核命令)

“>>”创建文件或导入文件,如果文件名存在则不做任何操作,包括时间也不更新(基于shell内核命令)

以当天日期命名文件名:touch date +%F.log(注意反向单引号)

以昨天日期命名文件名:touch date –d ‘-1 day’ +%F.log(注意反向单引号和单引号)

同理,创建目录

Meta data 是源数据

确定文件内容

file命令检查文件的类型,然后确定适当的打开命令或应用程序。

File [option] ……

-b 列出文件辨别结果时,不显示文件名称

-f 批量列出文件中,文件名的文件类型(下图)

-L 查看软链接对应源文件的文件类型