linux系统及命令学习

时间:2024-04-15 15:39:35

1,基本概念

Shell(命令行):是一个程序,接受键盘输入的命令,并将命令传递给操作系统进行执行。

Bash:Bourne Again Shell, 是大多数linux系统分之中所带的一种shell程序。

命令提示符:

[username@machinename]$:    $ 表示普通用户登录

[root@machinename]#:  #表示root,超级用户登陆

2 简单命令:

help [command]: 能显示出命令commad的具体参数设置

date: 显示时间

cal: 显示日历

df:显示硬盘的剩余存储空间等

free: Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer

exit: 结束终端会话

3.文件夹

linux系统的文件路径如下图所示,几个重要的文件夹的用途:

    /boot: 系统内核文件,和开机相关文件

    /bin: 二进制程序文件,系统进行调用和执行

    /dev: 和设备相关的文件,磁盘,usb等

    /etc: 系统的配置文件

    /home: 用户文件夹,每一个用户都在该路径下拥有一个文件夹,存放自己的数据,如 /home/zack

    /lib: 内核系程序共享的库文件,类似于windows系统中的DLLS

    /usr: linux系统中最大的文件夹,包括所有普通用户的程序和相应的支持程序

      /usr/bin: linux distributions 安装的一些可执行程序文件

      /usr/share: /usr/bin目录下程序共享的一些配置文件,数据,图片等

      /usr/lib:  /usr/bin目录下程序的共享库文件

      /usr/sbin: root用户(系统管理员)的一些程序文件

      /usr/local: 用户安装的一些程序文件和支持文件,如/usr/local/bin中为可执行程序。

    /var: 可变化的一些数据文件,/var/log/messages 为日志文件

4.文件和文件夹操控命令

(. 为当前目录;.. 为上一级目录,~ 为当前登录用户目录)

pwd : 打印当前文件夹路径名     (print working directory

cd : 进入相应的文件夹路径,可以是相对路径和绝对路径

      cd ~ : 进入当前登陆用户的用户目录 (/home/user)

ls : 列出文件夹内的内容(文件夹和文件)

         常用参数如下:

      ls -a : 列出所有文件,包括隐藏文件(文件名以 开头)

      ls -d : 只列出文件夹

      ls -l :列出文件及其相关详细信息

    

         

      

  ls -l  显示如下的格式:

 

 

   相应的含义:

    -rw-r--r--: 总共十个字符,第一个表示文件类型,后面每三个为一组,依次表示读r,写w,执行x权限,第一组为文件主人的权限,第二组为主人所在用户组的权限,第三组为所有用户权限

file : 检测文件的类型  (在linux系统中,文件的后缀名并不需要和文件的类型匹配)

    file filename

  

less: 查看文本文件的内容

  less filename

  

  less 会打开该文件,在less模式下,键盘的命令如下:

      箭头可以上下移动,q为退出

mkdir: 创建文件夹,可以同时创建多个文件夹

      mkdir dir1 dir2 dir3

  

cp: 复制文件或文件夹

  cp item dir   复制一个文件或文件夹到另一个文件夹

  

  cp item1 item2 dir  复制多个文件到一个文件夹

  

  相关参数: -iv 两个参数最好每次加上, 复制文件夹时加参数 -r

  

       示例命令:

  

mv:  移动或重命名文件(在同一个文件夹重命名,在不同文件夹移动,最终原来的文件没有了)

       mv item1 item2 移动或重命名文件或文件夹

  mv item1 item2 dir  移动多个文件到文件夹

  参数: 最好每次加上 -iv

  命令语句示例及含义:

rm: 删除文件或文件夹(可同时删除多个)

注意:使用前最好用ls查看下,使用时最好带选项 -i

   rm file1 file2

   参数和示例:最好带参数-iv, 删除文件夹带 -r,递归删除文件夹内所有内容

 

 

5,软链接和硬链接

参考:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/

  文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。(ls -i 命令能查看文件inode号)

硬链接(hard link):若一个 inode 号对应多个文件名,则称这些文件为硬链接。每一个文件都有一个默认的硬链接(可以理解为文件名),再创建硬链接时,多了一个指向该文件的指针。(当文件的硬链接数为0,文件内存会被回收)

  局限性:硬链接只能指向文件,只在同一个磁盘分区中起作用;只能对已存在的文件进行创建;

 

软链接(soft link/system link):软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。(类似windows快捷方式?)

  特点:软链接可以指向文件或文件夹,软链接可交叉文件系统;可对不存在的文件或目录创建软链接;软链接有自己的文件属性及权限等;

      删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常

  上图中表明了两者的区别,硬链接通过inode号直接找到文件内容,软连接先通过自己的inode号找到自己的文件内容,从文件内容中读取到目标文件的路径,再从该路径拿到目标文件的inode号,从而找到目标文件。

  下图是命令ls -li 的结果,第一列为文件的inode号, 第二列十位字符的第一个字符若为l时,表明该文件是软链接,第三列的数字表明该文件(文件夹中文件)的硬链接数。

相关命令语句:

https://www.cnblogs.com/zr520/archive/2016/11/06/6036468.html

创建硬连接:(文件)

  ln file link

创建软连接:(文件或文件夹)

  ln -s item link     (示例: ln -s /bin/less  /usr/local/bin/less)

删除连接: rm link

修改软链接:ln -snf newitem link     (这将会修改原有的链接地址为新的地址)

例如:

创建软链接:ln -s /var/www/test test               #test指向/var/www/test

修改软链接:ln -snf /var/www/test1 test            #test指向/var/www/test1

 

 

6. linux命令的类型

 linux的一个命令语句可以分为下面四种类型:

  可执行程序(executable program):和所有/usr/bin目录下的程序一样

  shell内建命令(command built into the shell):bash程序内置的一些命令(shell builtins),如命令 cd

  shell方法(shell fuction):环境变量中配置的shell scripts

  别名(alias): 从其他命令创建的别名

常用命令

  type:查看该命令的种类(上面四种中一种)。

  

   which:显示可执行程序所在位置,只适用于可执行程序类型的命令。

  

  

  help: 显示shell builtins(shell内建方法)的帮助文档, 对于部分可执行程序,可以用 --help 

    

       

  man :显示可执行程序的使用手册文档  (大部分可执行程序支持)  (q退出)

    man -k reg(正则表达式):搜索正则表达式匹配的命令

  apropos: 和man -k 一样

  whatis: 显示命令的简介

  info: 显示命令的简介信息入口(类似超链接)(q退出)

  alias: 创建别名,自定义命令的名字 (可以将多条命令加在一起,下面的foo,相当于执行后面三个命令)

    

至此,查看一个命令的帮助文档,可以用help, --help, man 或info。

7.标准输入和输出,重定向,管道

  https://ryanstutorials.net/linuxtutorial/piping.php

  linux中有如下三种标准文件流,应用程序从标准输入接受数据,对于程序执行结果输出到标准输出,对于程序执行时的异常信息或状态码等输出到标准错误输出。

  STDIN: 标准输入,文件描述符为0,从键盘输入

  STDOUT: 标准输出,文件描述符为1,输出到屏幕

  STDERR:标准错误输出,文件描述符为2,输出到屏幕

重定向:

      重定向标准输出到文件,(文件不存在时创建,存在时覆盖其内容)
  >>   重定向标准输出到文件,(文件不存在时创建,存在时追加)
      重定向标准输入,从文件读取
  2>   重定向标准错误输出.
  示例:
    1,下面语句,将命令ls的输出重定向,即不输出到屏幕,而输出到ls-output.txt文件
    
    (下面命令可以创建或覆盖文件来产生一个空白文件)

  2,追加

  3,重定向标准错误输出

  4,下面三个命令将标准输出和标准错误都重定向到一个文件

  5,下面命令,从文件读取内容作为cat程序的输入

管道符号

         管道符,将一个程序的输出,重定向为下一个程序的输入(管道符是将一个命令的输出,传给下一个命令的输入,重定向 > 是将一个命令的输出,传到一个文件)

                (管道符和标准输出重定向区别:https://askubuntu.com/questions/172982/what-is-the-difference-between-redirection-and-pipe)

  如下命令,将ls输出作为less命令的输入

 

sort : 对输入内容进行排序  (https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html)

   下面命令,按时间顺序进行了排序

    

        下面命令将输出内容排序后再输出到less

    

uniq:忽略掉重复行(即多条重复记录时只显示一条

   uniq -d 只显示出重复行的数据

  

  

wc: 显示出文件的行数,字数和字节数

  wc -l  只显示行数

  

  

grep: 只显示复合匹配条件的记录 

  grep -i 忽略大小写

  grep -v 只显示不匹配的行

  下面命令显示内容中包含 zip 的行

  

  

head: 默认只显示前十行

tail: 默认只显示后十行

head/tail -n 5 :显示前/后5行

  

tee :从标准输入读取内容,同时输出到标准输出和文件 (tee fitting: 三通接头)

  如下面命令输出到文件ls.txt,并输出到grep命令

  

  

 8,命令扩展(command expansion)

     对于命令行输入的命令,在起作用前,shell会对其含义进行扩展。如下面的第二条命令echo *,echo没有打印*,这是因为shell将*扩展为当前路径下的所有文件名称。

  

    8.1 路径名称扩展:

        对于输入的通配符(wildcards),shell会扩展成对应的路径,如下面的命令

        

        常用的通配符及其含义如下:

        

        

        通配符示例:

            

    8.2 算术扩展:

      对于整数的简单计算语句,shell能进行扩展,表达式为$(arithmetic expression)

          

    8.3 大括号扩展

      大括号扩展能创建多个可选项,如下面的几条命令

         

       其常见的用途是用来创建多个文件夹

          

    8.3 参数扩展

       对于变量,shell能扩展出其对应值,如下面的命令中 USER为一个变量 (通过printenv|less)能查看到所有变量名称

          

 

     8.4 命令取代

        将一条命令的输出进行扩展

        

    8.5 抑制命令扩展

        有时候不想shell对输入的语句进行扩展,可以采用双引号和单引号来抑制这种扩展,如下面第一条命令,shell将$5进行了扩展为空字符。

          

        双引号:使用双引号后,部分内容不能进行扩展 ,路径名扩展和word spliting不起作用,($, \ 还起作用, 即算数扩展,参数扩展和命令取代还起作用)

            

        单引号:使用单引号后,所有扩展都不能使用

            

        转义符 \  :有时候只是需要单个符号不被扩展,可以使用转义符 \

            

9,键盘快捷键

游标移动:

  

  ctrl -a :移动到行开头; ctrl -e :行结尾; ctrl -l 清理屏幕

剪切和粘贴:

  

  ctrl -k :游标出剪切到行末尾; ctrl -y : 粘贴剪切的内容到游标出。

字符操作:

  

 自动补齐:输入一两个字母后按tab,能自动补全

  

 

        Alt -?(或按两次tab):显示所有可能补齐的选项

  

clear: 清理屏幕

history: 显示历史命令,bash默认显示前500条命令

    

    

      Ctrl -r 向上搜索记录, 输入搜索条件, 找到后ctrl -j 复制到当前

历史命令扩展:

  

    按上下箭头能切换到历史命令中上一条和下一条(复制命令到当前游标出)

    !88,  能切换到history list中的第88条命令 (即执行第list中的第88条命令

 

10,权限管理

  id: 显示用户id,组id,用户组等信息  (id user,无user时默认显示当前用户)

    

  在linux系统中每个用户都有自己的id,都属于一个用户组,每一个用户组都有id,root用户的id为0。用户账号的信息都定义在 /etc/passwd 文件中,用户组的信息都定义在 /etc/group 文件中,当创建用户和用户组时,这些信息都会被更新。(/etc/shadow 存放用户的密码信息)

  useradd: 创建用户

  groupadd: 创建用户组

文件的读写权限

  

  linux的每个文件都有十个字符来描述其读,写和执行相关的权限,如上面ls -l 命令显示的第一列十个字符。第一个字符为文件类型,接下来三个字符为文件所属用户(owner)的读,写,执行权限,随后三个字符为用户组(group)的读,写,执行权限,最后三个为所有用户(world)的读,写,执行权限。

  文件类型:- (普通文件), d(文件夹) , l(软链接), c, b

  读,写,执行权限:- , r , w , x(执行)

      

      

  文件权限属性示例:

        

 

 chmod: 改变文件权限(只有文件主人和超级用户能修改)

    

  上面的600为三个八进制数,每一个八进制对应三个二进制数,相应权限如下:6(rw-),0(---),0(---);常用的八进制权限数据如下:

          

  除了支持八进制数外,chmod命令还支持字母,相应含义如下:(u:用户,g:用户组,o:其他用户,a:所有用户)

    

  常用权限修改如下:(u+x:为用户添加执行权限;u=rx:设置用户权限为读,执行)

    

    chmod u+x,go=rw test2  (注意逗号后面不能加空格) ,该命令为test2文件用户添加执行权限,用户组和其他用户设置为读,写权限。

    

umask:  设置默认的权限  (默认的umask为:0002)

    umask 数字的含义:对于数字0,原来的权限不变,对于数字1,原来权限取消

    umask 0002

      

    umask 0022

      

    下面的命令中看到默认的umask为0002,创建test3.txt文件,权限为-rw-rw-r--,删除该文件后,修改umask为0000,再创建该文件,权限为-rw-rw-rw-。

      

改变登陆的用户id:

  1,退出后新用户登陆

  2,su命令:     su [-l ] [user]

  su:切换到指定的用户登录,-l 指该载入用户的登录环境,并切换到该用户目录文件夹(和该用户登录几乎一样),没指定用户名时指超级用户,-l 也可省略成 -。

  切换为超级用户,需要密码验证

  

  以超级用户执行一条命令:(注意命令用单引号,防止扩展)

  

    

      3,sudo命令

    以超级用户(不指定用户名时)执行命令,通常输入自己的密码或不用输密码,配置文件中会配置,还会配置用户能执行的命令

    

    sudo -i 切换到超级用户

    

chown:改变文件主人和用户组(需要超级用户权限)

    chown [owner] [:[group]] file

   相关示例含义

   chown bob test.txt   将文件text.txt主人改为bob

     chown :bobs test.txt   将文件text.txt用户组改为bobs

   

    

   

passwd : 改密码(默认为当前用户)

    

 11,进程

ps: 查看正在运行的进程

https://www.cnblogs.com/wxgblogs/p/6591980.html

      

上述显示结果中PID为进程ID,TTY为终端设备类型(tty和pts参见:https://segmentfault.com/a/1190000009082089)

   ps -x :查看较为完整的进程信息,如下图

      

  上面显示的STAT表示进程的状态,具体含义如下:(R:running;S:sleeping;T:stopped;)

      

top:动态显示进程(每三秒刷新)   (q:退出)

     

kill: 终止进程

    kill [signal] PID

    常见signal如下:

      

      

      

      

killall:向多个进程发送信号

    killall [-u user] [-signal] name

jobs : 显示所有活跃的作业   (jobs -l 还能显示出每个作业的PID)

https://www.cnblogs.com/EasonJim/p/6849885.html

ctrl + Z: 将当前程序挂起至后台;ctrl + c 终止前台程序

    下面命令中运行一段python脚本程序,按ctrl + Z将程序挂起,通过jobs能看到该作业。

    1 表示作业ID

    + 表示一个当前的作业, 若为 - ,表示下一个作业

    

bg : 将作业放在后台执行(作业ID作为参数)

       下面命令将上述的python脚本程序放在后台执行,通过jobs可以看到该程序的状态由 stopped变为了running

  

fg : 将后台作业放在前台执行(作业ID作为参数)

    

shutdown: 关闭或重启系统

  shutdown -r now 关机后重启
  shutdown -h now 关机后不重启
  shutdown -r +10 10分钟后重启
  shutdown -r 10:00 10点钟重启
  shutdown -h +10 10分钟后关机
  shutdown -h 10:00 10点钟关机

reboot: 重启系统 (需要管理员权限)

12,vim编辑器的使用

https://www.cnblogs.com/next-open/p/3662899.html

vim filename 进入vim编辑器(文件不存在时创建新文件)

Vim 编辑器有命令模式和编辑模式两种,刚进入文件时为命令模式,只能输入命令,不能输入文本内容, 按键盘 i (或insert)进入编辑模式,按esc回到命令模式。

下面是命令模式下的常用命令(必须输入冒号。冒号后无空格)

  :help [keyword] 搜索帮助文档中的内容

  :q 退出编辑器

  :q! 强制退出编辑器

  :w 保存

  :wq 保存并退出

命令行模式下的按键:(0 到行开头,$到行末尾)

    

复制和粘贴:https://www.cnblogs.com/didi/p/4067193.html

  y 复制

      

  p粘贴

    p       粘贴剪切板里的内容在光标后

       (在其他文件复制代码后,进入vim编辑器,insert进入编辑模式,按 shift+insert能粘贴复制的代码)

 

 

vim配置(python版)参考:https://www.cnblogs.com/cjy15639731813/p/5886158.html

 vim打开多个文件:

一、如果在终端还没有打开vim
vim -o 文件1 文件2  #vim横向分屏打开多个文件
vim -O 文件1 文件2  #vim纵向分屏打开多个文件

二、如果在终端已经打开vim
:vs 文件  #横向分屏打开另一个文件
:sp 文件  #纵向分屏打开另一个文件
:split 文件  #纵向分屏
:vsplit      #横向分屏

三、关闭窗口
:qa  #关闭所有
:q或者:close  #关闭光标所在窗口
:only  #关闭除光标所在的窗口之外的其它窗口

四、切换窗口
ctrl + w w(w按两次)
ctrl + hjkl

vim常用命令

:set number 显示行号
:set nonumber  不显示行号

vim多行注释和取消

多行注释:
1. 进入命令行模式,按ctrl + v进入 visual block模式,移动光标上移或者下移,选中多行的开头
2. 按大写字母I,再插入注释符,例如#
3. 按esc键就会全部注释了


取消多行注释:
1. 进入命令行模式,按ctrl + v进入 visual block模式
2.移动光标上移或者下移,选中多行的开头
3. 按d键就可全部取消注释

 

13. 使用SCP命令传输文件

 从远端复制文件到本地:

sudo scp root@192.168.0.1:remote_path/remote_file .

从本地复制文件到远端:

sudo scp local_file root@192.168.0.1:remote_folder

 

14. 将远程电脑的文件挂载到本地命令

sudo sshfs  -o allow_other,nonempty,reconnect root@192.168.2.33:/image/    ./image/   #将远程电脑(192.168.2.33)的image文件夹挂载到本地image文件夹下
fusermount -u 本地挂载文件夹绝对路径 # 取消挂载

15. 复制文件夹下的前600个文件

ls |head -n 600 | xargs -i cp {} ../temp/     #将当前文件夹下的前600个文件复制到 ../temp文件夹下
ls |tail -n 600 | xargs -i cp {} ../temp/     #将当前文件夹下的后600个文件复制到 ../temp文件夹下

 16. 后台tmux使用

https://www.cnblogs.com/lizhang4/p/7325086.html

tmux        #打开一个窗口
tmux ls     # 查看当前活动的窗口
tmux attach -t 0 #打开之前创建的0号窗口

tmux [new -s 会话名 -n 窗口名]   #启动新会话/窗口
tmux at [-t 会话名]    #恢复窗口
tmux kill-session -t 会话名   #关闭会话/窗口
tmux ls | grep : | cut -d. -f1 | awk \'{print substr($1, 0, length($1)-1)}\' | xargs kill   #关闭所有窗口

 tmux的快捷键

1.关闭当前窗口,但是窗口中的程序还在运行
Ctrl+b d //detach当前session(可以认为后台运行)

2.关闭当前窗口,且关闭窗口中的程序
Ctrl+d    //关闭窗口,终止session

17. 安装包管理工具

apt-get命令 (Advanced Package Tool)

apt-get,是一条linux命令,适用于deb包管理式的操作系统(例如Ubuntu系统),主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。

apt-get update    更新源文件
apt-get install package 安装指定包文件
apt-get install package --only-upgrade 升级指定包
apt-get install package   --resintall 重装
apt-get source package    下载包的源代码


apt-cache search package   寻找指定安装包
apt-cache show package   显示包相关信息
apt-cache depends package   显示包的依赖哪些包


apt-get remove  package 删除包
apt-get remove  package  --purge 删除包, 包括删除配置文件等
apt-get autoremove  package --purge   删除包,包括其其依赖包和配置文件等(推荐使用)

 

dpkg命令 

dpkg 即 package manager for Debian ,是 Debian 和基于 Debian 的系统中一个主要的包管理工具,可以用来安装、构建、卸载、管理 deb 格式的软件包。

dpkg 主要是用来安装已经下载到本地的 deb 软件包,或者对已经安装好的软件进行管理。而 apt-get 可以直接从远程的软件仓库里下载安装软件。

dpkg -i package  安装指定包

dpkg -l   列出已安装的包
dpkg -L package 查看包的安装位置

dpkg -r package   删除指定包
dpkg -P package 删除指定包及其配置文件

18. ip和端口扫描工具

nmap命令:  (https://www.cnblogs.com/LyShark/p/10637507.html)

nmap -sP 192.168.1.100-254    // ping 指定范围内的ip
nmap -sP 192.168.2.0/24         // 寻找192.168.2.0-192.168.2.255范围内的在线主机

nmap -PS22,80,443 192.168.1.7 // 采用SYN扫描,探测主机
192.168.1.7的22,80,443端口状态
nmap -PU 192.168.1.7 // 采用UDP扫描,探测主机192.168.1.7的开放端口状况