Linux初学者必备命令

Linux基础学习:初学者必须掌握的基础命令(每天练习有助于熟练使用)

熟练使用Linux管理的必备命令,包括: locate,pwd,clear,chmod,chown,chattr,useradd, userdel, cd,Is.groupaddvi,cat,less ,mv,cp,rm,rmdir, touch,ifconfig,ip addr,route,echo, wc,expr, In, head, tail, who, htop, df,du, netstat,ss, kill, alias,tar,zip,unzip.jar,tailf,fdisk,free, uptime, Isof, Ismod, man,Isattr, dd, date,crontab,ps,findawk,sed,grep,sort,uniq,shred,nohup等,命令至少要熟练。

基础命令

    • 常用基础命令
      • 1.chattr改变文件属性
      • 2.vim启动多窗口编辑
      • 3.Vim常用技巧--查看文件编码格式
      • 4.ls/file/stat 查看命令
      • 5.lsof命令
      • 6.shred 覆盖文件来隐藏内容
      • 7.locate和find查询命令
      • 8.kill 干掉进程
      • 9.同步和关机重启指令
      • 10.如何改变文件属性与权限
      • 11.lsmod 命令显示已载入系统的模块
      • 12.nohup 命令在后台运行
      • 13.htop 系统中的互动的进程查看器
      • 14.使用jq解析JSON
      • 15.tailf 实时滚动的查看日志
      • 16.检查系统当前运行级别的方法

常用基础命令

1.chattr改变文件属性

chattr:命令用于改变文件属性。
用chattr命令防止系统中某个关键文件被修改:
$ chattr +i /etc/resolv.conf

lsattr:命令用于显示文件属性。
使用 lsattr 命令来显示文件属性:
$ lsattr /etc/resolv.conf
输出结果为:
----i-------- /etc/resolv.conf

2.vim启动多窗口编辑

$ vim -o file1 file2 打开一个编辑会话,显示为水平分割成两半的窗口,一个文件占用一个窗口。
Linux初学者必备命令_第1张图片
$ vim -O file1 file2 和上面相同,不过是垂直分割两半的窗口
Linux初学者必备命令_第2张图片

3.Vim常用技巧–查看文件编码格式

#查看文件编码
:set fileencoding

#修改为utf-8
:set fileencoding=utf-8

Linux初学者必备命令_第3张图片

4.ls/file/stat 查看命令

ls 命令

常用参数:
-a, –all 列出目录下的所有文件,包括以 . 开头的隐含文件
-l, 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-h, –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
-t 以文件修改时间排序

# ls -alht /etc/passwd

file 命令

说明:file命令用于查看文件的类型,可以根据文件的内部存储结构来进行判别,而不根据文件的扩展名来进行判别。在Linux系统中,文件扩展名与文件类型没有绝对的关系。

file 可以查看当前文件属于什么类型
d  --目录
-   --普通文件
    纯文本文件 text      /etc/hosts  
    二进制文件 binary  /bin/ls
    数据型文件 data     /tmp/etc.tar.gz
c/b  --块文件/字符文件(设备文件)
s   --socket文件
[root@localhost home]# file justin/
justin/: directory
[root@localhost home]# file justin1
justin1: empty
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text

stat 命令

命令用于查看文件属性、inode等信息

File:显示文件名
Size:显示文件大小
Blocks:文件使用的数据块总数
IO Block:IO块大小
regular file:文件类型(常规文件) ,如果是其他文件类型会显示出对应的文件类型
Device:设备编号
Inode:Inode号
Links:链接数
Access:文件的权限
Gid、Uid:文件所有权的Gid和Uid。

Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

5.lsof命令

-i 显示所有连接
-u 显示指定用户打开了什么
-c 查看指定的命令正在使用的文件和网络连接
-p 查看指定进程ID已打开的内容

-i 使用示例:
使用-i 6仅获取IPv6流量
$ lsof -i 6

仅显示TCP连接(同理可获得UDP连接)
$ lsof -iTCP

使用-i:port来显示与指定端口相关的网络信息
$ lsof -i :22
在这里插入图片描述

使用 @host 来显示指定到指定主机的连接

$ lsof [email protected]
在这里插入图片描述

使用@host:port显示基于主机与端口的连接

lsof [email protected]:22
在这里插入图片描述

找出监听端口
$ lsof -i -sTCP:LISTEN

你也可以grep “LISTEN”来完成该任务。
$ lsof -i | grep -i LISTEN

找出已建立的连接
$ lsof -i -sTCP:ESTABLISHED

你也可以通过grep搜索“ESTABLISHED”来完成该任务。
$ lsof -i | grep -i ESTABLISHED在这里插入图片描述
-u 使用示例:
使用-u显示指定用户打开了什么
$ lsof -u daniel

-- snipped --
Dock 155 daniel  txt REG   14,2   2798436   823208 /usr/lib/libicucore.A.dylib
Dock 155 daniel  txt REG   14,2   1580212   823126 /usr/lib/libobjc.A.dylib
Dock 155 daniel  txt REG   14,2   2934184   823498 /usr/lib/libstdc++.6.0.4.dylib
Dock 155 daniel  txt REG   14,2    132008   823505 /usr/lib/libgcc_s.1.dylib
Dock 155 daniel  txt REG   14,2    212160   823214 /usr/lib/libauto.dylib
-- snipped --

使用-u user来显示除指定用户以外的其它所有用户所做的事情
# lsof -u ^daniel

-- snipped --
Dock 155 jim  txt REG   14,2   2798436   823208 /usr/lib/libicucore.A.dylib
Dock 155 jim  txt REG   14,2   1580212   823126 /usr/lib/libobjc.A.dylib
Dock 155 jim  txt REG   14,2   2934184   823498 /usr/lib/libstdc++.6.0.4.dylib
Dock 155 jim  txt REG   14,2    132008   823505 /usr/lib/libgcc_s.1.dylib
Dock 155 jim  txt REG   14,2    212160   823214 /usr/lib/libauto.dylib
-- snipped --

** -c 使用示例:**
使用-c查看指定的命令正在使用的文件和网络连接
# lsof -c syslog-ng

COMMAND    PID USER   FD   TYPE     DEVICE    SIZE       NODE NAME
syslog-ng 7547 root  cwd    DIR    3,3    4096   2 /
syslog-ng 7547 root  rtd    DIR    3,3    4096   2 /
syslog-ng 7547 root  txt    REG    3,3  113524  1064970 /usr/sbin/syslog-ng
-- snipped --

-p使用示例:
使用-p查看指定进程ID已打开的内容
# lsof -p 10075

-- snipped --
sshd    10068 root  mem    REG    3,3   34808 850407 /lib/libnss_files-2.4.so
sshd    10068 root  mem    REG    3,3   34924 850409 /lib/libnss_nis-2.4.so
sshd    10068 root  mem    REG    3,3   26596 850405 /lib/libnss_compat-2.4.so
sshd    10068 root  mem    REG    3,3  200152 509940 /usr/lib/libssl.so.0.9.7
sshd    10068 root  mem    REG    3,3   46216 510014 /usr/lib/liblber-2.3
sshd    10068 root  mem    REG    3,3   59868 850413 /lib/libresolv-2.4.so
sshd    10068 root  mem    REG    3,3 1197180 850396 /lib/libc-2.4.so
sshd    10068 root  mem    REG    3,3   22168 850398 /lib/libcrypt-2.4.so
sshd    10068 root  mem    REG    3,3   72784 850404 /lib/libnsl-2.4.so
sshd    10068 root  mem    REG    3,3   70632 850417 /lib/libz.so.1.2.3
sshd    10068 root  mem    REG    3,3    9992 850416 /lib/libutil-2.4.so
-- snipped --

显示daniel连接到1.1.1.1所做的一切
# lsof -u daniel -i @1.1.1.1

bkdr   1893 daniel 3u  IPv6 3456 TCP 10.10.1.10:1234->1.1.1.1:31337 (ESTABLISHED)

6.shred 覆盖文件来隐藏内容

-z --- 用零覆盖以隐藏碎片
-v --- 显示操作进度
-u --- 在覆盖后截断并删除文件
-n --- 指定覆盖文件内容的次数(默认值为3)

shred 会覆盖文件来隐藏它的内容,并且也可以选择删除它。
# shred -zvu -n 5 passwords.list

7.locate和find查询命令

locate:让使用者可以很快速的搜索档案系统内是否有指定的档案。

locate让使用者可以很快速的搜索档案系统内是否有指定的档案。其方法就是先建立一个包括系统内所有档案名称及路径的资料库,之后当寻找时只需要查询这个资料库,而不必深入系统文件中查找了。

命令格式:locate 文件名

参数:
-u: 从根目录开始建立资料库。
-U: 从指定位置开始建立资料库
-e: 将某些路径排除在寻找的范围外。
-n: 指定最多显示查找到的文件的个数

find:命令用来在指定目录下查找文件。

find /etc/ -name passwd      ##查找/etc/下名称中带有passwd的文件
find /etc -maxdepth 1 -name passwd     ##查找/etc/下名称中带有passwd的文件,查找一层。
find /etc -name *.conf       ##查找/etc/下名称中带有*.conf的文件(下面显示的是部分)
find /etc -maxdepth 2 -name *.conf  ##查找/etc/下名称中带有*.conf的文件,且查找两层,包括一层(下面显示的是部分)
find /etc -maxdepth 2 -mindepth 2 -name *.conf  ##查找/etc/下名称中带有*.conf的文件,且只查找第二层
find /mnt -group tony             ##查找/mnt中所有组是tony用户的文件
find /mnt -user student -group student  ##查找/mnt中所有人和所有组都是student的文件
find /mnt -not -user student      ##查找/mnt中所有人不是student用户的文件
find /mnt -not -user student -o -group tony   ##查找/mnt中所有人不是student用户或者所有组是tony用户的文件
find /mnt -size 20K       ##查找/mnt文件大小近似20k的文件
find /mnt -size +20K      ##查找/mnt文件大小大于20k的文件
find /mnt -size -20K      ##查找/mnt文件大小小于20k的文件
find /mnt -type d         ##按type查找/mnt中目录
find /mnt -type f         ##按type查找/mnt中文件
find /mnt -cmin 10        ##查找/mnt中十分钟左右修改的
find /mnt -cmin +10       ##查找/mnt中十分钟以上修改的
find /mnt -cmin -10       ##查找/mnt中十分钟以内修改的
find /mnt -ctime 10       ##查找/mnt中十天左右修改的
find /mnt -ctime +10      ##查找/mnt中十天以上修改的
find /mnt -ctime -10      ##查找/mnt中十天以内修改的
find /mnt/ -perm 444      ##查找/mnt文件权限为444的文件
find /mnt/ -perm -444     ##查找/mnt中user有读的权限且group有读的权限且other有读的权限的文件。(三个条件,u.g.o至少要读的权限即r--r--r--)
find /mnt/ -perm -004     ##查找/mnt中other有读权限的文件(一个条件,o至少有读的权限)
find /mnt/ -perm -644     ##查找/mnt中user有读写的权限且group至少有读权限且other有读的权限的文件。(四个条件,rw-r--r--)
find /etc/ -name *.conf -exec cp -rp {} /mnt \;   ##把/etc/目录下名称中带有.conf的文件递归复制到/mnt下
find /mnt -name "*.conf" -exec rm -fr {} \; ##删除/mnt名称中带有.conf的文件
find / -group mail -exec cp -rp {} /mnt \; ##把/目录下的组属于mail的文件复制到/mnt

8.kill 干掉进程

杀死指定用户所做的一切事情
可以消灭指定用户运行的所有东西,这真不错。

# kill -9 `lsof -t -u daniel

9.同步和关机重启指令

将资料同步写入硬碟中的指令: sync

[dmtsai@study ~]$ su -    #这个指令在让你的身份变成root !底下请输入root的密码!
Password:   #就这里!请输入安装时你所设定的root密码!
Last login: Mon Jun 1 16:10:12 CST 2015 on pts/0

[root@study ~]# sync

关机指令: shutdown

[root@study ~]# shutdown -h now
立刻关机,其中now相当于时间为0的状态
[root@study ~]# shutdown -h 20:25
系统在今天的20:25分会关机,若在21: 25才下达此指令,则隔天才关机
[root@study ~]# shutdown -h +10
系统再过十分钟后自动关机
[root@study ~]# shutdown -r now
系统立刻重新开机
[root@study ~ ]# shutdown -r +30 'The system will reboot'
再过三十分钟系统会重新开机,并显示后面的讯息给所有在线上的使用者
[root@study ~]# shutdown -k now 'This system will reboot'
仅发出警告信件的参数!系统并不会关机啦!吓唬人!

重新开机,关机: reboot, halt, poweroff

[root@study ~]# halt       #系统停止~萤幕可能会保留系统已经停止的讯息!
[root@study ~]# poweroff   #系统关机,所以没有提供额外的电力,萤幕空白!

[root@study ~]# systemctl [指令]
指令项目包括如下:
halt 进入系统停止的模式,萤幕可能会保留一些讯息,这与你的电源管理模式有关
poweroff 进入系统关机模式,直接关机没有提供电力喔!
reboot 直接重新开机
suspend 进入休眠模式

[root@study ~]# systemctl reboot     #系统重新开机
[root@study ~]# systemctl poweroff   #系统关机

10.如何改变文件属性与权限

chgrp :改变档案所属群组
chown :改变档案拥有者
chmod :改变档案的权限, SUID, SGID, SBIT等等的特性

改变所属群组, chgrp:

[root@study ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有档案、目录
     都更新成为这个群组之意。常常用在变更某一目录内所有的档案之情况。
范例: 
[root@study ~]# chgrp users initial-setup-ks.cfg 
[root@study ~]# ls -l 
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup -ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg 
chgrp: invalid group: `testing' <==发生错误讯息啰~找不到这个群组名~

改变文件拥有者, chown:

[root@study ~]# chown [-R]帐号名称档案或目录
[root@study ~]# chown [-R]帐号名称:群组名称档案或目录
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有档案都变更

范例:将initial-setup-ks.cfg的拥有者改为bin这个帐号: 
[root@study ~]# chown bin initial-setup-ks.cfg 
[root@study ~]# ls -l 
-rw-r- -r--. 1 bin   users 1864 May 4 18:01 initial-setup-ks.cfg

范例:将initial-setup-ks.cfg的拥有者与群组改回为root: 
[root@study ~]# chown root:root initial-setup-ks.cfg 
[root@study ~]# ls -l 
- rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg

改变权限, chmod:

各权限的分数对照表如下:
r:4
w:2
x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
[root@study ~]# chmod [-R] xyz档案或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有档案都会变更

[root@study ~]# ls -al .bashrc 
-rw-r--r-- . 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc 
[root@study ~]# ls -al .bashrc 
-rwxrwxrwx . 1 root root 176 Dec 29 2013 .bashrc

11.lsmod 命令显示已载入系统的模块

功能:
lsmod命令:是一个小程序,用来显示文件、proc/modules的信息,也就是显示当前内核模块装载的模块。

补充说明:
执行lsmod指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。

[root@localhost ~]# lsmod 
Module                  Size  Used by
binfmt_misc            17468  1 
ip6t_rpfilter          12595  1 
ip6t_REJECT            12625  2 
nf_reject_ipv6         13717  1 ip6t_REJECT
ipt_REJECT             12541  2 
nf_reject_ipv4         13373  1 ipt_REJECT
xt_conntrack           12760  13 
ebtable_nat            12807  1 
ebtable_broute         12731  1 
bridge                151336  1 ebtable_broute
stp                    12976  1 bridge
llc                    14552  2 stp,bridge

12.nohup 命令在后台运行

nohup的意思是忽略SIGHUP信号, 所以当运行nohup python test.py的时候, 关闭shell, 那么这个python进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么, 这个python进程也是会消失的(因为对SIGINT信号不免疫)

注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

 如果想让进程在后台不挂断的运行,需要 nohup 和 & 结合起来使用

# nohup nohup python test.py &> /var/log/python.log &

nohup 语法:
nohup Command [ Arg ... ] [ & ]

13.htop 系统中的互动的进程查看器

与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。

htop相比较top的优势:
1.可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
2.在启动上比top 更快。
3.杀进程时不需要输入进程号。
4.htop 支持鼠标选中操作(反应不太快)。
5.top 已不再维护。

安装htop:yum install -y htop.x86_64

命令行选项(COMMAND-LINE OPTIONS)
-C --no-color        使用一个单色的配色方案
-d --delay=DELAY     设置延迟更新时间,单位秒
-h --help          显示htop 命令帮助信息
-u --user=USERNAME   只显示一个给定的用户的过程
-p --pid=PID,PID…    只显示给定的PIDs
-s --sort-key COLUMN  依此列来排序
-v –version        显示版本信息
交互式命令(INTERACTIVE COMMANDS)
上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程;
Space 标记/取消标记一个进程。命令可以作用于多个进程,例如 “kill”,将应用于所有已标记的进程

U    取消标记所有进程
s    选择某一进程,按s:用strace追踪进程的系统调用
l    显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
I    倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然
+, -   When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name.
a    (在有多处理器的机器上)    设置 CPU affinity: 标记一个进程允许使用哪些CPU
u    显示特定用户进程
M    按Memory 使用排序
P    按CPU 使用排序
T    按Time+ 使用排序
F    跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。
K    显示/隐藏内核线程
H    显示/隐藏用户线程
Ctrl-L    刷新
Numbers    PID 查找: 输入PID,光标将移动到相应的进程上

效果图:
Linux初学者必备命令_第4张图片

14.使用jq解析JSON

作为一个标准的命令行工具,jq可以处理 JSON 文件,也可以直接处理从命令行管道或者流中传入的数据,这方便在 shell 脚本中使用。通过 jq 的 .(点)过滤器可以让 JSON 的格式规整起来,即输出格式化,美丽的打印效果。

安装jq工具:yum install -y jq

 	     -c             compact instead of pretty-printed output;
         -n             use `null` as the single input value;
         -e             set the exit status code based on the output;
         -s             read (slurp) all inputs into an array; apply filter to it;
         -r             output raw strings, not JSON texts;
         -R             read raw strings, not JSON texts;
         -C             colorize JSON;
         -M             monochrome (don't colorize JSON);
         -S             sort keys of objects on output;
         --tab  use tabs for indentation;
         --arg a v      set variable $a to value ;
         --argjson a v  set variable $a to JSON value ;
         --slurpfile a f        set variable $a to an array of JSON texts read from ;
[root@ss-server ~]# cat test.json
{"timestamp":"2021-06-10T18:27:56.928217+0800","flow_id":1943102950284001,"in_iface":"enp26s0f0","event_type":"alert","src_ip":"10.10.10.10","src_port":61159,"dest_ip":"1.1.1.1","dest_port":80,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":3013004,"rev":1,"signature":"http GET data","category":"A Network Trojan was detected","severity":1,"metadata":{"by":["al0ne"],"created_at":["2018_10_17"]}}}

[root@ss-server ~]# jq . test.json 
{
  "timestamp": "2021-06-10T18:27:56.928217+0800",
  "flow_id": 1943102950284001,
  "in_iface": "enp26s0f0",
  "event_type": "alert",
  "src_ip": "10.10.10.10",
  "src_port": 61159,
  "dest_ip": "1.1.1.1",
  "dest_port": 80,
  "proto": "TCP",
  "alert": {
    "action": "allowed",
    "gid": 1,
    "signature_id": 3013004,
    "rev": 1,
    "signature": "http GET data",
    "category": "A Network Trojan was detected",
    "severity": 1,
    "metadata": {
      "by": [
        "al0ne"
      ],
      "created_at": [
        "2018_10_17"
      ]
    }
  }
}

15.tailf 实时滚动的查看日志

在屏幕上显示指定文件的末尾若干行内容,通常用于日志文件的跟踪输出。

补充说明

tailf命令几乎等同于tail -f,严格说来应该与tail --follow=name更相似些。当文件改名之后它也能继续跟踪,特别适合于日志文件的跟踪(follow the growth of a log file)

tailf和tail -f的区别

tailf 总是从文件开头一点一点的读, 而tail -f 则是从文件尾部开始读
tailf check文件增长时,使用的是文件名, 用stat系统调用;而tail -f 则使用的是已打开的文件描述符; 注:tail 也可以做到类似跟踪文件名的效果; 但是tail总是使用fstat系统调用,而不是stat系统调用;结果就是:默认情况下,当tail的文件被偷偷删除时,tail是不知道的,而tailf是知道的。

选项

-n, --lines NUMBER  # 输出最后数行
-NUMBER             # 与NUMBER相同 `-n NUMBER'
-V, --version       # 输出版本信息并退出
-h, --help          # 显示帮助并退出

Linux初学者必备命令_第5张图片

16.检查系统当前运行级别的方法

**Linux系统7个运行级别**
0:关机,停机模式
1:单用户模式
2:多用户模式
3:完整的多用户文本模式
4:系统未使用,保留一般不用
5:图形化模式
6:重启模式

运行级就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。

1.使用runlevel命令
runlevel打印系统的上一个和当前运行级别:

[root@localhost ~]# runlevel
N 3

2.使用who命令
who打印有关当前登录用户的信息,使用-r选项打印运行级别信息:

[root@localhost ~]# who -r
         run-level 3  2021-09-14 22:07

3.使用systemctl命令
systemctl用于控制systemd系统和服务管理器

[root@localhost ~]# systemctl get-default
multi-user.target

备注:如果需要临时切换系统运行级别 直接 init+ 需要切换到的数字。

你可能感兴趣的:(Linux,linux)