首页
论坛
课程
招聘
[原创]linux常用命令
2022-7-7 10:02 4247

[原创]linux常用命令

2022-7-7 10:02
4247

1、cp命令

        cp dir1/a.doc dir2 表示将dir1下的a.doc文件复制到dir2目录下

        cp -r dir1 dir2 表示将dir1及其dir1下所包含的文件复制到dir2下

        cp -r dir1/. dir2 表示将dir1下的文件复制到dir2,不包括dir1目录

    

        说明:cp参数 -i:询问,如果目标文件已经存在,则会询问是否覆盖;

2、文件移动或者重命名mv

        说明:

            目标目录与原目录一致,指定了新文件名,效果就是仅仅重命名。

            目标目录与原目录不一致,没有指定新文件名,效果就是仅仅移动。

            目标目录与原目录不一致,指定了新文件名,效果就是:移动 + 重命名。

        2.1 重命名(同一目录下,AAA重新命名为BBB)

                mv AAA BBB 

        2.2 移动当前目录的sal到mnt/sal

                mv sal /mnt/sal

3、删除目录和文件rm命令

    强制递归删除目录 rm -rf TestPro

4、新建目录mkdir

    新建sal目录: mkdir sal

5、查看文件ls或者ll命令

    ls -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出

    ll 同上:ls -l命令

6、查看工作目录

    pwd

7、改变权限chmod

    备注:a代表all所有用户,u代表文件拥有者,g代表和拥有同组的用户,o代表其他用户。

    r代表读,w代表写权限,x代表执行权限。+代表增加,-代表减少,=代表赋予

                chmod a+r file 给file的所有用户增加读权限

                chmod a-x file 删除file的所有用户的执行权限

                chmod a+rw file 给file的所有用户增加读写权限

                chmod +rwx file 给file的所有用户增加读写执行权限

                chmod u=rw,go= file 对file的所有者设置读写权限,清空该用户组和其他用户对file的所有权限(空格代表无权限)

                chmod -R u+r,go-r docs 对目录docs和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限

                chmod 664 file 对file的所有者和用户组设置读写权限, 为其其他用户设置读权限

                chmod 0755 file 相当于u=rwx (4+2+1),go=rx (4+1 & 4+1)。0 没有特殊模式。

                chmod 4755 file 4设置了设置用户ID位,剩下的相当于 u=rwx (4+2+1),go=rx (4+1 & 4+1)。

                find path/ -type d -exec chmod a-x {} \; 删除可执行权限对path/以及其所有的目录(不包括文件)的所有用户,使用'-type f'匹配文件

                find path/ -type d -exec chmod a+x {} \; 允许所有用户浏览或通过目录path/


8、查看进程信息ps

        ps -ef |grep hello

        ps -aux |grep hello

        指令: ps

        作用: 主要是查看服务器的进程信息

        选项含义:

        -e:等价于 ‘-A’ ,表示列出全部的进程

        -f:显示全部的列(显示全字段

9、用ssh命令连接linux虚拟机

        ssh sanganlei@192.168.116.158


10、切换用户su命令

        命令格式:su 用户名

[sanganlei@localhost ~]$ su root

Password: 

[root@localhost sanganlei]# 

11、vim使用

        a) 快捷键

                j 下一行, k 上一行,g第一行,G最后一行

                dd 删除光标所在行

                ndd :删除 n 行

                yy:复制当前行

                p:粘贴

                ggvG:全选

                gg:移动到文件头部位置

                G:移动到文件末尾

                nG:移动到 n 行,10G 即移动到文件第十行

                $:跳转到当前行末尾

                ^:跳转到当前行开头

                a:进入编辑模式,插入内容位置在光标的后面

                复制此文件所有内容:

                        ggvG 全选 + y 复制 + p 粘贴

                复制多行:

                        1、v 进入可视模式(先按下Esc),通过移动光标选择目标,按 y 复制,p 粘贴

                        2、输入: 进入命令行模式,输入 15 20 copy 21, 即将从第十五行到第二十行的内容从第二十一行开始复制

        b)vim显示行号

            :set nu 

        c)vim搜索字符串,按下小写的n下一个,大写的N上一个搜索结果

            :/ abcdef

        d)替换字符串

                基本语法是

                    :[range]s/目标字符串/替换字符串/[option]

                备注:其中range和option字段都可以缺省不填。

                参数说明:

                        range:表示搜索范围,默认表示当前行;

                                range字段值1,10表示从第1到第10行;

                                %表示整个文件(相当于1,$);

                                而  .,$  代表从当前行到本文件的末尾

                        s:substitute的简写,表示执行替换字符串操作

                        option:表示操作类型,默认只对第一个匹配的字符进行替换

                                g(global)表示全局替换;

                                c(comfirm)表示操作时需要确认;

                                i(ignorecase)表示不区分大小写;

                    替换命令举例

                        a)替换每一行中所有 vivian 为 sky

                                :%s/vivian/sky/g

                        b)将从2行到10行中出现的所有包含line的字符串中的line替换为lines

                                :2,10s/line/lines/g表示将2~3行的line全局替换为lines

                        c)全文的行首加入//字符,批量注释时非常有用

                                :%s/^/\/\//表示在全文范围行首替换插入//,注意在Vim中需要将/进行转义后才可以替换

                        d)替换当前行所有 vivian 为 sky

                                :s/vivian/sky/g 

                        e)替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

                                :n,$s/vivian/sky/ 

                        f)替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

                                :n,$s/vivian/sky/g

                        g)替换每一行的第一个 vivian 为 sky

                                :%s/vivian/sky/

                        h)将光标所在行出现的所有包含line的字符串中line替换为lines

                                :s/line/lines/g表示将光标所在当前行的line全局替换为lines


12、查看网络配置

        ifconfig

13、linux查找命令

        a)在根目录下查找a.txt

            find / -name a.txt

        b)在当前目录下查找a.txt

            find . -name file.txt

        c)-group:按照文件所属的组来查找文件。在home目录下查询所属组为 root 的文件

            find /home -group root

        d)-user:按照文件的属主来查找文件。在home目录下查询所有者为 root 的文件

            find /home -user root

        e)-type 根据文件类型查找,f表示文件,d表示目录,l表示软链接。如查找 /home 目录下文件类型是目录

            find /home -type d

        f)用find命令查找到了文件,输出的方式有以下两种

            find / -name '*.txt'  >a.txt

            find / -name '*.txt'  -print >a.txt,

14、查看centos内核版本

        uname -r

15、查看centos版本

        cat /etc/centos-release

16、linux更新内核版本

        以CentOS6.9内核2.6.32-696.el6.x86_64更换内核2.6.32-696.6.3.el6.x86_64为例

        (1)下载kernel-2.6.32-696.6.3.el6.x86_64.rpm,在https://vault.centos.org/网站下载对应的内核版本

        (2). 查看内核版本

            uname -r

        (3). 查看rpm包

            rpm -qa | grep kernel 

        (4). 删除旧内核

            yum remove kernel-2.6.32-696.el6.x86_64  

        (5). 安装新内核

            rpm -ivh kernel-2.6.32-696.6.3.el6.x86_64.rpm --force --nodeps

        (6). reboot 重启

        (7). uname -r


17、动态查看日志文件命令

        tail -f filename.log

18、linux安装多个内核,如何更改内核启动顺序

        1、查看默认启动顺序

            awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

        2、查看当前默认内核启动项grub2-editenv list

        3、更改默认启动内核项

            grub2-set-default 1(这个根据第2点查看的结果选你要进入的内核)

19、查看linux内核驱动模块是否加载

        lsmod |grep fc

20、scp远程拷贝命令(拷贝本机器的b.txt文件到远程机器192.168.116.184的/root目录)

        scp b.txt root@192.168.116.184:/root

21、一台linux虚拟机通过ssh连接另外一台linux虚拟机器,一定不要忘了最后的22是远程机器的端口号。

        ssh root@192.168.116.184 22

22、 crontab 是用来定期执行程序的命令

    语法:crontab [ -u user ] file

    或者crontab [ -u user ] { -l | -r | -e }

    说明:

            -e : 执行文字编辑器来设定时程表

            -r : 删除目前的时程表

            -l : 列出目前的时程表

            *    *    *    *    *

            -    -    -    -    -

            |    |    |    |    |

            |    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)

            |    |    |    +---------- 月份 (1 - 12) 

            |    |    +--------------- 一个月中的第几天 (1 - 31)

            |    +-------------------- 小时 (0 - 23)

            +------------------------- 分钟 (0 - 59)

    例子:

        每一分钟执行一次 /bin/ls:

            * * * * * /bin/ls

        在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:

            0 6-12/3 * 12 * /usr/bin/backup

        周一到周五每天下午 5:00 寄一封信给 alex@domain.name:

            0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata

        每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha":

            20 0-23/2 * * * echo "haha"

23、查看程序依赖的库

        ldd DemoWork1

24、如何查看已经运行起来的程序,是否成功加载某个so文件

        a)ps -ef |grep demo.out查看进程id

        b)cd /proc/进程id

        c)cat maps

25、gdb设置源代码路径

        1、显示gdb搜索的源代码路径

            show dir

        2、设置源代码路径

             a)调试时递归设置源代码路径(用这种最好,省事,非递归的麻烦)

                        gdb `find /root/projects -type d -printf '-d %p '` DemoWork1

                        gdb -q DemoWork1 `find /root/projects/ -type d -printf '-d %p '`

                        有的版本的 find不支持  -printf选项,此时,可以用下面的方法:

                            gdb `find . -type d | xargs printf " -d %s"`  DemoWork1

            b)非递归设置源代码路径

                    dir srcpath

        3、清除源代码路径

                dir

26、gdb设置源代码路径demo,(动态库文件libadd.so在B机器上编译的。要在A机器上源码调试libadd.so)

                备注:要想源代码调试某个动态库,在生成动态库时,必须加上 -g选项,否则无法源码调试。

                a)调试testSO.out指定源代码路径

                        gdb `find /root/projects/sosrc -type d -printf '-d %p '` testSO.out

                b)显示源代码路径

                        show dir

27、如何查看端口是否别占用

            netstat -ano|grpe 8080

28、查看符号二进制文件的符号

            nm exeOrSo |grep funName

            readelf -s libNetCommunicate.so

29、gdb调试查看已经加载的动态库的信息

            a)显示所有已经加载的动态库信息

                info shared

            b)显示某个已经加载的动态库信息

                info shared libtgcDefender.so

30、gdb调试给动态库加载符号

            haredlibrary myso

31、gdb调试设置源代码路径,(A电脑上编译的。B机器上调试)

备注:要想源代码调试某个动态库,在生成动态库时,必须加上 -g选项,否则无法源码调试。

               a)调试DemoWork时指定源代码路径

                    gdb `find /root/projects -type d -printf '-d %p '` DemoWork

               b)显示源代码路径

                    show dir

32、Linux链接概念

     Linux链接分两种,

                    一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,使用 ln 命令不加参数创建硬链接,

                        加 -s 参数则创建软链接。

            硬链接:

                        相当于创建了源文件的副本,不会随着源文件的删除而消失,会随着源文件内容的更改而更改;

                        即让多个不在或者同在一个目录下的文件名,同时能够修改同一个文件,其中一个修改后,所有与其有硬链接的文件都一起修改了。

            软链接:

                        软链接也称之为符号链接(Symbolic Link)。这个文件包含了另一个文件的路径名。

                        可以是任意文件或目录,可以链接不同文件系统的文件。软链接类似于 Windows的快捷方式。 

 


                        [root@user ~]# touch f1             # 创建文件 f1 

                        [root@user ~]# ln f1 f2               # 创建 f1 的一个硬链接文件f2

                        [root@user ~]# ln -s f1 f3           # 创建 f1 的一个软链接文件f3

                        [root@user ~]# ls -li                    # -i参数显示文件的inode节点信息

total 24

                        17567 -rw-------. 1 root root 1115 Jan  9  2014 anaconda-ks.cfg

                        175 -rw-r--r--. 1 root root 3486 Aug 18  2014 cloud-set-guest-password

                        235 -rw-r--r--. 2 root root    0 Mar 14 12:18 f1

                        235 -rw-r--r--. 2 root root    0 Mar 14 12:18 f2

                        237 lrwxrwxrwx. 1 root root    2 Mar 14 12:14 f3 -> f1

                         49 -rw-r--r--. 1 root root 8526 Jan  9  2014 install.log

                        67 -rw-r--r--. 1 root root 3314 Jan  9  2014 install.log.syslog

                        通过上面的测试可以看出:硬链接文件 f2 与源文件f1的 inode 节点均为 235,软链接 f3 则与两者的 inode 不同。

                        [root@user ~]# echo "I am f1" >> f1

                        [root@user ~]# cat f1

                        I am f1 

                        [root@user ~]# cat f2

                        I am f1

                        [root@user ~]# cat f3

                        I am f1

                        [root@user ~]# rm -f f1

                        [root@user ~]# cat f2

                        I am f1

                        [root@user ~]# cat f3

                        cat: f3: No such file or directory

                        通过上面的测试可以看出:当删除原始文件 f1 后,硬链接 f2 不受影响,但是软链接 f1 文件失效

33、upzip命令

        a)、把/home目录下面的data目录压缩为data.zip

              zip -r data.zip data #压缩data目录

        b)把/home目录下面的data.zip解压到databak目录里面

              unzip data.zip -d databak

        c)把/home目录下面的a文件夹和3.txt压缩成为a123.zip

              zip -r a123.zip a 3.txt

        d)把/home目录下面的t.zip直接解压到/home目录里面

              unzip t.zip

        e)把/home目录下面的a1.zip、a2.zip、a3.zip同时解压到/home目录里面

              unzip a*.zip

        f)把/home目录下面w.zip里面的所有文件解压到第一级目录

              unzip -j wt.zip

34、lsof命令

       a)列出所有打开的文件:

                lsof

                备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位

       b)查看谁正在使用某个文件

                lsof   /filepath/file

       c)递归查看某个目录的文件信息

                lsof +D /filepath/filepath2/

                备注: 使用了+D,对应目录下的所有子目录和文件都会被列出

       d)比使用+D选项,遍历查看某个目录的所有文件信息 的方法

                lsof | grep ‘/filepath/filepath2/’


       e)列出某个用户打开的文件信息

                lsof  -u username

                 备注: -u 选项,u其实是user的缩写

       f)列出某个程序所打开的文件信息

                lsof -c mysql

                备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比第二种方法要少打几个字符了

       g)列出多个程序多打开的文件信息

                lsof -c mysql -c apache

       h)列出某个用户以及某个程序所打开的文件信息

                lsof -u test -c mysql

       i)列出除了某个用户外的被打开的文件信息

                lsof   -u ^root

                备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示

       j)通过某个进程号显示该进行打开的文件

                lsof -p 1

       k)列出多个进程号对应的文件信息

                lsof -p 123,456,789

       l)列出除了某个进程号,其他进程号所打开的文件信息

                lsof -p ^1

       m)列出所有的网络连接

                lsof -i

       n)列出所有tcp 网络连接信息

                lsof  -i tcp

       o)列出所有udp网络连接信息

                lsof  -i udp

       p)列出谁在使用某个端口

                lsof -i :3306

       q)列出谁在使用某个特定的udp端口

                lsof -i udp:55

       r)特定的tcp端口

                lsof -i tcp:80

       s)列出某个用户的所有活跃的网络端口

                lsof  -a -u test -i

       t)列出所有网络文件系统

                lsof -N

       u)域名socket文件

                lsof -u

       v)某个用户组所打开的文件信息

                lsof -g 5555

       w)根据文件描述列出对应的文件信息

                lsof -d description(like 2)

       x)根据文件描述范围列出文件信息

                lsof -d 2-3

35、centos安装gtest

        sudo yum install epel-release

        sudo yum install dnf

        sudo dnf install dnf-plugins-core

        sudo dnf install gtest gtest-devel

        sudo find /usr -name gtest.h

/usr/include/gtest/gtest.h




[2022冬季班]《安卓高级研修班(网课)》月薪三万班招生中~

最后于 2022-11-7 16:24 被sanganlei编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (1)
雪    币: 1582
活跃值: 活跃值 (1291)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huangjw 活跃值 2022-7-8 00:51
2
0
great written,but some more
游客
登录 | 注册 方可回帖
返回