ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
**[linux基础](https://www.cnblogs.com/lichihua/p/9286852.html)** elear   清屏 关机重启: shutdown、reboot 定时任务: crontab –e 回车 \*\*\*\*\* 命令 \-e:编辑该用户的计时器设置; \-l:列出该用户的计时器设置; \-r:删除该用户的计时器设置; \-u:指定要设定计时器的用户名称。 帮助命令 man 选项 文件名(或者命令名) 结果里面: NAME:命令功能 SYNOPSIS:选项的格式 DESCRIPTION:命令描述 OPTIONS:选项 **查找文件命令:****whereis** 配置文件/命令**locate** 关键字  **updatedb**手动更新数据库,whereis 和locate都是从这个数据库中找这个数据。 **which** 文件(夹) **find** 起始目录目录 -属性 属性值 属性: \-name 按照指定的文件名查找 find ./bbb/ -name aaa.txt \-user       按照指定的所有者查找 \-group     按照指定的所属组查找 \-size     按照指定的大小进行查找 find / -size 2M 表示查找2m的文件 find / -size +2M 表示查找大于2m的文件 find ./ -size -2M 表示查找小于2m的文件 \-perm 按照指定的权限查找 find  ./bbb -perm 755 grep 在文件中搜索符合条件的字符串 gerp 要搜索的字符串 文件名 grep javascript ./bbb/ 管道符:将命令1的结果作为命令2的参数 命令1|命令2 find / -name \*passwd\* | grep /etc/passwd           ls:显示目录内容 ls -a 显示隐藏文件 ls -1 列显示 ls -sh 以K M G显示 ll \-sh 以长格式显示 相当 ls -lsh **创建目录**: mkdir ./dir1 ./dir2 ./... **递归创建目录**: mkdir -p ./parentDir/childDir mkdir -p ./parentDir/{childDir1,childDir2,...} **删除文件或目录**** unlink****删除文件** rm -rf ./dir r递归 f不提示直接删除 **创建文件** **touch**如果文件不存在则创建空文件 否则就更新文件的时间 touch ./filename **批量修改文件**** rename** **复制目录或者文件**cp \[选项\] 源文件 目标文件 当目标文件文件不是目录则重命名 当目标文件是目录则直接复制 选项: -p 表示保持源文件的原始属性(比如时间啥的)-r 递归 重命名aaa.txt文件为bbb.txt : cp ./aaa.txt ./bbb.txt 复制aaa.txt文件到bbb目录下 cp ./aaa.txt ./bbb 复制aaa目录到 bbb目录下cp ./aaa ./bbb 如果bbb文件夹不存在 那么会将aaa重命名为bbb **移动或者重命名文件****/****文件夹**: **mv** 源文件或者源目录 目标文件夹/             移动 **mv** 源文件或者源目录 目标文件 移动并且重新命名 mv aaa/ ./bbb 将aaa目录移动并重命名为bbb mv aaa/ ./bbb/ 将aaa目录移动到bbb目录下 mv aaa.txt ./bbb 或者mv aaa.txt ./bbb/ 将aaa.txt移动到bbb mv aaa.txt ./bbb/bbb.txt 将aaa.txt移动到bbb 并且重命名为bbb.txt **创建软连接和硬连接:** **ln** **创建软连接**(相当于windows的快捷方式,源文件被删除那么目标文件则失效) ln -S ./源文件 ./目标文件 删除软连接的时候注意去掉 后面的/ **创建硬连接**(相当于php中引用的概念,不能跨区只能超级用户创建,也不能是目录) ln ./源文件 ./目标文件 **查看文件内容:** 查看全部内容并且显示行号 **cat** -n ./aaa.txt **more**命令类似 cat ,不过会以一页一页的形式显示 more –dc log.txt \-:指定每屏显示的行数; \-d:显示“\[press space to continue,'q' to quit.\]”和“\[Press 'h' for instructions\]”; \-c:不进行滚屏操作。每次刷新这个屏幕; \-s:将多个空行压缩成一行显示; \-u:禁止下划线; +:从指定数字的行开始显示。 **分屏显示****less ** \-f  强迫打开特殊文件 \-i  忽略搜索时的大小写 \-N  显示每行的行号 **ps**查看进程信息并通过less分页显示同时显示行号 ps -ef|less -N 浏览多个文件 less test2.log test.log 显示行号浏览完毕后自动退出: less -eN ./aaa.txt 进入文件后的操作: /字符串:向下搜索“字符串”的功能 按下/键输入文字再按enter键就是搜索了 ?字符串:向上搜索“字符串”的功能 n:向下搜索按下/键输入文字再按enter键然后按n是向下先试试搜索的字符串,N是向上 N:向上搜索 h  显示帮助界面 Q  退出less 命令 u  向上翻半页 d  向下翻半页 y 上一行 回车键下一行 空格键 下一页 b 上一页 \[pagedown\]:下一页 \[pageup\]:上一页 **Head**从头显示 默认从上至下显示10行: head ./aaa.txt n为整数表示从前面显示多少行,负数表示从第一行开始到倒数多少行 head -n 3 ./aaa.txt \# 从第一行开始显示3行 head -n -3 ./aaa.txt #显示从第一行到倒数三行 **tail**:从后面显示文件内容 tail \-n m ../aaa.txt #显示后面10行 权限 角色:所有者、所属组、其他 权限:  r(4)、w(2)、x(1) :可读、 可修改文件内容|在文件夹中可可进行创建|删除|重命名|剪|”复制、 可(进入目录)执行文件 755   rwx r-x r-x   所有者,所属组,其他 创建用户:        useradd 用户名 修改用户名:    passwd 用户名 **修改角色权限** 方法1: chmod 755 ./aaa.txt       修改aaa.txt的权限 方法2: chmod 角色 操作 权限 角色:u:所有者; g所属组; o其他 Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/[passwd](http://man.linuxde.net/passwd "passwd命令")文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內! 操作: + : 在原有的基础上加上某权限 \- : 在原有的基础上减去某权限 \=   : 不管原来什么权限 都改成 当前设置的权限 权限: r w x chmod -R go-rx   ./aaa.txt chmod u+x,g+w ./f01  //为文件f01设置自己可以执行,组员可以写入的权限 chmod u=rwx,g=rw,o=r ./f01 chmod 764 ./f01 chmod a+x ./f01  //对文件f01的u,g,o都设置可执行属性 修改所属组: **chgrp** 选项 新所属组名 文件(夹)名 chgrp -R root ./bbb/ 同时修改所有者和所属组 **chown** 所有者用户名:所属组名 文件(夹) chwon -R root:root ./bbb/ **压缩和解压缩** **gzip**压缩 :压缩后源文件就没有了不能压缩文件夹 最多只能通过 gizp -9v ./dir/\* 将文件里面的文件依次压缩 选项 -# (#表示1-9)1压缩快但是压缩比差 9压缩比最好但是也是最慢的 默认的是6 \-v 显示压缩比信息 gzip -9v aaa.txt gzip 解压: -d 选项就是解压 gzip -dv aaa.txt.gz **bzip2** 压缩 和gzip一样就是多了一个保留源文件 -k 参数 压缩 bzip2 -9kv ./aaa.txt 解压 bzip2 -dv ./aaa.txt.bz2 **tar**打包 可以压缩多个文件可以压缩文件夹 tar打包时默认的时候没有压缩功能,压缩是后面的选项\-z -g 默认解压是解压全部 可以后面跟要解压的文件名,就能将某个文件解压出来 选项 压缩: \-c创建打包文件\-f 新建文件名\-t 查看 解压:\-x 解压\-C 这里的大写C配合\-x使用将包解压到指定位置 其他:\-v 显示解压过程 \-z gzip压缩方式  \-j bzip2压缩/解压缩方式 \-c:建立一个压缩文件的参数指令(create 的意思);  \-x:解开一个压缩文件的参数指令!  \-t:查看 tarfile 里面的文件!  \-r:向压缩归档文件末尾追加文件  \-u:更新原压缩包中的文件 可选参数 \-z:有gzip属性,即需要用 gzip 压缩  \-j:有bz2属性,即需要用 bzip2 压缩  \-Z:有compress属性的\-v :压缩的过程中显示文件(显示所有过程)!这个常用,但不建议用在背景执行过程!  \-O:将文件解开到标准输出\-f :使用档名,请留意,在 f 之后要立即接档名!不要再加参数!例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成『 tar -zcvPf tfile sfile』才对喔!\-p :使用原文件的原来属性(属性不会依据使用者而变)\-P :可以使用绝对路径来压缩!\-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!  \--exclude FILE:在压缩的过程中,不要将 FILE 打包!\-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。\# tar -cf all.tar \*.jpg // 这条命令是将所有.jpg的文件打成一个名为all.tar的包。\-c是表示产生新的包,\-f指定包的文件名。\# tar -rf all.tar \*.gif // 这条命令是将所有.gif的文件增加到all.tar的包里面去。\-r是表示增加文件的意思。\# tar -uf all.tar logo.gif // 这条命令是更新原来tar包all.tar中logo.gif文件,\-u是表示更新文件的意思。\# tar -tf all.tar // 这条命令是列出all.tar包中所有文件,\-t是列出文件的意思\# tar -xf all.tar // 这条命令是解出all.tar包中所有文件,\-x是解开的意思 tar \[-cxtzjvfpPN\] 文件与目录 .... tar -cf archive.tar foo bar         # 将foo 和 bar打包成archive.tar         tar -tvf archive.tar                   # 详细列出archive.tar中的所有文件tar -xf archive.tar                    # 从archive.tar中提取(解压)所有文件. tar 选项 新包名 打包文件(夹)注意f后面不能有其他的选项了 tar -c -f xxoo.tar file1 file2 file3 将file1、file2、file3打包到 xxoo.tar文件中 tar -x -c ./bbb -f xxoo.tar file1 提取xxoo.tar 中的file1文件 并移动到当前路径的bbb文件夹内 tar -c -f xxoo.tar.bz2 -j file1 file2 file3 将file1、file2、file3用bzip2方式压缩并打包到 xxoo.tar.bz2文件中 tar -j -x -f xxoo.tar.bz2 -C ./ccc/ 将xxoo.tar.bz2 解压到ccc文件夹 tar -cjfv lichiuha.tar.bz2 parentDir 将parentDir压缩打包成lichiuha.tar.bz2 **文件系统:****mount****、****umount****、****fsck****、****df****、****du** **挂载**:**mount** /dev为linux的设备 直接是访问不到这里的设备的 如cd /dev/cdrom 提示cdrom不是目录我们要用这个设备必须将这个设备挂载到一个存在的文件目录上 查看挂载设备: 直接输入mount 回车是查看已挂载的设备 **挂载设备**:   mount \[选项\] 外部设备 挂载点(挂载点是一个存在目录 必须是一个空目录否则已有的文件会被暂时覆盖) 选项:-t 挂载类型 如 mount -t 9600 /dev/cdrom /media/ **卸载设备** umount /media/   (必须突出带/media/以外的目录才能成功,否则会提示 device is busy) **fsck** **修复文件系统** **df –hl** 显示磁盘分区上的可使用的磁盘空间 **du \[****文件名****\]**查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看 **系统安全:****sudo****、****su****、****chmod****(修改角色权限)、****setfacl** Sudo语法:sudo 命令 Sudo配置文件/etc/sudoers 修改sudo配置文件visudo foobar ALL=(ALL) ALL foobar用户拥有root的所有权限 foobar localhost= /sbin/ifconfig, /bin/ls 让他像root那样使用ls和ifconfig su:用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码 su -c ls root 变更帐号为root并在执行ls指令后退出变回原使用者: su 用户名 可以用来细分linux下的文件权限chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限(ACL规则) 例子:在/mnt 下建立一个test文件 将权限改为777  并查看其ACL设置 \[root@yang ~\]# **cd /mnt** \[root@yang mnt\]# **touch test** \[root@yang mnt\]# **chmod 777 test** \[root@yang mnt\]# **getfacl test** \# file: test                                //文件名 \# owner: root                            //文件所属者 \# group: root                            //文件所属组 user::rwx                                //文件所属者权限 group::rwx                               //同组用户权限 other::rwx                               //其它者权限 现在我们让kiosk用户只有读取的权限 \[root@yang mnt\]# **setfacl -m u:kiosk:r test** \[root@yang mnt\]# **ll test** \-rwxrwxrwx+ 1 root root 0 Feb  5 18:22 test        //权限的最后多了一个“+” \[root@yang mnt\]# getfacl test \# file: test \# owner: root \# group: root user::rwx user:kiosk:r--                                    //kiosk的权限为r group::rwx mask::rwx other::rwx 除了对某个文件的单个用户进行权限设置外,还可以对某个组进行同样的设置:g:\[用户组\]:\[rwx\] 还能对有效权限(mask)进行设置:有效权限(mask) 即用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效 如上面的test文件,已经有了可读权限,如果我们把它的有效权限修改为只有写权限,则设置的ACL权限不在有效权限之内,则用户kiosk就不可能再查看test文件中的内容了 操作: setfacl  -m  m:w    /mnt/test 最后取消ACL权限: setfacl  -x u:kiosk  /mnt/test 恢复有效权限: setfacl -x m /mnt/test **进程管理:****w****、****top****、****ps****、****kill****、****pkill****、****pstree****、****killall** **w –f** 显示已经登陆系统的用户列表 **top** 可以实时动态地查看系统的整体运行情况 **ps –ef** 用于报告当前系统的进程状态。可以搭配[kill](http://man.linuxde.net/kill "kill命令")指令随时中断、删除不必要的程序 选项:(选项没有\-) a,显示所有进程 u,显示进程的所有者 x,更加详细的显示。 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2872 1420 ? Ss 10:38 0:01 /sbin/init user:该进程属于哪个账号。 pid:进程号 %CPU:该进程使用掉CPU资源的百分比 %MEM:该进程所占用的物理内存百分比 VSZ:使用掉的虚拟内存的数量。 RSS:该进程占用的固定内存两。 TTY:该进程在那个终端上面运行。?表示与终端无关内核正常调用。tty1-tty6 在本机上面的登录者pts,有网络连接的进程。 STAT:该进程目前的状态,R(正在运行),S(正在休眠),Z(僵尸进程,进程已经终止但是没有办法消除。要么重新启动要么直接杀死。) START:该进程被触发的时间。 TIME:该进程实际使用了CPU的时间。 COMMAND:该进行的实际命令。 **kill****进程号**用来删除执行中的程序或工作 **pkill****进程名**可以按照进程名杀死进程。pkill和[killall](http://man.linuxde.net/killall "killall命令")应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用[kill](http://man.linuxde.net/kill "kill命令")来杀掉。 **pstree****命令**以树状图的方式展现进程之间的派生关系,显示效果比较直观 pstree –p 显示当前所有进程的进程号和进程[id](http://man.linuxde.net/id "id命令")ps –a 显示所有进程的所有详细信息 **killall -p** 使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。 **用户管理:****id****、****usermod****、****useradd****、****groupadd****、****userdel** **id**显示真实有效的用户ID(UID)和组ID(GID) **usermod****命令**用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称 usermod -G staff newuser2 将newuser2添加到组staff中: usermod -l newuser1 newuser 修改newuser的用户名为newuser1: usermod -L newuser1 锁定账号newuser1使其密码无效 usermod -U newuser1 解除对newuser1的锁定: **useradd** **新建用户** \-g:指定用户所属的群组; 加上这个参数创建用户时就不会默认新建一个和用户名一样的组了 \-G:指定用户所属的附加群组; useradd 用户名 ===> 创建一个新用户passwd 用户名 ===> 修改用户名 **groupadd** **组名** **新建组** **userdel****用户名** 用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。 \-f:强制删除用户,即使用户当前已登录; \-r:删除用户的同时,删除与用户相关的所有文件。 **网络应用:****curl****、****telnet****、****mail****、****elinks** **curl** **地址** 支持包括HTTP、HTTPS、[ftp](http://man.linuxde.net/ftp "ftp命令")等众多协议等下载工具 **telnet 192.168.2.2**用于登录远程主机,对远程主机进行管理安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的[ssh](http://man.linuxde.net/ssh "ssh命令")方式了 从一台机子进入另一台机子:ssh [root@192.168.0.20](mailto:root@192.168.0.20) **mail****命令**是命令行的电子邮件发送和接收工具 **elinks****命令**能实现一个纯文本界面的WWW浏览器 **文件传输****ftp****、****scp** **scp****命令**用于在Linux下进行远程拷贝文件的命令 从10.10.10.10机器上的`/opt/soft/`中下载mongodb目录到本地的`/opt/soft/`目录来。 scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/ 上传本地目录/opt/soft/mongodb到远程机器10.10.10.10上/opt/soft/scptest的目录中去。 scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest **ftp**命令的功能是用命令的方式来控制在本地机和远程机之间传送文件 上传至新服务器: 在备份完成的本地服务器(如北京的用的是137)用xshell链接上新服务器:sftp root@139.196.75.152回车输入密码outest@2016 新的服务器:sftp sftp@139.196.212.28 密码:upload@2016 回车这时pwd可知现在已经进入的远程新服务器的/root目录位置cd / cd /data\_ssd/sftp/ 新建文件夹beijing 再进入cd ./beijing pwd查看我在远程服务器的位置在哪 pwd如果在beijing的文件夹位置就ok然后进入本地的课程备份的位置: lcd /home/beijing 查看是否在:lpwd如果都ok那么执行 put ./\* ./开始复制上传 网络测试:ping、netstart、host **netstart**查看端口 netstat -a 查看所有端口 netstat –tunlp 查看端口占用情况 netstat -tunlp | grep 端口号 查看某端口占用情况 **host \[-a\]** **域名** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。 网络配置hostname、ifconfig Hostname 用于显示和设置系统的主机名称 **ifconfig****命令**被用于配置和显示Linux内核中网络接口的网络参数 DEVICE 网卡名 BOOTPROTO 这张网卡通过什么方式来获得IP地址(none,通过手工获得。static,静态获得。dhcp,动态获得) HWADDR=00:0c:29:0e:15:70 (MAC地址) ONBOOT=yes(系统或网络重新启动时候是否直接自动启动。) IPADDR=192.168.186.86 (你设置的IP地址) DNS1=202.106.0.20(配置主DNS地址,可以最多有3个 第二个DNS2 DNS3) DNS:domain name server,将主机名转换为IP地址或将IP地址转换为主机名 **软件包管理** **yum****、****rpm****、****apt-get** rpm 二进制包(不能解决依赖、不用重新编译缺少自定义性) 选项: i,安装 v,显示安装过程 h,显示安装的进度条。 rpm -ivh 安装的完整的包名(rpm包后缀名必须为RPM) 如rpm -ivh gcc-4.4.6\-4.el6.i686.rpm \-q,查询 查询时写的是软件名rpm -q gcc 配合\-q的参数 l,安装的软件,生成的东西都放到哪里去了。(RPM安装的软件包的位置比较乱) c,查看配置文件的配置 rpm -qc gcc d,查看帮助文件的位置。 rpm -qd gcc i, 列出软件的详细信息。 rpm -qi gcc \-f 文件名,查看该文件是由哪个软件安装包安装出来的。 rpm -qf /usr/bin/c89 gcc-4.4.6\-4.el6.i686 \-e,卸载软件 yum 解决了依赖关系的rpm 格式:yum 选项 软件名 选项: install 软件名,安装软件yum install gcc\* 所有gcc编译器都安装了。 remove 软件名,但是不要用。会将所有的相关联的软件都删除掉。建议使用rpm -e