Linux的命令是区分大小写的
目录相关的操作
- 切换目录的命令是cd
- .代表的是此层目录
- ..代表上层目录
- -代表前一个工作目录
- ~代表是目前用户身份的主文件夹
- pwd 显示当前的目录
- mkdir 新建一个目录
- rmdir 删除一个空目录
需要注意的是:在所有的目录下都会存在两个目录,分别是.和..,代表此层和上层目录意思。你会发现根目录下,也同样存在这两个目录,根目录下的上层目录也就是根目录自己。
每个用户的主目录/home/[username]
cd //不带任何目录就是回到自己当前的主文件夹
pwd //显示当前目录,可以在后面携带参数 -p就是显示当时真实路径,而不是连接路径。
mkdir //为创建一个目录,有两个参数
mkdir -m 711 //[-m]参数是设置目录权限
mkdir -p test/test1/test2 //创建多层目录
rmdir test//该方法删除目录,必须该目录下不能存在其他的目录和文件,也就是说是空目录。
rmdir -p test/test1 //该参数可以上层的空目录一齐删除。
rm -r test//该命令是将目录下的所有东西删除。
执行文件路径变量:$PATH
命令ls的文件名:/bin/ls,大家一定好奇为什么我们可以在任何地方执行/bin/ls这个命令,就是在系统环境变量中我们配置了/bin,所以系统直接找到,也就执行了。
当环境变量中有多个命令的同名,先找到哪个就执行哪个。
echo $PATH//查询当前用户下的系统的环境变量。
但是话又说回来了,是不是有些命令没有配置到环境变量下,就无法在其他任何地方执行,不一定,你可以写执行该命令的绝对路径。
ifconfig eth0//该查询ip命令一般用户是执行不了,该命令的文件名/sbin/ifcongig
/sbin/ifconfig/eth0 一般用户可以这么操作。
你记住操作系统的命令,要么你把它的路径添加到系统环境变量下,要么你在执行该命令必须写命令的绝对路径。
mv /bin/ls /root//该命令是将ls文件移动到/root下
cd /root
ls//尽管你将ls命令移动到/root下,你当前也是在/root下,但是你是无法直接执行
/root ls 就ok啦
将某一路径添加到环境变量下
PATH=$PATH:/root//将/root目录添加到环境变量下。
(注意在linux 环境变量中是同:分隔,这个和window 不同,window是;分隔,这点需要注意点)
查看文件与目录
ls 目录名称
- -a列出全部的文件,连同隐藏的文件,一起列出来。
- -A列出全部文件,但是不包括..和.
- -d仅列出目录本身,而不是列出目录的文件数据。
- -F这个参数会列出文件的数据类型。*代表是可执行文件,/代表是目录,=代表socket文件,|代表是FIFO文件。
- -h将文件容量以人类易读的方式,例如GB、KB。
- -l将文件按照长格式显示,包括文件属性和权限。
- –color={always,never,auto}有三个可选项,选择文件是否显示颜色。
- –ful-time 显示文件修改的时间。
ls -al ~//将主目录下的所有文件 按照长格式显示 -a和-l可以合并一起写
ls -F ~ //将主目录下的文件 按照文件格式显示
注意
ls -l 目录1 目录2//可以一次查看多个目录
文件的复制、删除、移动
文件复制
cp [参数] 源文件 目标文件
- [-d] 如果源文件为连接文件的属性,则复制的是连接属性,即复制的属性还是指向最初的那个文件。(通过ls -l 列出,连接指向的文件,会通过->指向源文件)
- [-i]如果目标文件已经存在,在覆盖的时候会先进行询问操作。
- [-p]在复制的时候,连同文件的属性一起复制过去,而并非使用默认属性。
- [-r]如果目录还包含的东西,该操作将是递归进行复制。在这种情况下的复制,权限是会改变的。
- [-s]如果文件是连接文件,那么复制的是连接属性,而并非是源文件。
- [-u]只要目的文件发生过修改,就会重新进行复制。
- [-a]该属性复制文件权限属性、数据特性不会改变,包括文件所有者和用户组。
注意点:直接使用cp命令,目的文件的权限会变成默认的,另外文件所有者会使发布cp命令的当前的用户,你想如果不使用-a参数,你把文件拷给别人,啥都不能做,有毛用!
cp如果没有携带参数,复制连接文件,则是复制的是真正的源文件。
复制连接属性
Tip
补充一个小的知识点:
- 用户组,用户的集合,体现的是共享,因为Linux是多用户使用的。
- 文件所有者,就是文件属于谁。
一般的用户是无法修改文件所有者和用户组。
小例题
复制/var/log/wtmp 到/tmp 并改名为/laoqiang
cp -a /var/log/wtmp /tmp/laoqiang
移除目录或文件
rm [参数] 文件或目录
- [-f]就是force意思,忽略不存在的文件,不会警告。
- [-i]在删除前进行询问。
- [-r]递归删除目录。
注意点:我们之前说过rmdir,也是可以删除目录,但是这种仅限在空目录,而rm 可以通过-r删除目录下包含的其他目录或者文件。
Tip
我们可以在查询文件或者删除的时候使用匹配符。?代表一个字符,*代表0个或者多个字符。
ls -l boo?
rm -i boo*
另外我们在文件起名的时候,一定要避免和系统的冲突,加入我们起了一个-aaa- ,在执行下面的命令,就会出现问题。
rm -aaa- 它以为是参数,我们怎么解决。
rm ./-aaa-//写出它的相对路径。
移动文件与目录,或者更名
mv [参数] 源文件 目标文件
- [-f]如果移动的文件路径有同名存在,将不会询问,直接覆盖。
- [-i]移动的时候会进行覆盖。
- [-u]就是源文件有过修改才会进行移动。
这里需要理解,移动之后源文件就不存在了,你可以看到不同路径下的操作是移动,在同意路径下就是文件或者目录的重命名。
取得文件名和目录
我们之前说过完整的文件名最长可以是4096个字符。
啥叫完整的文件名:
/etc/sysconfig/network //我们是如何知道这个完整路径最后指向的目录和文件名
basename /etc/sysconfig/network //运行命令,结果是network,获取的是文件名
dirname /etc/sysconfig/network //运行命令,结果是/etc/sysconfig/得到的是目录名
查看文件内容
cat
cat [参数] 文件路径
- [-A]可以列出文本的特殊字符,而不是按照空白显示。
- [-b]列出行号,但是这个命令仅对于非空白行,如果是空白行,它是不会标的。
- [-E]将每行的断行字符$显示出来。
- [-n]列出每行的行号,空白行也算。
- [-T]将[Tab]键按照^I显示。
- [-v]将特殊字符显示。
tac
tac 文件路径
这个命令就有意思,你发现cat和tac,我的天,是倒过来的,cat是从第一行可以读,而tac是从最后一行往上读。
nl
该命令用于添加行号
nl [参数] 文件路径
- [-b a]代表不论是否为空行,均用行号表示。
- [-b t]如果有空行,空的一行不列出行号,这个是nl默认的。
- [-n ln]行号在最左方显示。
- [-n rn]行号在自己字段的最右方显示,且不加0。
- [-n rz]行号在自己字段的最右方显示,加0。
- [-w]行号字段的占用的位数,默认6位。
可以看出nl 可以对行号做一定的修改,还有更多的包含对行号的的显示设计。
可翻页查看
more
之前查看查看命令,都是一口气直接输出出来,而该命令是可以一页一页的去查看。
more 文件
出现这种命令你应该关注最后一行,它等待你输入的命令操作。
- 空格键:向下翻一页。
- Enter:代表向下滚动一行。
- /字符串:在显示的内容中向下查询该字符串,如果匹配了,很多,在接着按n,就是在匹配中向下一个一个的移动到最后。
- f:显示当前文件的文件名和行数。
- q:代表你要离开more,不在现实该文件内容。
- b:代表文件往回翻页,对管道无效。
less
在刚才的more命令的时候,只可以往后看,不可以往前。
- 空格键:向下翻一页。
- pagedown:向下翻一页。
- pageup:向上翻一页。
- /字符串:向下查询字符串。
- ?字符串向上查询字符串。//其实这种向上向下都是把所有匹配的查找出来,主要使用注意是在n和N上。
- n:重复前一个查询(与/和?有关)
- N:反向重复前一个查询(与/和?有关)
- q:退出。
数据选取
head
取出文件的前面几行
head [参数] 文件
- [-n]后面接数字,代表显示前几行
head -n 20 /etc/man.config
head -n -100 /etc/man.config 只要100行之前的
tail
取后面的几行
tail [参数] 文件
- [-n] 后面接数字代表几行
- [-f]表示持续检测文件尾部所添加的内容,等到ctrl+c,才停止。
非文本文件的查看
我们平常的绝大部分的都是文本文件,但是也有二进制文件。
od [参数] 文件
- [-t a]:利用默认字符输出。
- [-t c]:使用ASCII字符来输出。
- [-t d]:利用十进制来输出。
- [-t f]:利用浮点数来输出。
- [-t o]:利用八进制来输出。
- [-t x]:利用十六进制来输出。
od -t oCc /etc/issue//表示将内容八进制和ASCII对应起来输出。
Tip
Linux文件时间,每个文件下都有三个主要的时间参数。
- modification time (mtime )
而不是文件当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容, 而不是文件的属性或权限。 - status time (ctime )当该文件的“状态”(status)
改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。access time (atime ) - access time(atime)当“该文件的内容被取用”时,就会更新这个读取时间(access)。举例来说,我们使用cat
去读取/etc/man.config,就会更新该文件的atime 了。
ls -l --time=atime|ctime|test//如果是直接执行ls则默认显示mtime。
当系统时间出现问题的时候,你的文件的时间会出现未来的时间,这点不需要惊慌。
修改时间或者创建新文件
Tip
在一行命令中写入多条命令,中间用分号隔开,这些命令可以依次去执行。
touch [参数] 文件
- [-a]:该命令只是修改文件的访问时间。
- [-c]:该命令仅修改文件时间,如果文件不存在就不创建了。
- [-d]:后面可以跟自己设定的时间,可以直接字符串或者 –date=“”。
- [-m]:仅修改mtime。
- [-t]:后面可以跟自己设定的时间,格式[YYMMDDhhmm]。
touch -d "2 days age" test//当前时间往前推两天。
touch -t 0908021203 test//设置2009/8/2 12:03
注意点:在复制文件的时候,即使复制所有属性,ctime这个时间是无法复制的。
文件默认权限
umask
上面的4个数字,最后的三个数字对应的是一般权限,加上参数之后,我们可以看到文件所有者是可读可写可执行,用户组是可读可写,其他是可读可写。
- 对于文件,默认是没有可执行的权限X,只有RW。
- 对于目录,目录中开放所有权限,包括可执行。
我们知道R对应数字4,W对应数字2,X对应数字1。
看上面0022,第二个0对应是文件/目录所有者,0就相当于没有拿权限,2对应文件/目录的1用户组,2就相当于拿可写的权限,最后的2对应的其他人,2就相当于拿可写的权限。
对于文件如果是6,那么该文件就是可读可写(4+2=6)
所以根据查询的,我们可知:
对于文件:-rw-r–r–(第一个-代表是文件)
对于目录:drwxr-xr-x(第一个d代表目录)
修改文件/目录的默认属性
umask 002 //除了其他的没有写,其他一起搞
这里有个小的注意的,文件默认没有x,那么就剩r 4 x 2,如果修改默认003 ,那么其他的具有啥权限,就只是r。3不够拿了4这个权限,只能拿w。
文件隐藏属性
之前我们已经学习过了文件读写可执行属性,文件还有隐藏属性。
chattr
该属性只是针对于Ext2/Ext3文件系统有用。
chattr [参数] 文件或目录
- +:代表增加某一个特殊的参数。
- -:代表删除某个特殊的参数。
- a:当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才可以使用。
- i:可以设置该文件,不能被删除、改名、设置连接、添加、修改数据,root才可以使用。
去除某文件的隐藏属性
chattr -i 文件/目录
查看某文件隐藏属性
lsattr 文件/目录
参数
- -a:将隐藏文件的属性也秀出来;
- -d: 如果接的是目录,仅列出目录本身的属性而非目录内的文件名。
- -R: 连同子目录的数据也一并列出来。
查看文件类型
file:该命令可以查看文件的基本数据是属于ASCLL或者是data文件,或者是binary,甚至可以看是否使用了动态链接库。
命令的查询
我们都知道Linux中的命令都是有完整的文件名。
which [参数] ls//查询ls文件名
- -a将所有在Linux系统下的环境变量path找到的所有命令输出,而不只是找到符合的一个命令输出
文件名的查找
对于Linux下的文件查找,我们可以使用三个命令,find、whereis、locate。whereis、locate是通过文件数据库去查找,所以比较快,而find是通过硬盘查找,慢!
whereis
whereis [参数] 文件/目录
- -b:只找二进制格式的文件。
- -m:只找说明文件manual 路径下的文件。
- -s:只找source 源文件。
- -u:查找不是上面3种的文件。
locate
locate [参数] 文件名/或者关键字
- -i:忽略大小写。
- -r:后面可以接正则表达式。
这两种命令在使用的时候,会有一些问题:可能找到删除的文件,或者是刚刚创建的文件,这个问题的来源就是你文件数据库的更新。
find
find 路径 [参数]
- atime 文件被取用的时间。
- ctime 文件状态被修改的时间。
- mtime 文件被修改的时间。
时间表示方法
+4:以当前时间为基点,大于等于5天前。
-4:以当前时间为基点,小于等于4天内。
4:代表4天到5天的。
0:代表以当前时间,往前推24小时。
查找属于某个账号拥有者的文件
find 文件/目录 -user 账号名
查找系统中不属于任何人的文件
find 文件/目录 -nouser
该命令可以帮助查找那些没有主人的文件。
根据文件大小、类型查找
find 文件/目录 [参数]
- -name:根据文件名来。
- -size:+代表大,-代表小。c:代表byte,k代表1024bytes。+50代表比50KB还要大的文件。
find 命令 -exec 子命令 \;
find 命令可以携带子命令,在子命令中是不可以使用命令别名的;另外,;在bash的环境下,有特殊的意义,可以使用反斜杠来转义。
Tip
在Linux中,用户切换一个目录的时候,一定要保证就是当前的目录必须要有x(可执行)的权限