💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 1. ubuntu 下vim修改tab键为4个空格 `vim /etc/vim/vimrc` * 加入三行内容: ~~~ set ts=4 set expandtab set autoindent ~~~ ## 3. 查看局域网对应的外网IP ~~~ # 两种命令都可以,不起作用时,换着用 curl ifconfig.me curl ifconfig.me/ip ~~~ ## 4. 复制虚拟机 1. 复制vdi或者vmdx文件到一个新的目录。 ![](https://box.kancloud.cn/6df3375632d7ef6d542d09ea0ad59f30_323x154.png) 其中bigdata01.vdi是由base.vdi复制过来的 2. 进入到virtualbox的安装目录,执行命令,改变UUID `vboxmanage internalcommands sethduuid E:\虚拟机\bigdata01.vdi` ![](https://box.kancloud.cn/facd9cd343f9c7f9f38c00755df87923_690x71.png) 3.使用VirtualBox新建虚拟机,选择磁盘的时候,选择已有的磁盘,然后选中第一步中拷贝的文件。 4.建立好之后就可以正常使用了。 ## 5. 查看Linux的CPU个数 ~~~ # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l # CPU信息 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c ~~~ ## 6. 查看某一进程占用CPU和内存 `top -p pid` ## 7. 查看端口是否被占用 ~~~ netstat -tunlp |grep 7885 ~~~ ![](https://box.kancloud.cn/6f397d89049ed4d9d6b161786d9dbe23_1036x67.png) 红圈 端口和占用进程 ## 8. diff 找两个文件的不同 ### 8.1 参数 > * diff还提供了一些有用的参数来控制比较行为与输出结果,一些常用的参数如下: > -b --ignore-space-change 忽略空格,如果两行进行比较,多个连续的空格会被当作一个空格处理,同时会忽略掉行尾的空格差异。 > -w --ignore-all-space 忽略所有空格,忽略范围比-b更大,包括很多不可见的字符都会忽略。 > -B 忽略空白行。 > -y 输出两列,一个文件一列,有点类似GUI的输出外观了,这种方式输出更加直观。 > -W 大写W,当指定-y的时候设置列的宽度,默认是130 > -x, --exclude=PAT 比较目录的时候排除指定PAT模式的文件名的比较 > -i, --ignore-case 忽略两个文件中大小写的不同 > -e 将比较的结果保存成一个ed脚本,之后ed程序可以执行该脚本文件,从而将file1修改成与file2的内容相同,这一般在patch的时候有用。 > diff -e 1.txt 2.txt > script.txt > 这样就是生成了一个ed可以执行的脚本文件script.txt,生成脚本文件之后我们还需要做一个操作, 在脚本文件末尾添加ed的write指令,只需要执行 echo "w" >>script.txt 将w指令附加到脚本文件的最后一行即可。 > 那么如何应用该脚本文件呢,可以这样使用: > ed - 1.txt < script.txt > 注意中间的 – 符号表示从标准输入中读取,而 < script.txt 则重定向script.txt的内容到标准输入。这样执行之后1.txt的内容将与2.txt完全相同。 ### 8.2 实例 > diff分析两个文件,并输出两个文件的不同的行。**diff的输出结果表明需要对一个文件做怎样的操作之后才能与第二个文件相匹配**【或者这么理解:与第一个文件相比,第二个文件发生了那些变化】【git diff的结果输出也是如此】。diff并不会改变文件的内容,但是diff可以输出一个ed脚本来应用这些改变。 > 现在让我们来看一下diff是如何工作的,假设有两个文件: //file1.txt ~~~ I need to buy apples. I need to run the laundry. I need to wash the dog. I need to get the car detailed. ~~~ //file2.txt ~~~ I need to buy apples. I need to do the laundry. I need to wash the car. I need to get the dog detailed. ~~~ 我们使用diff比较他们的不同,输入命令 `diff file1.txt file2.txt` 输出如下结果: ~~~ 2,4c2,4 < I need to run the laundry. < I need to wash the dog. < I need to get the car detailed. > I need to do the laundry. > I need to wash the car. > I need to get the dog detailed. ~~~ 我们来说明一下该输出结果的含义,要明白diff比较结果的含义,我们必须牢记一点,diff描述两个文件不同的方式是告诉我们怎么样改变第一个文件之后与第二个文件匹配。我们看看上面的比较结果中的第一行 2,4c2,4 前面的数字2,4表示第一个文件中的行,中间有一个字母c表示需要在第一个文件上做的操作(a=add,c=change,d=delete),后面的数字2,4表示第二个文件中的行。 > 2,4c2,4 表示: > 第一个文件中的第二行到第四行需要改变(c),才能和第二个文件一样,操作有 > a=add 增加 > c=change 改变 > d=delete 删除 > 接下来的内容则告诉我们需要修改的地方,前面带 < 的部分表示左边文件的第[2,4]行的内容,而带> 的部分表示右边文件的第[2,4]行的内容,中间的 --- 则是两个文件内容的分隔符号。 > ## 9.查看系统版本 ### 4.1 lsb_release -a 系统发行版本信息 LSB是Linux Standard Base的缩写,lsb_release命令用来显示LSB和特定版本的相关信息。此命令适用于所有的Linux发行版本。 ~~~ lsb_release -a ~~~ ~~~ No LSB modules are available. Distributor ID: Ubuntu # 系统类别是ubuntu Description: Ubuntu 14.04.5 LTS # 14年2月4月发布的稳定版本,LTS是Long Term Support:长时间支持版本 三年 ,一般是18个月 Release: 14.04 # 发行版本号 Codename: trusty # ubuntu的代号名称 ~~~ ### 4.2 cat /proc/version查看内核版本 ~~~ cat /proc/version Linux version 4.4.0-31-generic (buildd@lgw01-43) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 ~~~ ~~~ Linux version 4.4.0-31-generic 内核版本号 gcc version 4.8.4 gcc编译器版本号 Ubuntu 4.8.4-2ubuntu1~14.04.3 Ubuntu版本号 ~~~ ### 4.3 cat /etc/os-release ~~~ [root@localhost ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7" ~~~ ## 10. 用户管理 > 1. 管理员用户: > UID为0-系统的管理员用户(root)。 > 2. 系统用户: > UID为1~999- Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。 > 3. 普通用户: > UID从1000开始-是由管理员创建的用于日常工作的用户。 ### 10.1 adduser adduser 【用户名】,创建用户并且同时创建和用户同名的组,然后将用户加入这个组,如果这个组存在报错 ~~~ root@ubuntu:~# adduser rocket Adding user `rocket' ... Adding new group `rocket' (1004) ... Adding new user `rocket' (1004) with group `rocket' ... Creating home directory `/home/rocket' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for rocket Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y ~~~ ### 10.2 useradd useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。 useradd(选项)(参数) 选项: ~~~ -c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中; -d<登入目录>:指定用户登入时的启始目录; -D:变更预设值; -e<有效期限>:指定帐号的有效期限; -f<缓冲天数>:指定在密码过期后多少天即关闭该帐号; -g<群组>:指定用户所属的群组; -G<群组>:指定用户所属的附加群组; -m:自动建立用户的登入目录; -M:不要自动建立用户的登入目录; -n:取消建立以用户名称为名的群组; -r:建立系统帐号; -s<shell>:指定用户登入后所使用的shell; -u<uid>:指定用户id。 ~~~ 参数: 要创建的用户 ~~~ useradd –g sales jack –G company,employees //-g:加入主要组、-G:加入次要组 ~~~ 家目录 ~~~ useradd -d /home/applog/usfm -m usfm ~~~ 禁止登陆 ~~~ useradd -M -s /sbin/nologin user -M:不创建家目录 -s:指定用户登陆时使用的shell,nologin就是登陆不了 ~~~ ## 11. 文件管理 ### 11.1 文件区分 Linux中一切皆为文件,并且使用符号来区分文件的种类: > 1. -:普通文件。 > 2. d:目录文件。 > 3. l:链接文件。 > 4. b:块设备文件。 > 5. c:字符设备文件。 > 6. p:管道文件。 > ### 11.2 文件权限 读、写、执行用字符rwx表示,也可以用4、2、1数字表示 #### 11.2.1 文件权限 ##### 1. r-读 对文件的内容具有读取的权限 ##### 2. w-写 可以对文件进行修改、删除、新增功能 ##### 3. x-执行 文件是一个可执行的脚本 #### 11.2.2 目录权限 ### 11.3 特殊权限 #### 11.3.1 setfacl命令 setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数。下面来设置用户在/root目录上的权限: ~~~ [root@localhost ~]# adduser tuna [root@localhost ~]# su - tuna [tuna@localhost ~]$ ls [tuna@localhost ~]$ ls -ld /root dr-xr-x---. 3 root root 4096 6月 25 12:42 /root [tuna@localhost ~]$ cd /root/ -bash: cd: /root/: 权限不够 [tuna@localhost ~]$ 登出 [root@localhost ~]# setfacl -Rm u:tuna:rwx /root [root@localhost ~]# su - tuna 上一次登录:一 6月 25 13:24:43 CST 2018pts/4 上 [tuna@localhost ~]$ cd /root/ [tuna@localhost root]$ ls anaconda-ks.cfg mysql-community-devel-5.7.22-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar mysql-community-embedded-5.7.22-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.22-1.el7.x86_64.rpm mysqlall.sql mysql-community-embedded-compat-5.7.22-1.el7.x86_64.rpm mysql-community-server-5.7.22-1.el7.x86_64.rpm mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.22-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.22-1.el7.x86_64.rpm mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-community-libs-5.7.22-1.el7.x86_64.rpm ~~~ 用的ls命令是看不到ACL表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),这就意味着该文件已经设置了ACL了。(上边没有为tuna用户增加ACL规则时,是点) ~~~ [tuna@localhost root]$ ls -ld /root dr-xrwx---+ 3 root root 4096 6月 25 12:42 /root # 以前是 dr-xrwx---. 3 root root 4096 6月 25 12:42 /root ~~~ #### 11.3.2 getfacl命令 getfacl命令用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”。Linux系统中的命令就是这么又可爱又好记。想要设置ACL,用的是setfacl命令;要想查看ACL,则用的是getfacl命令。下面使用getfacl命令显示在root管理员家目录上设置的所有ACL信息。 ~~~ [tuna@localhost root]$ getfacl /root getfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x user:tuna:rwx # 多了一个tuna用户 group::r-x mask::rwx other::--- ~~~ 此时说名文件设置了ACL规则 ### 11.4 文件隐藏属性 > 1. Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。 > 2. 有用户曾经在生产环境和RHCE考试题目中碰到过明明权限充足但却无法删除某个文件的情况,或者仅能在日志文件中追加内容而不能修改或删除内容,这在一定程度上阻止了黑客篡改系统日志的图谋,因此这种“奇怪”的文件也保障了Linux系统的安全性。 > 3. 锁定文件:对于文件来说不能被删除、改名、设置。只有root可以使用 > #### 14.1 chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。chattr命令中可供选择的隐藏权限参数非常丰富,具体如表5-6所示。 chattr命令中用于隐藏权限的参数及其作用 ~~~ 参数 作用 i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) S 文件内容在变更后立即同步到硬盘(sync) s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) A 不再修改这个文件或目录的最后访问时间(atime) b 不再修改文件或目录的存取时间 D 检查压缩文件中的错误 d 使用dump命令备份时忽略本文件/目录 c 默认将文件或目录进行压缩 u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 t 让文件系统支持尾部合并(tail-merging) x 可以直接访问压缩文件中的内容 ~~~ 1. 文件作用 ~~~ [root@localhost ~]# echo 'hello linux' > test.txt [root@localhost ~]# chattr +a ./test.txt [root@localhost ~]# rm ./test.txt rm:是否删除普通文件 "./test.txt"?y rm: 无法删除"./test.txt": 不允许的操作 [root@localhost ~]# rm -rf ./test.txt rm: 无法删除"./test.txt": 不允许的操作 [root@localhost ~]# rm -rf ./test.txt rm: 无法删除"./test.txt": 不允许的操作 ~~~ 2. 目录 ~~~ [root@localhost ~]# mkdir test [root@localhost ~]# cd test [root@localhost test]# echo 'hello linux' > test1.txt [root@localhost test]# chattr +a ./test1.txt [root@localhost test]# echo 'hello linux' >> test1.txt [root@localhost test]# rm -rf ./test1.txt rm: 无法删除"./test1.txt": 不允许的操作 [root@localhost test]# echo 'hello linux' >> hello.txt [root@localhost test]# chattr +a ../test [root@localhost test]# echo 'hello linux' >> h.txt [root@localhost test]# [root@localhost test]# [root@localhost test]# chattr +i ../test [root@localhost test]# echo 'hello linux' >> h2.txt # 加-i后,无法再目录下创建文件 -bash: h2.txt: 权限不够 ~~~ #### 14.2 lsattr命令 用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls等看不出来隐藏权限 ~~~ [root@localhost test]# lsattr ../test -----a---------- ../test/test1.txt ---------------- ../test/hello.txt ---------------- ../test/h.txt [root@localhost test]# cd .. [root@localhost ~]# lsattr test -----a---------- test/test1.txt ---------------- test/hello.txt ---------------- test/h.txt [root@localhost ~]# lsattr -d test ----ia---------- test ~~~