一Linux指令手册及知识入门

Posted yumoz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一Linux指令手册及知识入门相关的知识,希望对你有一定的参考价值。

目录速查

一、 指令总结

先来看个表,了解个大致内容:

命令作用补充常用
ls查看当前目录内容ls -al 或 ll
pwd显示当前目录
cd进入目录cd / & cd - & cd ~
rm删除-r 递归删除 ;-f 强制删除
mkdir新建目录mkdir –p test/test1 递归建立多个目录
touch创建文件touch file.txt
man命名查找cman 、man man
cp拷贝可以待路径,-r递归,-f强制
mv移动文件、重命名加路径是移动,不加路径是重命名
cat打印文件到命令行cat -n file.txt & tac file.txt
more多行数据查看more file.txt,支持回车键向下翻页
less多行数据查看less file.txt,支持PgUp&PgDn等功能 & /字符串 :向下搜索“字符串功能” & ?字符串 :向上搜索字符串功能
head显示前几行head -10 file.txt
tail显示后几行tail -10 file.txt
grep过滤命令grep “error” file.txt
find查找文件find -name file.txt
bc计算器计算简单加减等
so on

再分情况分析总结:

ls

  • ls :显示所有文件
  • ls -l 等同于 ll :以列表形式显示所有文件
  • ls -a : 显示当前目录下所有文件,包含隐藏文件(以点开头,如.vimrc)
  • ls -al : 列表显示当前目录下所有文件,包含隐藏文件

pwd

显示当前目录;

cd

  • cd + 文件夹:转到文件下
  • cd … :返回上级目录,回退,不能无限回退
  • cd . :仍在当前目录

cd … :返回上级目录,回退,但不能无限回退,直至返回到根目录

一些cd的尝试操作:

  • cd ~ :进入当前用户主工作目录
  • cd - : 进入最近保存的目录
  • cd / :进入根目录

touch

  • touch file.c # 创建file.c 文件
  • touch test.txt # 穿件test.txt 文件

touch命令可以结合参数更改文档或目录的日期时间,包括存取时间和更改时间,还可以新建一个不存在的文件。
touch -a 修改存取时间 Access Time;
关于文件时间的分析,在后续讲解。

mkdir

创建目录,升级操作递归创建目录;

mkdir moyu
mkdir -p test1/test2/test3

rm & rmdir

删除命令目录,删除文件命令;
删除普通文件:

  • rm 目录名
  • rm * 中的*是通配符,可以替换成任意想删除的文件
  • rm ./* 删除当前目录下的任何内容 ,./ 告知系统在当前目录

删除目录:

  • rm -r 目录名 # -r表示递归
  • 另一种 -p rmir方法
rmdir -p test1/test2 # 参考下图

删除目录,及其下所有文件:

参数含义:

-f 强制删除,即使写保护
-i 删除前逐一询问
-r 删除目录及其下所有文件

man

Linux的手册,使用命令

  • man man 查看man的使用手册
  • man 3 printf 查看程序库调用printf函数 如不指定,默认在区段1中使用
  • man printf 默认使用区段1,用户指令

man的区段手册:

cp-拷贝

cp 文件名/目录名 目录名/…/.等
如:

  • cp test.c …/ # 拷贝test.c到上级目录中
  • cp test.c file.c …/ #拷贝test.c file.c 到上级目录中
  • cp -r dir …/ #拷贝目录dir到上级目录中
  • cp -rf * … # 将当前目录下所有文件递归强制拷贝到上级目录中
  • cp -rf *.c … # 将当前目录下所有C文件递归强制拷贝到上级目录中

mv-改名&移动

  • mv test.c file.c #将test.c 改为file.c
  • mv test.c …/ # 将test.c 移动到上级目录中

cat & tac

  • cat file.c

  • cat -n file.c

  • tac file.c # 倒序显示

more

less

  • less file.c

支持向上向下移动
支持字符串搜索

  • /字符串:向下搜索字符串内容
  • ?字符串:向上搜索字符串内容

浏览文件,支持向上翻页和向下翻页

head & tail (打印)

  • head -5 file.c #文件前5行
  • tail -5 file.c # 文件后5行

打印文件第10行内容:
方法一:
将new.txt 文件前10行写入到文件temp中,然后读取文件temp的最后一行

head -n10 new.txt  > temp
tail -n1 temp

方法二:
将文件new.txt 的前10行写入到管道1中, 之后从管道中读取租后一行。

head -n10 new.txt  | tail -n1 

打印文件第10行到第20行内容:
方法一:
将new.txt 文件前10行写入到文件temp中,然后读取文件temp的最后一行

head -n20 new.txt  > temp
tail -n10 temp

方法二:
将文件new.txt 的前10行写入到管道中, 之后从管道中读取租后一行。

head -n20 new.txt  | tail -n10

grep (行过滤)

行过滤工具

  • grep ‘10’ file.txt
  • grep -n ‘10’ file.txt # 显示行号
  • grep -nv ‘10’ file.txt # 显示行号,打印没有匹配的行的内容
  • grep -i ‘hello’ file.txt # 忽略大小写的过滤

echo

这里解释了输出重定向。2

  • echo “hello yumoz” # 打印hello yumoz到显示器中
  • echo “hello yumoz” > temp.txt # 打印hello yumoz到temp.txt 文件,每次都清空文件,重新写入
  • echo “hello yumoz” >> temp.txt # 追加式 打印hello yumoz到temp.txt 文件

这里解释了输入重定向。[^2]

  • cat < new.txt # 从new.txt 输入内容到显示器中

linux计算器:

echo "1+2+3" | bc # 计算1+2+3

date

解决问题:时间戳
时间戳是:“unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。”来自百度百科。

  • date
  • date +%Y-%m-%d-%H:%M:%S # 按格式显示时间
  • date +%s # 保存时间戳的秒数
  • date -d @时间戳 # 将时间戳转化为标准时间(实现见下图)

cal (日历查询)

  • cal # 查询本月日历
  • cal -3 # 查询前一月,本月,后一月
  • cal 2020 # 查询2020年日历

find(查找)

特点:效率比较低,是真的在文件中查找。

  • find /usr/bin/ -name ls
  • find ~ -name temp.txt

which

查找命令文件所在目录:

  • which ls
  • which find
  • which pwd

whereis

该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。

  • whereis ls
  • whereis pwd

zip & unzip(压缩和解压)

压缩hellotest文件成为hellotest.zip文件:

[moyuz@yumoz a_test]$ zip hellotest.zip hellotest/*
bash: zip: command not found

提示:bash: zip: command not found,表示系统没有安装zip命令。

安装zip 和unzip命令:

[moyuz@yumoz a_test]$ sudo yum install -y unzip zip

然后根据提示输入sudo密码,或者在root用户下输入yum install -y unzip zip

打包,压缩:zip hellotest.zip hellotest/*
参数:-r 目录递归压缩

[moyuz@yumoz a_test]$ zip hellotest.zip hellotest/*
  adding: hellotest/new.txt (deflated 80%)
  adding: hellotest/temp.txt (stored 0%)
  adding: hellotest/tmp2.txt (deflated 47%)
  adding: hellotest/tmp.txt (deflated 47%)

解压到指定文件夹(当前目录下的a文件夹中):

unzip hellotest.zip  -d ./a

tar(压缩)

压缩:
将hellotest文件夹压缩成hellotest.tgz

tar -czf hellotest.tgz hellotest/

解压缩:
将hellotest.tgz文件夹解压缩成hellotest

tar -xzf hellotest.tgz hellotest/

参数含义:

-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录

二、 知识点

alias(命令重命名)

  • alias my_cmd='ls' # 将ls命令重名为my_cmd。

添加用户

在root下运行:

adduser username
passwd username #后续设置密码即可
  • 普通用户设置自己的密码:(在普通用户下运行)
passwd

之后根据提示输入现有密码和新密码就可以了。

  • root用户如何修改普通用户密码:(root下运行)
passwd 普通用户名

之后根据提示输入现有密码和新密码就可以了。

  • 如何删除普通用户账号呢?
userdel -r wang

但是,没有删除,而且提示如下:

[root@yumoz a_test]# userdel -r wang
userdel: user wang is currently used by process 8207
[root@yumoz a_test]#

提示:user wang is currently used by process 8207;那应该怎么做呢?

[root@yumoz a_test]# ls /home # 列出所有用户
moyuz  test  wang
[root@yumoz a_test]# who  # 查询当前登录用户
wang     pts/0        2021-07-24 16:45 ......
moyuz    pts/1        2021-07-24 16:08 ......
[root@yumoz a_test]# ps -u wang # 查询该用户pid
  PID TTY          TIME CMD
 8207 ?        00:00:00 sshd
 8208 pts/0    00:00:00 bash
 8231 ?        00:00:00 sshd
 8232 ?        00:00:00 sftp-server
[root@yumoz a_test]# kill 8207 #杀掉该用户对应的进程pid (sshd)
[root@yumoz a_test]# ps -u wang  # 查看是否删除
  PID TTY          TIME CMD
[root@yumoz a_test]# userdel -r wang # 使用命令删除用户wang
[root@yumoz a_test]# ls /home # 列出所有用户
moyuz  test
[root@yumoz a_test]# 

总结:

  1. 列出所有用户 ls /home
  2. 列出当前登录所有用户who
  3. 查询需要删除用户(wang)的进程号ps -u wang
  4. 杀掉该用户进程kill 8207 #杀掉该用户对应的进程pid (sshd)
  5. 删除用户userdel -r wang

相对路径和绝对路径

绝对目录:从根目录向下的一条路径
相对目录:有多条路径

写一个脚本,在Linux命令行显示1000行数据

  • 写法一 请严格遵守下面格式
count=0; while [ $count -le 1000 ];do echo "hello $count"; let count++; done

效果图:

下面给出错误实例和正确截图:

  • 写法二:文件写法

文件:test.sh:

#!/bin/bash 

count=0
while [ $count -le 100 ]
do 
  echo "hello $count"
  let count++
done

运行:bash test.sh

将上述显示在命令行的内容直接写到文件中

count=0; while [ $count -le 1000 ];do echo "hello $count"; let count++; done > new.txt

打开new.txt 就是要找写入的1000行内容。

count=0; while [ $count -le 1000 ];do echo "hello $count"; let count++; done >> new.txt

打开new.txt 就是要找写入的1000行内容。

重定向练习

管道+重定向


  1. 管道( | ),通过将管道前的数据资源传递给管道后的部分。 ↩︎

  2. 输入重定向 (< )。 ↩︎

以上是关于一Linux指令手册及知识入门的主要内容,如果未能解决你的问题,请参考以下文章

linux实用指令

Linux指令范例速查手册

Linux/Mac 日常入门命令行的规整总结

一Linux指令集和入门

新手入门Linux的步骤

喵呜:Linux基本指令手册一