Centos7学习笔记(二)-基础命令(一)
1、cp命令
cp命令的四个重要参数:
-p 保持文件所有者、权限信息以及时间属性。
-r 递归复制,可操作目录。
-d 若复制的源文件为链接,则仅复制链接本身,且保持链接指向。
-a 等同于以上的dpr。
例:cp test.txt{,.ori} ===== cp test.txt test.txt.ori
2、alias命令
查看或者设置命令别名

由此涉及一个问题——如何忽略因为系统设定的命令别名,导致的命令被强制交互执行?
两个方法:1、完整命令前加“\”,例如:\cp host.txt /opt
2、使用命令的绝对路径 ,例如:/bin/cp host.txt /opt
3、unalias命令
取消别名
4、touch和mkdir
例:touch {1..1000}.txt
mkdir /opt/data{1..3}
多文件或者目录的同时创建。
习题:1、切换到/tmp目录下,查看当前的工作位置,同时创建data1、data2、data3三个目录。
cd /tmp
pwd
mkdir data{1..3}
2、接第1题,分别在data1、data2、data3目录下创建3个文件,名为host1、host2、host3,然后查看/tmp目录的整个目录结构,最后检查下data1和host1两个对象的属性。
touch data{1..3}/host{1..3}
tree /tmp或tmp -d /tmp
ls -ld /data1
ls -l /data1/host1
3、把/etc/hosts文件复制到/tmp/data1下,然后把data1目录复制到/opt下。
cp /etc/hosts /tpm/data1
cp -r /tmp/data1 /opt
4、将/tmp/data1目录移动到/root目录下,然后删除/opt/data1目录下的hosts文件,最后删除/opt下的data1目录。
mv /tmp/data1 /root
rm -f /opt/data1/hosts
rm -rf /opt/data1
5、echo命令
-n不换行输出。
例:

-e可以转义转义字符(常用转义字符:\t、\n、\v
例:

6、cat命令
查看文本文件。重要参数-n,显示行号。
7、more和less
分页显示文本内容。
8、head和tail
显示文件的头部和尾部。同样,-n参数用于控制显示行数。
tail有特殊的参数。-f用于跟踪显示文件尾部的信息。用于调试测试。
9、tr命令
tr用于替换(或者删除,参数-d)文本中的字符,格式为“tr [原始字符] [目标字符] ”。部分的替代sed功能。
命令详解参考:https://blog.51cto.com/yangdong/815734
简例:cat /etc/hosts |tr [a-z] [A-Z]
见下例:(例中用了输入输出重定向来创建文件,执行命令效果)
[root@ecs-ryCz8 /home/study]# cat >stdin_out.txt <<over > We have a tools. > I am studying linux. > Sunday is a good day. > This weeked a boy will play a big game. > We will go to the zoo. > over [root@ecs-ryCz8 /home/study]# cat stdin_out.txt We have a tools. I am studying linux. Sunday is a good day. This weeked a boy will play a big game. We will go to the zoo. [root@ecs-ryCz8 /home/study]# tr "god" "574" < stdin_out.txt > ab.txt [root@ecs-ryCz8 /home/study]# cat ab.txt We have a t77ls. I am stu4yin5 linux. Sun4ay is a 5774 4ay. This weeke4 a b7y will play a bi5 5ame. We will 57 t7 the z77.
上例中,tr转换后,stdin_out.txt文件内容其实是不变的。如果输出结果不>重定向到ab.txt文件,那么转换结果并未存储保留。
这里有一个实用的脚本:
似乎有很多方式,"tr"是其中一种:
#!/bin/sh
dir="/tmp/testdir";
files=`find $dir -type f`;
for i in $files
do
dir_name=`dirname $i`;
ori_filename=`basename $i`
new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` >
#echo $new_filename;
mv $dir_name/$ori_filename $dir_name/$new_filename
done
脚本中,涉及到“dirname”和“basename”命令,解释如下:
1、dirname命令去除文件名中的非目录部分,删除最后一个“\”后面的路径,显示父目录。 语法:dirname [选项] 参数
2、basename命令用于打印目录或者文件的基本名称,显示最后的目录名或文件名。语法:basename [选项] 参数
题目:
1、已知test.txt文件内容为
test
abclinux
just
请给出在屏幕输出时,不包括just字符串的命令。
a)head -2 test.txt
b)grep -v "just" test.txt
2、请用一条命令完成创建目录 /data/wwdata,即创建/data目录及其下的/wwdata目录。
mkdir -p /data/wwdata
3、已知/tmp目录下存在test.txt文件,如何执行命令,才能把/mnt/test.txt拷贝到/tmp下并覆盖文件,系统还不提示覆盖。
a)\cp /mnt/test.txt /tmp/test.txt
b)/bin/cp /mnt/test.txt /tmp/test.txt
10、ls -hil命令展示详解
[root@ecs-ryCz8 /home/study]# ls -hil
33841668 -rw-r--r-- . 1 root root 128 Aug 4 13:41 ab.txt
33754154 -rw-r--r-- . 1 root root 128 Aug 4 13:40 stdin_out.txt
inode序号 文件类型及权限 硬连接数 所有用户 所有用户组 文件大小 月份 日期 时间 文件名
ls命令常用参数:
-a 显示所有
-l 以长格式输出显示
-h 以人类易识别的格式输出
-i 显示inode
-d 只显示目录
-p 区分目录和文件,目录结尾加/符号
-F 不同文件结尾加不同标识,比如二进制文件加*,链接文件加@
-r 倒序输出结果
-t 输出结果按mtime时间排序
--time-style=iso/long-iso/full-iso/locale
[root@ecs-ryCz8 /home/study]# ls --time-style=full-iso -l -rw-r--r-- 1 root root 128 2020-08-04 13:41:48.836000000 +0800 ab.txt [root@ecs-ryCz8 /home/study]# ls --time-style=long-iso -l -rw-r--r-- 1 root root 128 2020-08-04 13:41 ab.txt [root@ecs-ryCz8 /home/study]# ls --time-style=iso -l -rw-r--r-- 1 root root 128 08-04 13:41 ab.txt [root@ecs-ryCz8 /home/study]# ls --time-style=locale -l -rw-r--r-- 1 root root 128 Aug 4 13:41 ab.txt
比如:例题:以一条命令,查找出最近修改过的文件。—— ls -rtl
11、find命令
参数:
-name 按文件名查找
-type 按文件类型查找
-o表示取并集
-a表示取交集
!取反
-exec对查找的结果再处理,需以{} \;结尾,其中\是转义符。
-mtime 按修改时间处理
-newermt 搜索指定日期范围的文件
例如搜索/test下2017-06-03到2017-06-06之间修改过的文件。
$ find /test -type f -newermt 2017-06-03 -a ! -newermt 2017-06-06
为了加速搜索,使用xargs的并行功能。(这一点,在xargs里可以再扩展)
例如,搜索"/"下的所有"Find.pm"结尾的文件:
ls --hide proc / | xargs -i -P 0 find /{} -type f -name "*Find.pm"获取文件绝对路径
$ find $(pwd)或者$ find $PWD
# 执行readlink,它不仅解析软链接,也可以使用-f选项解析普通文件$ find . -exec readlink -f {} \;
# 使用bash的波浪号扩展 `~+`$ find ~+
获取文件名部分(basename)
find的-printf选项有很多修饰符功能,对于处理路径方面的修饰符有%f、%p、%P,其中%f是获取basename(去除所有路径前缀),%p是获取路径自身,一般用不上,%P是获取除了find搜索路径的剩余部分。
首先,想要获取basename,建议使用%f
$ mkdir /tmp/test/test1
$ touch /tmp/test/test1/{x,y,z}.png
$ find /tmp/test -printf "%f\n"
test
a.png
b.png
c.png
test1
x.png
y.png
z.png$ find /tmp/test -printf "%P\n" a.png b.png c.png test1 test1/x.png test1/y.png test1/z.png
从结果中排除目录自身
find搜索目录时,总是会将搜索路径自身也包含到搜索结果中。想办法排除它是必须的。
排除的方法是,加上一个-path选项并取反,-path的参数和find的搜索路径参数必须一致。
$ find /tmp/test ! -path /tmp/test
以下有一个exec执行的实例:
[root@ecs-ryCz8 /home/study]# touch study{1..5}.txt
[root@ecs-ryCz8 /home/study]# mkdir linux{1..3}
[root@ecs-ryCz8 /home/study]# ls
ab.txt linux2 stdin_out.txt study2.txt study4.txt
linux1 linux3 study1.txt study3.txt study5.txt
[root@ecs-ryCz8 /home/study]# find . -name "linux*" -exec cp -a {} /tmp \;
[root@ecs-ryCz8 /home/study]# ls /tmp/ -l
drwxr-xr-x 2 root root 6 Aug 5 10:21 linux1
drwxr-xr-x 2 root root 6 Aug 5 10:21 linux2
drwxr-xr-x 2 root root 6 Aug 5 10:21 linux3
12、xargs命令——从标准输入执行命令
参数:
-n 指定每行最大参数量n,可以将标准输入的文本划分为多行,每行n个参数,默认是以空格作为分隔符。
-d自定义分隔符。
-i把{}内容当做其他命令输出的结果来调用。例:find /data -type f |xargs -i cp {} /tmp
find /data -type f -exec rm -f {} \;和find /data -type -f |xargs rm -f两者的区别
前者表示逐条执行 rm -f xxx 、rm -f yyy这样的命令,后者等同于rm -f xxx yyy的命令。即多条执行与单条执行的区别,效率不同。
13、tar命令
-z表示用gzip来压缩解压缩。------这里其实有个坑。当用tar命令来打包时,用z参数和不用z参数,表面看起来,输出结果是一样的,但是,用z参数后,调用了gzip进行压缩,gzip会让文件的时间不一致,导致最终md5sum计算的md5值是会不一样的。
-j表示用bzip2来压缩解压缩
-c表示创建压缩文件
-v展示过程
-f表示输出或调用文件
-x表示解压
-t查看压缩文件包含内容
-h表示追踪软连接文件,打包时一起打包压缩
--exclude排除不打包的文件或目录
-X用指定的文件内容来作为排除不打包文件的选项,来排除文件或目录、
14、id命令
15、whoami
16、stat命令
stat显示文件的atime、mtime、ctime时间,可以用以下例子帮助理解access time\modify time\change time的各自意思。
[root@ecs-ryCz8 /home/study]# touch 111.txt [root@ecs-ryCz8 /home/study]# stat 111.txt File: ‘111.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fe00h/65024dInode: 33575203 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-08-05 21:26:15.592000000 +0800 Modify: 2020-08-05 21:26:15.592000000 +0800 Change: 2020-08-05 21:26:15.592000000 +0800 Birth: - [root@ecs-ryCz8 /home/study]# echo "test11" >>111.txt [root@ecs-ryCz8 /home/study]# stat 111.txt File: ‘111.txt’ Size: 7 Blocks: 8 IO Block: 4096 regular file Device: fe00h/65024dInode: 33575203 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-08-05 21:26:15.592000000 +0800 Modify: 2020-08-05 21:29:58.104000000 +0800 Change: 2020-08-05 21:29:58.104000000 +0800 Birth: - [root@ecs-ryCz8 /home/study]# chown bloguser:0 111.txt [root@ecs-ryCz8 /home/study]# stat 111.txt File: ‘111.txt’ Size: 7 Blocks: 8 IO Block: 4096 regular file Device: fe00h/65024dInode: 33575203 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/bloguser) Gid: ( 0/ root) Access: 2020-08-05 21:26:15.592000000 +0800 Modify: 2020-08-05 21:29:58.104000000 +0800 Change: 2020-08-05 21:30:29.480000000 +0800 Birth: -
可以这么说,文件经过vi编辑,那么3个时间都变。如果仅仅是类似echo导入内容至文件,那么mtime和ctime改变。mtime是因为文件内容改变。文件内容大小是文件的属性之一。ctime是表示文件属性改变,比如大小改变、所有者改变,都改ctime时间,ctime时间跟mtime时间完全可以不一致。
17、df
-i 查看磁盘inode使用情况
-h 以人类可读的形式查看block使用情况
18、cut
相当于awk的最简化版
-d——用于指定“分隔符”,默认用制表符分隔,例如用 -d "/"这样的分隔符
-f——用于指定列,f后跟数字,如-f3,可跟连续符,如-f3,7,10甚至-f3-10
-c——按字符取内容,后面可跟数字,如-c2-4,-c8-


19、sort
-f——忽略大小写
-n——以数值型内容进行排序,默认是字符串型排序
-r——反向排序
-t——指定分隔符,默认分隔符是制表符
-b——忽略每行前面空白的部分
-u——忽略重复的行,等同于uniq命令
-k——指定排序的列
通过下面的例子,可以看sort各参数的意义。
[study@c7study /home]$ sort -t ":" -k 3,6 /etc/passwd root:x:0:0:root:/root:/bin/bash study:x:1000:1000:study:/home/study:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt tcpdump:x:72:72::/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin [study@c7study /home]$ sort -t ":" -k 3,3 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin study:x:1000:1000:study:/home/study:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt tcpdump:x:72:72::/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin [study@c7study /home]$ sort -n -t ":" -k 3,3 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin study:x:1000:1000:study:/home/study:/bin/bash
du -sh /etc/* |sort -nrk1(这个在这里有问题,应该用h,不应该用n)


20、top命令
查看系统即时状态的命令,该命令可用生成配置文件,在当前用户下的.toprc文件
可自定义各部分显示颜色,最终写入配置文件中。
常用参数:
-d n ——n为数字,代表秒数,top默认是每3秒刷新信息(Centos系)。
-b ——使用批处理模式输出。一般和-n选项结合使用,用于将top命令的输出重定向到文件中
-n n ——n为数字,表示次数。一般和-b选项合用,用于输出重定向
-p ——后跟PID值,用于查看指定PID进程的信息
-s ——使top在安全模式运行,以避免在交互模式出现错误
-u ——指定监听某用户的进程
常规情况下,top命令运行后,即进入交互模式,交互模式可以用各类单字符操作命令,以下是常用的操作命令:
?或h查看其他交互命令
P 以CPU使用率排序,默认就是此选项
M 以内存使用率排序
N 以PID排序
T 以进程使用的累积时间来排序
k 给某个进程一个信号,可以用于杀死进程
r 给某个进程一个nice值(-20-19,越小越高,详见nice命令)
q 退出top交互模式
top输出的前五行容易懂,进程方面的解释如下:
| 列名 | 含义 |
|---|---|
| PID | 进程id |
| PPID | 父进程id |
| RUSER | Real user name |
| UID | 进程所有者的用户id |
| USER | 进程所有者的用户名 |
| GROUP | 进程所有者的组名 |
| TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
| PR | 优先级 |
| NI | nice值。负值表示高优先级,正值表示低优先级 |
| P | 最后使用的CPU,仅在多CPU环境下有意义 |
| %CPU | 上次更新到现在的CPU时间占用百分比 |
| TIME | 进程使用的CPU时间总计,单位秒 |
| TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
| %MEM | 进程使用的物理内存百分比 |
| VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
| SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb |
| RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
| CODE | 可执行代码占用的物理内存大小,单位kb |
| DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
| SHR | 共享内存大小,单位kb |
| nFLT | 页面错误次数 |
| nDRT | 最后一次写入到现在,被修改过的页面数。 |
| S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
| COMMAND | 命令名/命令行 |
| WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
| Flags | 任务标志 |

