linux技术

1,084 阅读17分钟

1/如何理解root用户和普通用户

一台服务器上,root用户和普通用户之间的关系?
   <1>一台linux服务器,只有一个root用户,拥有最大的操作权限。其他的都是普通用户
   <2>root用户可以管理(创建/修改/删除)任何一个普通用户
   <3>可以把一台linux服务器想像成一栋楼,root就是楼长,每个普通用户就是居住在这座楼中的各户人家。
   <4>普通用户只有自己家的钥匙,没有别人家的钥匙,所以要想去别人家,就必须有别人家的钥匙(密码)。
   <5>楼长(root)有每户人家的密码,楼长可以让新的用户住进来,也可以把老用户清理出去(删除)。
   <7>普通用户可以对自己家做任意的修改(比如.bash_profile/.bashrc/.vimrc等文件的修改),
         但是这仅仅会影响自己家,不能影响别人家。
   <5>楼长如果做了修改,比如/ect/profile文件,这会对所有的普通用户产生影响.
       所以一般来说,开发人员都是在自己的普通用户下进行开发的,一般不会在root用户下进行开发。
       
在Linux系统中,根据系统管理的需要将用户账号分为不同的类型,同时也有不同的权限与不同的功能,主要分为超级用户、普通用户和程序用户。

1)超级用户:root用户是Linux系统中默认的超级用户账号,对`主机`拥有最高的权限,
          类似于Windows系统中的 Administrator用户。
          只有当进行系统管理、维护任务时,才建议使用root用户登录系统,
          日常事务处理建议只使用普通用户账号。
          这也是为啥在公司内,不允许员工在root用户下操作的原因。

2)普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的`宿主目录`中拥有完整权限。

3)程序用户:在安装 Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行,如bin、 daemon、ftp、mail等。

     

2/root用户和普通用户之间的切换

root用户切换到任何一个普通用户,都不需要密码,直接su - user_name
普通用户之间切换,需要密码。
例如user1切换到use2,需要输入user2的密码,就像你去别人家,需要有别人家的钥匙才行
普通用户切换到root用户,需要root的密码。

su: switch user
su username  # 只是切换了用户,但是没有改变工作环境(家目录)
su - username  # 既切换了用户,也改变了工作环境

3/给普通用户赋予一些超级管理员的操作权限

如果你是普通用户,在你进行一些操作的时候,经常会被提示:权限不够。
这个时候,你就需要被赋予root权限。
让root用户在/etc/sudoers文件中给指定的普通用户赋予一定的root权限。

被赋予root权限的普通用户,在执行一些超级管理员才有的命令的时候,需要使用sudo关键词
 

3/root用户对普通用户的一些操作

<1>创建新的普通用户,只有root用户可以创建普通用户
    useradd new_user  #创建新用户new_user
    passwd new_user   #给新创建的用户new_user设置密码
    说明:新创建的用户会在/home下创建一个用户目录new_user,这就是新用户的家目录

<2>给普通用户赋予root权限
    修改 /etc/sudoers 文件,找到root一行,在root下面添加一行,如下所示:
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)     ALL
    new_user   ALL=(ALL)  NOPASSWD:ALL

<3>修改用户名称
     usermod -l 新的名字 旧的名字
     
<4>删除用户
     userdel username    
     这样删除用户并不能删除该用户的所有信息,只是删除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四个文件里的该账户和组的信息。
     下次再创建同名的用户时,就会出现用户已经存在的提示。
     真正彻底的删除用户的命令是 userdel -r username 

1/如何登陆服务器

1)先登陆堡垒机(线下的服务器一般不需要登陆堡垒机,这个要看具体的公司的要求)
        ssh @xxxx.xxxx.com
        密码:邮箱密码+token密码

 (2)从堡垒机登陆到服务器(开发服务器,测试服务器,沙箱服务器,正式服务器)
     (1)登陆到普通用户:ssh username@host   # 用户名@host地址
            输入username的密码:xxxxxxxx
            sudo su - root  # 切换到root用户
            输入root密码:xxxxxxxx
     (2)直接登陆到root用户ssh root@ip   # 从root用户退出到普通用户,只需要exit命令即可

2/ 登录mysql

      mysql -u 用户名 -p   # 例如mysql -u root -p
      mysql密码:xxxxxxxxx
      
      

3/linux系统如何修改密码?

     如果是普通用户,修改自己的密码,用passwd命令,会让你先输入自己的旧密码,再输入两遍新密码
     如果是root用户,用password username命令,就可以修改具体的某个username的密码了,直接输入两遍新密码就可以了,不用输入旧密码

4/在linux中如何查看一个文件的编码?

     先通过vim命令打开文件,然后 :set fileencoding
     
     

5/在linux中如何修改文件的编码?

     1> 先通过vim命令打开文件
     2> 通过:set fileencoding 来查看文件当前的编码形式
     3> 通过:set fileencoding=utf-8命令把文件的编码方式修改为utf-8格式
     4>:wq保存文件
     5> 下次再通过vim打开文件的时候,通过:set fileencoding查看文件编码的时候,就是utf-8

6/查看linux操作系统版本信息?

     cat /proc/version

7/SecureCRT是什么?

     SecureCRT是一个商业终端连接工具(可以理解为就是一个终端,可以连接远程的服务器)。
     默认设置下,通过SecureCRT连接SSH远程服务器可能出现中文乱码的情况。这是由于SecureCRT字符编码与远程服务器的字符编码不一致造成的。
     1>可以先修改终端的编码方式,在option里面,可以修改单个session的编码格式,也可以需改所有session的编码格式。
     2>如果修改终端的编码方式之后,汉字依然乱码,则可能是由于远程服务器系统中默认的字符编码不是UTF8所致。

8/ /etc/profile文件和各个用户的家目录下的.bash_profile文件的区别?

     <1> /etc/bash_profile 表示系统整体设置,修改生效后系统内所有用户(root用户和普通用户)都受影响
     <2> 而 ~/.bash_profile 只表示当前用户(root用户或者普通用户)的个人设置,生效后只有当前用户受影响,每个普通用户的家目录下都有.bash_profile文件

9/在linux中修改完配置文件后,怎么立即并且永久生效?

    source filename

10/设置用户自动断开连接服务器

  将以下字段加入到/etc/profile中或者各个普通用户的家目录中的.bash_profile文件中。
  export TMOUT=900 # 设置900秒内用户无操作,终端就自动断开链接服务器
  readonly TMOUT   # 将值设置为readonly 防止用户更改

11/linux中如何得到一个文件的绝对路径?

  readlink -f filename
        
        

12/root用户的家目录是在root文件夹下,其他普通用户的家目录是在home文件夹下

  其实root用户也是一个用户,只不过root不同于其他的普通用户。
  root可以操作系统文件,但是普通用户不行。
  root可以管理普通用户,包括创建,修改组,删除等。

13/Linux下命令行显示当前全路径,在当前用户家目录下的.bash_profile文件中添加

  export PS1='[\u@\h \w]\$'  
  其中\W就是路径的设置选项,大写的W是简写路径模式,小写的w为全路径模式

14/hostname和ip的区别?

 hostname是主机名,用于在系统中标识一台机器; IP地址是在tcp/ip网络中唯一标志一台机器。
 联系到实际生活,主机名相当于你家的主人名,如张三;
 而IP地址相当于你家的具体地址,如xx小区30号楼2单元302。

15/linux的crontab定时任务?

 crontab -l 显示所有的定时任务
 crontab -r 删除所有的定时任务
 crontab -e 编辑定时任务
 切记:一定要搞清楚执行该.py脚本的是哪一个python解释器(可以在终端的命令行中通过which python命令来确定python的绝对路径),,如上述中是/anaconda3/bin/python,最好用绝对路径。。。后面是.py脚本的绝对路径。或者是先cd到某个目录下,然后python ./filename
 1.每分钟定时执行一次:
         每1分钟执行: */1 * * * * 或者 * * * * *
         每5分钟执行: */5 * * * *
 2.每小时定时执行一次:
         每小时执行: 0 */1 * * * 或者 0 * * * *
         每天上午7点执行:0 7 * * *
         每天上午7点10分执行:10 7 * * *
 3.每天定时执行一次:
         每天执行 0 0 * * *  # 每天的0点0分执行一次
 4.每周定时执行一次:
         每周执行 0 0 * * 0  # 每周天的0点0分执行一次,0和7是周天,1-6分别代表周一到周六
 5.每月定时执行一次:
         每月执行 0 0 1 * *  # 每月的1号的0点0分执行一次
 6.每年定时执行一次:
         每年执行 0 0 1 1 *  # 每年的1月1号这一天的0点0分执行一次
 7.其他例子
         5 * * * * ls 指定每小时的第5分钟执行一次ls命令
         30 5 * * * ls 指定每天的 5:30 执行ls命令
         30 7 8 * * ls 指定每月8号的7:30分执行ls命令
         30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
         30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0和7代表星期天,1-6分别表示星期1-星期六,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
         30 3 10,20 * * ls 每月10号和20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
         25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
         */15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
         30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日的6:30执行一次ls命令。 ]

16/快速查看一个文件的最后几行

   tail -f  filename
   例如:tail -f /var/log/cron.log

17/linux vim操作提示“Can't open file for writing”或“operation not permitted”的解决办法

   在linux上使用vi命令修改一个文件内容的时候,发现无法保存.
   每次写完使用“:q!”命令可以正常退出但是使用":wq!"命令保存文件并退出时出现一下信息提示:
     E212: Can't open file for writing Press ENTER or type command to continue

   出现这个错误的原因可能有两个:
      1.当前用户的权限不足
      2.此文件可能正被其他程序或用户使用。
   一般错误原因都是前者,解决方案是在使用vi命令打开文件时,前面加上sudo来临时提供管理员权限,比如使用命令“sudo vi hosts”打开编辑文件。

   由此看来,sudo命令是很有用的,当我们执行某种操作系统提示诸如“operation not permitted”等权限不足信息时,我们很多时候都可以在命令前面加上sudo来解决权限不足问题。

   比如当我们从linux服务器上下载某一个文件或上传某一个文件有可能提示这个,也有可能直接上传不成功但是什么都没提示;这时你就应该想想是不是账号的权限不足,加个sudo试试,需要输入密码xxxxxxxx。 super user do (超级管理员do)

18/修改文件的读/写/执行权限

  chmod 777 filename
  chmod 修改文件或者目录的权限,u表示当前用户,g表示同组用户,o表示其他用户,a表示所有用户,r表示可读,w表示可写,x表示可执行,,例如chmod u+r 1.txt 表示给当前用户比添加可执行权限

19/后台执行程序

  使用&后台执行程序,结束会输出到终端
  使用nohup执行程序,结果会输出到nohup.out文件中
  所以经常使用nohup  python ./file.py  & 配合来启动程序

20/如果某个用户的家目录下没有.bashrc或者.bash_profile文件

  自行创建

21/.bash_profile文件和.bashrc文件的关系?

  每次修改.bashrc后,使用source .bashrc就可以立刻加载修改后的设置,使之生效。

  一般会在.bash_profile文件中显式调用.bashrc。
  登陆linux启动bash时首先会去读取~/.bash_profile文件,这样~/.bashrc也就得到执行了你的个性化设置也就生效了。

23/linux创建硬链接和软链接

  具体用法: ln -s 源文件 目标文件 (创建硬链接,没有-s参数 ,,-s是代号(symbolic)的意思,因为软连接又称符号链接)
  当我们需要在不同的目录用到相同的文件时,我们没有必要在不同的目录下都放一个相同的文件,我们只需要在某个固定的目录放上该文件,然后在其他的目录下用ln命令链接它就可以,不必重复占用磁盘空间,例如 ln -s /bin/less  /usr/local/bin/less

  这里有两点要注意:
      第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
      第二,ln的链接又软链接和硬链接两种,软链接就是ln -s source targe 它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间.
             硬链接ln ** **,没有参数-s,它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
     【软连接】:软链接,称之为符号连接(SymbolicLink),软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
  二者区别:
      硬连接:不允许给目录创建硬链接;只有在同一文件系统中的文件之间才能创建链接,而且只有超级用户才有建立硬链接权限。如果我们删除了硬连接的源文件,那么硬连接文件依然存在,不受影响 。这是因为系统“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。
      软连接:软链接没有硬链接以上的两个限制,因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。但是软链接的缺点在于:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。(软连接:删了原文件,目标文件也没了)

24/bin目录是什么

   /usr/bin下是内置的一些命令,例如pip vim rm 等
   /usr/lib/python3.7/site-package中是一些安装的包

25/Linux多命令顺序执行连接符(; || && |)

     当我们需要一次执行多个命令的时候,命令之间需要用连接符连接,不同的连接符有不同的作用。
     (1) 分号; 没有任何逻辑关系的连接符。当多个命令用分号连接时,各命令的执行成功与否不会影响下一条命令,都会一条一条执行下去。
     (2) 逻辑或|| 当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行。
     (3) 逻辑与&& 当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与 || 正好相反。
     (4) 管道符| 当用此连接符连接多个命令时,前面命令执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面命令的输出,也会报错。例如cat 1.txt | grep "aaa",前面命令的输出是后面命令的输入

26/在执行代码文件的时候,nohup和&的区别?

     1/ 没有nohup也没有&:
             python aaa.py: 前台执行程序,如果输入ctrl + c,程序终止
     2/ 使用&
             python aaa.py & : 后台执行程序,首先会在终端显示进程号,,如果输入ctrl + c,程序会继续执行,如果关掉session,程序终止
     3/ 使用nohup
             nohup python aaa.py  : 终端没有出现进程号,,有一个“忽略输入,输出至nohup.out”的提示,,关闭session,程序仍然执行
     4/ nohup和&同时使用
             nohup python aaa.py &会在终端显示进程号,也会有一个“忽略输入,输出至nohup.out”的提示,,关闭session,程序仍然执行 

27/linux下,.swp文件是什么?

     非正常关闭vi/vim编辑器的时候,会生成一个.swp文件。
     当你打开一个文件时候,vi就会生成一个.swp文件,以备不测。如果你正常退出,那么这个.swp文件就会自动删除。
     当你用多个程序编辑同一个文件时候,或者非常规退出时,该.swp文件就不会删除。
     第一种情况的话,为了避免同一个文件产生两个不同的版本(vim中的原话),还是建议选择readonly为好。
     第二种情况的话,你可以用vim -r filename恢复,然后再把swp文件删除(这个时候要确保你的swp文件没有用处了,要不然你会伤心的)

28/在.sh文件中,set -e的作用?

     你写的每个sh脚本都应该在文件开头加上set -e
     这句语句告诉bash如果任何语句的执行结果不是true则应该退出。
     这样的好处是防止错误像滚雪球般变大导致一个致命的错误,而这些错误本应该在之前就被处理掉。
     如果要增加可读性,可以使用set -o errexit,它的作用与set -e 相同

29/在Linux中字符串替换

     : %s/old/new/g   # g表示全部替换

30/git fetch 和 git pull 区别

   git fetch:相当于是从远程获取最新版本到本地,但是不会自动merge
   git pull:相当于是从远程获取最新版本并merge到本地
   git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

31/git pull 之后怎么恢复到之前的版本?

   git reflog  查看历史变更记录
   git reset --hard  HEAD@{n}  # n代表你要回到的位置,最新提交的

32/ps -ef | grep

 字段含义如下:
 UID    PID    PPID    C     STIME    TTY       TIME       CMD
 zzw   14124   13991   0     00:38    pts/0     00:00:00     grep --color=auto dae
 
 UID  :程序被该 UID 所拥有
 PID  :就是这个程序的 ID 
 PPID :则是其上级父程序的ID
 C    :CPU使用的资源百分比
 STIME:该进程启动的时间
 TTY  :登入者的终端机位置
 TIME :该进程执行了多长时间,如果是0,则表示该进程执行了不到1秒钟的时间,所以表示为0
 CMD  :进程的具体任务

33/Linux级目录结构

 bin (binaries)存放二进制可执行文件,例如vim,cp等基础命令
 sbin (super user binaries)存放二进制可执行文件,只有root才能访问
 etc (etcetera)存放系统配置文件
 usr (unix shared resources)用于存放共享的系统资源
 home 存放普通用户的家目录
 root 超级用户家目录
 dev (devices)用于存放设备文件
 lib (library)存放跟文件系统中的程序运行所需要的共享库及内核模块
 mnt (mount)系统管理员安装临时文件系统的安装点
 boot 存放用于系统引导时使用的各种文件
 tmp (temporary)用于存放各种临时文件
 var (variable)用于存放运行时需要改变数据的文件

34/ 在vim中写制表符

 ctrl + v+ i
 在vim中复制,不错位  :set paste   :set nopaste
 在vim中,显示所有符号:set list

35/ git fetch /git status/ git checkout / git pull的区别

 git fetch : 查看远程服务器的代码与本地代码是否有差异
 git status : 查看本地代码是否做了修改
 git checkout : 把本地修改还原
 git pull :把远程服务器代码拉到本地,并且与本地代码merge

36/Linux常用命令

 cd  cd /home   切换目录
 pwd  查看当前所在目录
 touch  touch  houzhen.txt 创建一个空的文件
 mkdir  mkdir houzhen  创建一个新目录
 mkdir -p   mkdir -p houzhen/hou/zhen   # 创建多层目录,父目录不存在的情况,先创建父目录
 cp  cp 1.txt  2.txt  # 复制1.txt 为2.txt
 cp -r  hou  zhen   复制一个目录,复制hou为zhen,
 rm   rm 1.txt  # 删除文件
 rm -r  rm houzhen  删除目录,,加提示
 rm -rf  rm houzhen/ # 删除目录,不加提示
 rmdir  mkdir houzhen #删除空的目录
 cat  cat 1.txt    #显示文件内容
 more  more 1.txt   分页显示文件内容
 less    less 1.txt  分页显示文件内容
 head  head 1.txt  # 查看文件前10行
 tail  tail 1.txt   # 查看文件后10行
 wc  wc 1.txt  统计文件中行数,字数,字符数
 find / -nam file 在根目录下,按照名字查找文件
 grep aaa file   在文件中查找字符串aaa
 ln  source target  #创建硬连接
 ln -s source target # 创建软连接
 ifconfig  网卡网络配置,常用于查看当前ip地址
 ping  ping baidu.com  测试是否能联网
 hostname  查看主机名称
 shutdown -r  先关机,后重启
 shutdown  -h 关机后不重启
 reboot  重新启动,相当于shutdown -r
 *通配符,指所有
 shift zz 保存退出,和:wq作用相同

37/查看Linux服务器的内存和cpu使用情况

 <1>cat /proc/cpuinfo
 <2>cat/proc/meminfo

 <3>top  # 实时显示各个进程所使用的cpu和mem,按键c是对cpu使用率从大到小排序,按键m是对mem使用率从大到小排序 

 <4> free  # 查看内存的使用情况

 <5> ps -ef 

 <6> ps aux

38/快捷命令

 <1> top -H  # 查看linux系统正在执行的进程
 <2> gg  回到文件的第一行
 <3> shift+g  回到文件的最后一行
 <4> 0 光标跳转到行首
 <5> $ 光标跳转到行尾

39/修改linux系统时间

 1/复制相应的时区文件,替换系统时区文件;或者创建链接文件
 2/例如:在设置中国时区使用亚洲/上海(+8)
 3/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
     
     

40/ 什么是cst时区?

 CST可视为中国,美国、澳大利亚,古巴的标准时间。
 CST可以为如下4个不同的时区的缩写:
 中国标准时间:China Standard Time UT+8:00  (东8区)
 美国中部时间:Central Standard Time (USA) UT-6:00
 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
 古巴标准时间:Cuba Standard Time UT-4:00
     
     

41/查看crontab任务是否执行,以及执行日志

 (1)查看crontab的日志
      日志文件为/var/log/cron
      找到对应时间,是否执行指令
      这种方式只能看到是否执行,但是并无法确定是否执行成功
 (2)将定时任务的日志重定向
      日志重定向的时候要注意,要将标准错误日志一起重定向,才能获取到正常和错误的日志
      例如:
      27 10 * * * /usr/bin/sh /opt/checkES.sh >/opt/checkES.log 2>&1
      2>&1的意思是:把标准错误也输出到这个文件中。
       
       

42/crontab定时任务不执行的一些原因总结

 1/crond服务未启动
     crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它: 
     service crond start   service crond restart (sudo service crond restart)
     如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装:
     yum -y install crontabs
 2/权限问题
     脚本没有x执行权限,解决方法:
     增加执行权限,或者用bash abc.sh的方法执行
     也有可能crontab任务所属的用户对某个目录没有写权限,也会失败
 3/路径问题
 执行器的路径最好只用绝对路径,被执行的文件最好也使用绝对路径,例如/usr/bin/bash xxx.sh
 4/时区问题
     cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
     service crond restart
 5/在执行python脚本的时候,先cd相应的文件目录下,然后python  xxx.py脚本

43/cpu 核心数(core)

 总核数 = 物理CPU个数 * 每个物理CPU的核数 
 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
 # 查看物理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

44/查看ip和主机名

 hostname -i    # 查看ip
 hostname       # 查看主机名
 主机名保存在/etc/hostname文件里,所以我们可以打开这个文件,手动编辑主机名。
 xxx@xxxxxx   # @前面是用户名,@后面是主机名

45/linux的usr目录的全称是什么

 usr是user的缩写,是曾经的home目录,然而现在已经被/home取代了,现在usr被称为是Unix System Resource,即Unix系统资源的缩写。
 /usr 是系统核心所在,包含了所有的共享文件。它是unix系统中最重要的目录之一,涵盖了二进制文件,各种文档,各种头文件,还有各种库文件;还有诸多程序,例如 ftp,telnet 等等。 
     
     

46/Linux和ubuntu的区别

linux是在unix的基础上发展出来的,其核心技术仍然是unix,而ubuntu是一个linux的特例
Ubuntu是Linux的一个发行版本,Linux有许多发行版本,比如Debian,redhat等都是比较流行的。
也就是说linux和ubuntu不是一个级别的,redhat和ubuntu是一个级别的,都是linux的发行版本。

47/查看本机的ip

hostname -i   # 这个命令有的时候不行,如果不行,则用ifconfig
ifconfig   

ifconfig | grep "inet"    

48/linux 创建新的用户

 <1>首先需要登陆到root用户下,或者是其他一个具有root权限的普通用户下
 <2>useradd xxx    # 创建新的用户xxx
 <3>passwd xxx  # 给新的用户设置密码
 <4>赋予新的用户xxxroot权限

49/删除用户

 <1>若使用userdel haha 命令删除该用户时,并不能删除该用户的所有信息,
    只是删除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四个文件里的该账户和组的信息。
    默认情况下创建一个用户账号,会创建一个家目录和一个用户邮箱(在/var/spool/mail目录以用户名命名)。
    当你下次再创建haha这个用户名时,就会提示该用户名已经存在,这就是说明你之前没有删除干净
 <2>彻底删除用户名userdel -r haha,这是完全干净删除

50/linux系统中,用户之间的切换

 <1> Linux中一共有2中类型的用户:
     root用户:管理员用户,可以在linux系统中添加新的普通用户
     普通用户
 <2> #表示管理员用户,$表示普通用户
 <3> 普通用户在赋予root权限的情况下(在/etc/sudoers配置文件中修改),
     可以执行只有root用户才能执行的一些命令(只是可以执行部分root权限)
 <3> 切换用户的命令: su xxx ,su是switch user的缩写
 <4> 不管是root用户,还是普通用户,都有属于自己的密码
 <5> 从root用户切换到普通用户,不需要输入普通用户的密码
 <6> 从普通用户切换到别的普通用户或者root用户,需要输入对应的密码,
     当然如果该用户有root权限,当它切换到别的用户的时候,不需要输入密码,
     但是切换的命令需要是 sodu su xxx   # sudo 代表该用户拥有root权限
 <7> su - xxx,是切换用户的同时,直接到新用户的家目录下。

51/Linux用su切换用户时加 '-'和不加'-'的区别

  比如我从test用户切换到root用户
  su root:
      不完全切换,不改变环境变量,切换后,还是在test用户的家目录下。
  su - root  
      完全切换,改变环境变量,切换后,直接在root的家目录下~
             
  通俗易懂的总结一下,你加了-号,就相当于你的身份一变,变成了你要切换的用户,
  不加-号,那你就还是站在你原来的地方,拿着个望远镜意淫一下你切换后的场景。
     
     

52/Linux中的.xml文件

     注释以 <!-- 开始并以 --> 结束,
     例如 <!--注释内容-->

53/.vimrc文件的编辑

     显示状态行当前设置
     set statusline
    
     " 设置状态行显示常用信息
     " %F 完整文件路径名
     " %m 当前缓冲被修改标记
     " %m 当前缓冲只读标记
     " %h 帮助缓冲标记
     " %w 预览缓冲标记
     " %Y 文件类型
     " %b ASCII值
     " %B 十六进制值
     " %l 行数
     " %v 列数
     " %p 当前行数占总行数的的百分比
     " %L 总行数
     " %{...} 评估表达式的值,并用值代替
     " %{"[fenc=".(&fenc==""?&enc:&fenc).((exists("+bomb") && &bomb)?"+":"")."]"} 显示文件编码
     " %{&ff} 显示文件类型
     
     set statusline=%F%m%r%h%w%=\ [filetype=%Y]\ %{\"[fileencoding=\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\"+\":\"\").\"]\"}\ [ff=%{&ff}]\ [asc=%03.3b]\ [hex=%02.2B]\ [pos=%04l,%04v][%p%%]\ [len=%L]
    
     设置 laststatus = 0 ,不显式状态行
     设置 laststatus = 1 ,仅当窗口多于一个时,显示状态行
     设置 laststatus = 2 ,总是显式状态行
     set laststatus=2
     

54/cp命令和scp命令的区别

   scp是secure copy的简写,用于:
      <1>同一台服务器的不同用户之间的文件和文件夹的拷贝。
          可以把自己的文件或者文件夹拷贝给别人,
          也可以从别人那里拷贝文件或者文件夹到自己这里。
          需要输入对方用户的密码(免密的除外)
          
      <2>在不同服务器之间进行文件或者文件夹的拷贝
          前提是服务器之间是相通的
          仍然需要对方的密码,免密的除外
          
   cp命令只能在同一台服务器上进行拷贝
   
   下面重点讲解scp命令
   命令格式为:
      scp [参数] [源路径] [目标路径]
      常用参数为:
      -C: 允许压缩
      -p: 保留原文件的修改时间,访问时间和访问权限
      -q: 不显示传输进度条,默认是显示进度条的
      -r: 递归复制整个目录
      -l: 限定用户所能使用的宽带
      -P: 大写的P,指定数据传输用到的端口号

   <1> 复制文件到远程服务器
         执行完命令之后,需要输入远程服务器remote_username用户的密码,除非免密
         scp local_file remote_username@remote_ip:remote_folder 
         scp local_file remote_username@remote_ip:remote_file
         scp local_file remote_ip:remote_file
         scp local_file remote_ip:remote_file
         
       复制目录到远程服务器
         执行完命令之后,需要输入远程服务器remote_username用户的密码,除非免密
         scp -r local_folder remote_username@remote_ip:remote_folder  
         scp -r local_folder remote_ip:remote_folder

    <2> 从远程服务器复制文件到本地
         执行完命令之后,需要输入远程服务器remote_username用户的密码,除非免密
         scp remote_username@remote_ip:remote_file  local_folder
         
        从远程服务器复制目录到本地
         执行完命令之后,需要输入远程服务器remote_username用户的密码,除非免密
         scp -r remote_username@remote_ip:remote_folder  local_folder

55/date '+%Y-%m-%d %H:%M:%S'

查看当前的服务器系统日期
date可以显示日期,但是格式不是我们想要的,后面的'+%Y-%m-%d %H:%M:%S'是我们想要的格式
 
 

56/wget

 从网络上下载文件

57/文件上传下载

 yum install -y lrzsz
 rz  # 上传
 sz # 下载
 
 

58/rpm

 RPM是Red-Hat Package Manager的缩写,
 是一种Linux下通用的软件包管理工具,可用于安装和管理.rpm结尾的软件包。
 
 

59/yum

 Yum是Yellow dog Updater, Modified的缩写,
 能够在线自动下载RPM包并安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,非常方便!
     
     

60/查看服务器的内存

 Linux查看剩余可用内存用free -m命令,-m选项表示用MB为单位显示容量(如果是以GB为单位就换成-g选项),
 显示的结果里面used那一列是已经使用的量,free那一列就是剩余内存大小了。
     
     

61/同一台linux服务器,不同用户之间如何传递文件和文件夹

<1>传递文件
   scp file  user2@ip:/home/user2    
   # 把当前用户的file文件,传递到user2用户的/home/user2的目录下
   # 需要输入user2的密码,除非是免秘的。

<2>传递文件夹(包括文件夹本身)    
   scp -r /home/helpteach/project/mallupload/ user2@ip:/home/user2

<3>文件夹下所有文件 (不包括文件夹本身)
   scp /home/helpteach/project/mallupload/* user2@ip:/home/user2

<4>总结
   不管是传递文件夹还是文件,
   源头都是在前面,目的地总是在后面
    
    

62/不同linux服务器之间传递文件或者文件夹的方式和61完全相同

63/linxu vim 字符串替换

<1> 替换所有行的内容
     :%s/old/new/g
     #对所有行的内容进行替换,
     #s是行的意思,%是所有行,,
     #g的作用是:如果一行中有多个old,则都替换成new,如果没有g,则只替换一行中的第一个old

<2> 替换随便的某一行的内容      
     :.s/from/to/g   #在当前行进行替换操作,.是当前行的意思,就像./当前目录一样
     :33s/from/to/g  #在第33行进行替换操作,33行
     :$s/from/to/g   #在最后一行进行替换操作,$是最后一行

64/bashrc profile 和 .bashrc .bash_profile 的区别

 <1>/etc/bashrc 和 /etc/profile,是系统全局环境变量设定,
    只有root用户,或者具有root权限的普通用户才可以操作

 <2>.bashrc和.bash_profile,这2个文件在每一个普通用户的家目录下都有,
    这是每个普通用户的私有环境变量设定,每个用户的家目录下又会有,
    root的家目录下有,/home/centos这样任何一个普通用户的家目录下也有

 <3>修改/root/.bashrc 和 /root/.bash_profile文件,只会影响root自己

 <4>修改~/.bashrc 和 ~/.bash_profile文件,也只会影响各自的普通用户

 <5>修改/etc/bashrc和/etc/bash_profile文件,则会影响所有的用户
      

65/shell脚本(.sh脚本文件)对空格有严格的规定,

 <1>赋值语句等号两边不能有空格,而字符串之间的比较,等号两边必须有空格
    例如 username="houzhen"  
        password="123456"

 <2>在给变量赋值的时候,字符串两边加引号,数字不需要加引号
    例如:username="root"
         port=3306
       
 <3>在调用变量的时候,需要用$开头,并且需要在最外面再加双引号。
   

66/在命令行显示全部路径

在 .bash_profile文件
   export PS1='[\u@\h \w]\$ '
  \u显示当前用户名
  \h显示当前主机名
  \W只显示当前路径的最后一个目录
  \w显示当前绝对路径,当前用户家目录会用~代替
  \$显示普通用户的命令行
   
   

67/source命令的使用

 使得被修改的文件立即生效,
 但是并不是所有的文件都能使用source命令。
 
 .vimrc文件是不能使用source命令的,及不能source .vimrc
 source命令是对bash的相关设置用的,比如.bash_profile文件和.bashrc文件,
 source命令对.vimrc文件不会起作用,.vimrc文件不需要source,因为.vimrc文件一旦修改然后保存后,就会立即生效。

68/linux查看所有服务的状态

service --status-all
注意:-all要紧跟在–status后面,中间不要有空格

image.png

那么,服务名称前面的加减号 [+] [-] 是什么意思呢?
[+] 代表服务是在启动运行的状态
[-] 代表服务是在关闭停止的状态

我们来做个验证,以apache2服务为例。
现在的 apache2 是 [+] 的状态,即正在启动运行中,我们来停止这个服务
service apache2 stop

我们再次查看所有服务的运行状态发现,发现apache2 的状态变为 [-]

image.png

.vimrc文件中的注释是 "xxxxx

.bash_profile文件中的注释是 #xxx

mv命令

mv aaa(文件) bbb(文件) 
# 将源文件名 aaa 改为目标文件名 bbb

mv aaa(文件) bbb(目录)  
# 将文件aaa移动到目标目录bbb中,文件名字不变,还是aaa

mv aaa(目录) bbb(目录)
# 如果目录bbb已存在,则将aaa目录移动到目录名bbb下;
# 如果目录名bbb不存在,则默认是把aaa改名为bbb

mv source_directory(目录) dest_file(文件)
# 这样写出错

环境变量

在使用变量的时候,前面加$,不需要加{}
环境变量之间用:连接

例如:
export HIVE_HOME=/usr/local/hive1.8.0
export PATH=$PATH:$HIVE_HOME/bin

export JAVA_HOME=/usr/local/jdk1.8.0
export PATH=$PATH:$JAVA_HOME/bin

或者: export PATH=$JAVA_HOME:$PATH

指定python版本

在linux系统中,有自带的python2.x版本,一般是python2.7版本。
但是在一般的开发过程中,开发人员一般会使用python3.x的版本,
所有会在linux系统中再安装python3.x的版本,比如python3.7版本。

在这种情况下,如果每次执行.py文件都需要指明python2或者python3的绝对路径,这样会特别的麻烦。
所以可以在.bashrc文件中指明

vim .bashrc 
alias python=/usr/local/anaconda3/bin/python3.7
#或者 alias python='/usr/local/anaconda3/bin/python3.7' 加引号或者不加引号都可以
source .bashrc 

最后 python --version 检查下python的版本

which

which python 
这里which 语句是告诉你这里的python是哪个python
比如是linux系统自带的python2,或者是你后来自己安装的python3

whereis

whereis python
该命令会把系统内所有的python都列举出来

linux中各个配置文件的作用

/etc/profile:
  此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
  /etc/profile中设定的变量(全局)的可以作用于任何用户

/etc/bashrc:
为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。

~/.bash_profile:
系统中的每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。
默认情况下,设置一些环境变量,执行用户的.bashrc文件。
/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。

~/.bashrc:
该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。


~/.bash_logout:
当每次退出系统(退出bash shell)时,执行该文件. 

xxx

刚登陆linux的时候,先启动系统的/etc/profile文件,然后启动用户目录下的.bash_profile文件,.bash_login文件,.profile文件中的一个。
执行的顺序是:.bash_profile  .bash_login  .profile

如果有.bash_profile文件,一般还会执行.bashrc文件。
因为在.bash_profile文件中,一般会有下面的代码:
 if [ -f ~/.bashrc ] ; then
       source .bashrc
 fi 


 在退出shell时,还会执行 `~/.bash_logout`文件。

 总结一下,以上这些配置文件的执行顺序为:
 `/etc/profile`→ `(~/.bash_profile | ~/.bash_login | ~/.profile)`→`~/.bashrc` →`/etc/bashrc` → `~/.bash_logout`

zsh和bash的区别

<1>bash和zsh环境变量文件
    1、bash 的环境变量是.bash_profile文件
    2、zsh 的环境变量是.zshrc文件
    
<2>bash和zsh切换
    zsh 切换到 bash
       $ chsh -s /bin/bash
       
    bash 切换到 zsh(系统自带的zsh)
       $ chsh -s /bin/zsh
       
    # 第三方安装的zsh 比如从brew安装
    $ sudo chsh -s /usr/local/bin/zsh

<3>设置别名
    1、zsh 设置alias
    ```
    $ vim ~/.zshrc  #打开别名配置文件
    $ alias var=“cd /usr/local/var”  #添加别名
    $ source ~/.zshrc  #设置别名生效
    ```

    2、bash 设置alias

    ```
    $ vim ~/.bashrc
    $ alias var=“cd /usr/local/var”  #添加别名
    $ source ~/.bashrc  #设置别名生效
    ```
    
    

linux 进程的几种状态

R:(Running 或 Runnable)表示进程处在CPU的就绪队列中,运行态或者就绪态的进程.
     及正在运行,或者可以运行(就绪状态)
D:(Disk Sleep)不可中断状态睡眠,一般表示进程正在跟硬件发送交互,并且交互过程中不允许被其他进程或中断打断
Z:(Zombie)僵尸进程,表示进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符,PID等)
S:可中断状态睡眠,表示进程因等待某个事件而被系统挂起(阻塞态)。当进程等待的事件发生时,就会被唤醒并进入R状态
I:(Idle),空闲状态。用在不可中断睡眠的内核线程上。硬件交互导致的不可中断进程用D表示,但对某些内核线程来说,处在不可中断睡眠时有可能实际上并没有任何负载。

T或t:(Stopped 或 Traced)表示进程处于暂停或者跟踪状态
    向一个进程发送SIGSTOP信号,它就会因响应这个号变成暂停状态(Stopped) ;向它
    发送SIGCONT信号,进程又会恢复运行(如果进程是终端里直接启动的,则需要你用fg命
    令,恢复到前台运行)
    当你用调试器(如gdb)调试一个进程时, 在使用断点中断进程后,进程就会变成跟踪状
    态,这其实也是一种特殊的暂停状态,只不过你可以用调试器来跟踪并按需要控制进程的运行

X:进程已经消亡

查看内存的使用情况

free
free -m  
free -g 
free -h

cpu在计算的时候,所用的数据都是从内存中获取的 ,如果内存中没有,再从磁盘(硬盘)中读取。
直接从内存中读取数据速度会很快,所以说基于内存计算速度很快。
内存的大小相比于磁盘小的多,所以说内存比较贵。

查看磁盘(硬盘)的使用情况

 有2种方法
  df -h  :df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。例如,我们使用`df -h`命令来查看磁盘信息, -h 选项为根据大小适当显示:
            df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

图片.png

显示内容参数说明:
-   Filesystem:文件系统
-   Size: 分区总的大小
-   Used: 已使用容量
-   Avail: 还可以使用的容量
-   Use%: 已用百分比
-   Mounted on: 挂载点

使用du命令:du 的英文原义为 disk usage,含义为显示磁盘空间的使用情况,用于查看当前目录的总大小。

wc 命令

wc命令可以用来统计文件中行数,子数,字节数。

wc -l(或者是--lines) filename 就是查看文件里有多少行。
wc -w(或者是--words) filename 看文件里有多少个word。
wc -c(或者是--chars,或者--bytes) filename  查看文件的字节数
wc -L filename 文件里最长的那一行是多少个字。

如果只写 wc filename,则依次显示文件的行数,字数,字节数。
比如:
wc testfile 
结果是: 92 598 testfile   # testfile文件的行数为3、单词数92、字节数598 

如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:
wc testfile testfile_1 testfile_2   #统计三个文件的信息 
输出结果如下:
    $ wc testfile testfile_1 testfile_2  #统计三个文件的信息  
    3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
    9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
    3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
    15 116 708 总用量                     #三个文件总共的行数为15、单词数116、字节数708 

查看文件的大小

du -h 文件名