Linux学习基础命令(一)


很多小伙伴都想学Linux,感觉这个跟小时候看的电影里的一样,噼里啪啦敲一大堆代码上去,就很厉害的样子。就觉得很难。其实当你真正的开始学习Linux之后,你会发现这是一个很好玩的、很有意思的东西。上次告诉了大家怎么装一台属于自己的Linux虚拟机,那么今天就一起来学学一些基础的命令吧!

修改主机名

对于一些比较有个性的小伙伴来说,肯定想要自己用的系统有自己的个性化的设置,那么主机名肯定是不可少的。主机名主要一般是这样的[root@localhost ~]其中root表示当前登录的用户名,localhost表示的是主机名,~则表示的是当前所在目录。

对于Linux来说,设置主机名有临时生效的,即你关掉Terminal(终端)或者关机你的设置就失效了,一种是永久生效的,就算你关机重启,设置依然生效。

临时生效

[root@localhost ~]# hostname bad

发现设置之后没有效果?这个时候你需要bash一下,进入当前终端的子shell,就可以看到主机名已经更改了。注意!这种设置只是临时的。

永久生效

方法一:

[root@localhost ~]# hostnamectl set-hostname bad  //命令永久修改主机名,最后跟上自己想要设置成的主机名
[root@localhost ~]# bash
[root@bad ~]# cat /etc/hostname  //查看配置文件是否被修改
bad

方法二:
这种方法不建议新手使用哈,可以等学了vi编辑器之后再使用这种方法来修改主机名。

[root@bad ~]# vi /etc/hostname

以上两种方法都是永久修改主机名的

文件管理命令

接下来就是一些简单的基础命令了,大家平时可以多练练,要熟悉每个基础命令。

cd

  • 用于切换工作目录
    • 用法:cd [目录]
      • cd //返回当前用户的家目录
      • cd - //返回上一次工作目录
      • cd ~ //回到当前用户的家目录与直接cd的作用相同

切换工作目录就像是我们在Windows中点开一个文件夹一样,但是在Linux中,我们称之为目录
返回到上一次工作目录这个就像是我们在使用Windows时,并不是一级一级的进入到某个文件夹,这时我们可以使用左上角的一个小箭头,直接回到进到这个文件夹之前的文件夹(可能有点绕)

ls

  • 列出当前目录所有内容(不包含隐藏文件)
    • 用法:ls [选项] [目录]
    • 选项
      • -l 以长格式显示;ls -lll
      • -a 显示隐藏文件
      • -A 显示除"." "…"的所有文件
      • -h 以更易懂的字节单位(K、M等)显示信息
      • -R 递归显示内容
      • -d 显示目录本身的属性
      • -t 以时间正向排序
      • -r 逆向排序,常和 -t 连用

ll

  • 长格式显示,首字符代表文件类型
    • d 表示目录文件
    • - 表示普通文件
    • l 表示链接文件
    • s 套接字文件
    • b 块设备文件
    • c 字符设备文件
[root@bad ~]# ll
total 7
-rw-------. 1 root root 1196 Oct 16 21:55 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 29 00:02 test

mkdir

  • 创建目录
    • 用法:mkdir [选项] [目录]
    • 选项:
      • -p 递归创建目录,即当需要一次创建多层级的目录时
      • -v 显示创建过程详细信息

:使用一条命令在test目录下分别创建1、2、3目录,分别在每个目录下再创建4、5。

[root@bad test]# ls test
[root@bad test]# mkdir -p test/{1/{4,5},2/{4,5},3/{4,5}}
[root@bad test]# tree test  //以目录树的形式显示test目录
test
|-- 1
|   |-- 4
|   `-- 5
|-- 2
|   |-- 4
|   `-- 5
`-- 3
    |-- 4
    `-- 5
9 directories, 0 files

tree命令是需要自己安装的,具体怎么安装可以在学习了yum安装之后自己尝试。

touch

当然有创建目录的命令,就肯定有创建文件的命令,那就是touch了。

  • 创建文件
  • 更新文件时间戳
    • 用法:touch [文件名]
[root@bad test]# ls
bad
[root@bad test]# touch bad1
[root@bad test]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 29 00:56 bad
-rw-r--r--. 1 root root 0 Oct 29 00:56 bad1
[root@bad test]# touch bad1
[root@bad test]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 29 00:56 bad
-rw-r--r--. 1 root root 0 Oct 29 00:57 bad1
  • touch命令只能用来创建文件,mkdir命令只能够用来创建目录

rm

  • 删除文件或目录
    • 用法:rm [选项] [文件或目录]
    • 选项:
      • -f 强行删除文件或目录,不进行提醒
      • -i 删除文件或目录时提醒用户确认,默认rm=rm -i
      • -r 递归删除整个目录树
[root@bad test]# tree a  //以目录树的形式显示
a
|-- b
|   |-- 1
|   `-- 2
|-- c
|   |-- 1
|   `-- 2
`-- d
    |-- 1
    `-- 2
9 directories, 0 files
[root@bad test]# rm a  //删除目录a
rm: cannot remove ‘a’: Is a directory  //不能删除,因为a是个目录
[root@bad test]# rm -rf a  //因为是目录,所以需要加上选项
[root@bad test]# ls
[root@bad test]# mkdir -p a/b/c/d
[root@bad test]# tree a
a
`-- b
    `-- c
        `-- d
3 directories, 0 files
[root@bad test]# rm a
rm: cannot remove ‘a’: Is a directory
[root@bad test]# rm -ri a  //删除前需要用户确认
rm: descend into directory ‘a’? y
rm: descend into directory ‘a/b’? y
rm: descend into directory ‘a/b/c’? y
rm: remove directory ‘a/b/c/d’? y
rm: remove directory ‘a/b/c’? y
rm: remove directory ‘a/b’? y
rm: remove directory ‘a’? y
  • 这里有个条rmdir 的命令,它的作用是删除目录,而且只能删除空目录。

cp

  • 复制
    • 用法:cp [选项] [源文件或目录] [目标文件或目录]
    • 选项:
      • -r 递归复制整个目录树
      • -p 保持源文件的属性不变
      • -a 归档拷贝;时间戳都与原文件保持一致
      • -f 强制覆盖目标同名文件或目录
      • -i 需要覆盖文件或目录时进行提醒;默认cp=cp -i
[root@bad test]# ls
bad  bad5
[root@bad test]# cp bad bad3
[root@bad test]# ls
bad  bad3  bad5
[root@bad test]# mkdir bad2
[root@bad test]# cp bad bad3 bad2/
[root@bad test]# ls bad2
bad  bad3
[root@bad test]# cp -r bad2 bad4
[root@bad test]# ls bad4
bad  bad3
[root@bad test]#

mv

  • 移动,重命名
    • 用法:mv [选项] [源文件或目录] [目标问价或目录]
[root@bad test]# ls
bad  bad2  bad3  bad4  bad5
[root@bad test]# mv bad2 bad1  //将bad2重命名为bad1
[root@bad test]# ls
bad  bad1  bad3  bad4  bad5
[root@bad test]# mv bad5 bad1/  //将文件bad5移动到bad1目录下,提示是否写入
[root@bad test]# ls bad1
bad  bad3  bad5

文本编辑命令

cat

  • 文本输出
    • 用法:cat [选项] [文件名]
    • 选项:
      • -n 显示行号
[root@bad test]# cat bad
a
b
c
[root@bad test]# cat bad1
1
2
3
[root@bad test]# cat bad bad1  //同时查看bad、bad1的内容
a
b
c
1
2
3
[root@bad test]# cat bad bad1 > bad2  //将bad、bad1的内容合并写入到新的bad2文件中
[root@bad test]# cat bad2
a
b
c
1
2
3
[root@bad test]# cat -n bad  //带行号查看文件内容
     1	a
     2	b
     3	c
[root@bad test]# tac bad
c
b
a
  • tac命令是cat命令相同,也叫镜像显示。由名字就可以知道tac命令是将文本倒序输出
  • >表示将文本内容覆盖到某个文件中,>>表示将文本内容追加到某一文件中可以将应该输出到屏幕的内容写入文件中。
  • 还有一条相似的命令tee是从标准输入读取数据,输出一份到屏幕,一份保存到文件,后面直接跟上文件名就可以了。

head、tail

显而易见,就是头和尾嘛。那么在我们使用cat看一个很长很长的文档的时候,这个命令就显得很鸡肋了。如果我只是想看看文件的前几行内容和最后几行的内容呢?这个时候就要用到head和tail了。

  • 默认查看文件的前十行
    • 用法:head [选项] [文件名]
    • 选项:
      • -n 查看前几行,想看几行就把n换成几

tail的用法与head相同,文件中如果有空行,也算作一行。

[root@bad test]# head anaconda-ks.cfg 
#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
cdrom
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
[root@bad test]# tail -5 anaconda-ks.cfg 
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@multimedia
[root@bad test]# 

tail的选项有一个-f它与tailf是一样的效果,作用是实时追踪一个文件的内容,在后期学到脚本之后,可以写一个脚本一直向某一个文件中追加内容,这个时候你就可以使用tailf来查看文件的变化。

sort

  • 文本排序
    • 用法` sort [选项] [文件名]
    • 选项`
      • -n 以数值大小进行排序
      • -r 逆序排序
      • -t 字段分隔符
      • -k 以哪个字段为关键字进行排序
      • -u 去重,排序后相同的行只显示一次
      • -f 排序时忽略字符大小写
[root@bad test]# cat bad   //查看文件bad中的内容
1
5
3
5
2
4
7
2
9
5
[root@bad test]# sort bad  //对文件bad中的内容进行排序
1
2
2
3
4
5
5
5
7
9
[root@bad test]# sort -n bad //以升序排序
1
2
2
3
4
5
5
5
7
9
[root@bad test]# sort -rn bad  //以降序排序
9
7
5
5
5
4
3
2
2
1
[root@bad test]# sort -n -u bad  //先排序,后去重
1
2
3
4
5
7
9
[root@bad test]# 

uniq

  • 输出完全重复的行
    • 用法:wc [选项] [目标文件]
    • 选项:
      • -c 显示文件中行重复的次数
      • -d 只显示重复的行
      • -u 只显示未重复的行
[root@bad test]# sort -n bad | uniq -c
      1 1
      2 2
      1 3
      1 4
      3 5
      1 7
      1 9
[root@bad test]# sort -n bad | uniq -d
2
5
[root@bad test]# sort -n bad | uniq -u
1
3
4
7
9
[root@bad test]# sort -n bad
1
2
2
3
4
5
5
5
7
9
[root@bad test]#
  • 使用uniq前需要先使用sort排序

cut

  • 截取文本内容
    • 用法` cut [选项] [文件]
    • 选项`
      • -d 指定字段分隔符,默认是空格
      • -f 指定要显示的字段
      • -f 1,3 显示1和3字段
      • -f 1-3 显示1到3字段

awk

  • 基于列的文本编辑工具
[root@bad ~]# awk -F: '{ print $1 }' /etc/passwd
  • -F:指定分隔符为冒号;'{ print $1 }'表示第一列;最后表示取/etc/passwd个文件的内容

sed

当然,能取列的,自然就有可以取行内容的。sed就是我们的基于行的编辑工具。

  • 基于行的过滤和转换文本的流编辑器

    • 用法:sed [选项] [文件]
    • 选项:
      • -i 忽略大小写
      • -v 显示没有被正则表达式匹配到的内容
      • -o 只显示被正则表达式匹配到的内容
      • -E 使用扩展正则表达式
      • -q 静默模式,不输出任何信息
        +-A # 此处的#必须是数字。被正则匹配到的内容以及其后面#行的内容都显示出来
      • -B # 此处的#必须是数字。被正则匹配到的内容以及其前面#行的内容都显示出来
      • -C # 此处的#必须是数字。被正则匹配到的内容及其前后各#行的内容都显示出来
[root@bad test]# cat 1.txt 
hello world
hello runtime
hello hello hello 123
hello hello 123
hello jay
[root@bad test]# sed -i 's/hello/hi/2' /test/1.txt //替换文本中第二列重复的内容
[root@bad test]# cat 1.txt 
hello world
hello runtime
hello hi hello 123
hello hi 123
hello jay
grep
  • 由上的代码例子可以看到,sed可以文件中的某一列的内容全部更换

awksed都是很好用的文本编辑工具,完全掌握这两条命令的使用,在以后的工作中,能方便很多!尤其在更改本地仓库的版本信息等之类的服务搭建中,可以很快完成编辑。当然,如果vim文本编辑器掌握的较好,也可以。

wc

  • 统计文件中的单词数量等信息
    • 用法:wc [选项] [目标文件]
    • 选项:
      • -l 统计行数
      • -w 统计单词个数
      • -c 统计字节数
[root@bad test]# cat -n bad  //显示行号查看文件内容
     1	a
     2	b
     3	c
     4	d
     5	e
[root@bad test]# wc bad  //统计文件bad中的信息;分别表示5行、5个单词、10个字节
 5  5 10 bad
[root@bad test]# wc -l bad  //统计行数
5 bad
[root@bad test]# wc -w bad  //统计单词数
5 bad
[root@bad test]# wc -c bad  //统计字节数
10 bad
[root@bad test]# 
  • wc命令在写脚本的时候用到的会比较多。

好了,今天的分享就到这里了。还有很多的命令还没有写到博客上来。这些基础命令需要多加练习,熟记每个命令的用法。最怕的其实不是你学不会,而是怕你不动手去练,熟能生巧,当你连熟悉这些命令之后,你就会发现,Linux是一个很好玩的东西。

在你敲下一条命令的时候,你可能觉得没什么,但是当你按下回车,得到你想要的结果时,那种满足感时无可替代的。

当然,如果想要看更多资料的,可以留言。但是一定要掌握好基础,资料太多,反而不知从何下手。这里可以参考一下忘情公子的博客

如果有错误的地方,还请留言指出。
本文作者: 坏坏
原文地址:https://www.cnblogs.com/bad5/p/12424301.html