Linux常见知识点

个人使用建议采用Ubuntu,云服务器则采用CentOS

安装软件放在了根目录下的software下面

阿里云服务器(Ubuntu16.04 64位)远程连接

命令相关

对 Linux 新手非常有用的 20 个命令

ls -la 目录

lsblk -l 列出块设备(了解新插入的USB设备的名字,特别是当你在终端上处理磁盘/块设备时)

uname -a

history   注意:按住“CTRL + R”就可以搜索已经执行过的命令,它可以在你写命令时自动补全。

查看Ubuntu系统位数和版本号

uname –a

"uname"命令就是Unix Name的简写。显示机器名,操作系统和内核的详细信息。

 

有出现64的信息,则是64位

lsb_release –a    查看版本信息

显示发行版本信息。

LSB是Linux Standard Base的缩写, lsb_release命令 用来显示LSB和特定版本的相关信息。如果使用该命令时不带参数,则默认加上-v参数。

 

cat /proc/version

 

目录/文件相关

1、linux中~和/的区别

~ 是当前用户的目录地址

/   是根目录的地址(一般称呼为root,/ 和 /root/ 是有区别的)

/   也指目录分隔符

”/“是根目录,”~“是家目录。Linux存储是以挂载的方式,相当于是树状的,源头就是”/“,也就是根目录。而每个用户都有”家“目录,也就是用户的个人目录。

比如root用户的”家“目录就是/root,普通用户a的家目录就是/home/a,普通用户b的家目录就是/home/b

注:每个用户下都有以下这些目录,但是需要此用户在物理机上登录过。。

1、当用户是root用户时

~  代表/root/,即根目录下的root目录

/    代表/ ,即根目录

2、当用户是jack用户时

~  代表/home/jack,即根目录下的home目录下的jack目录

/    代表/ ,即根目录

2、各文件夹功能

Ubuntu根目录下各文件夹的功能详细介绍

3、shell脚本判断文件和文件夹是否存在

shell判断文件,目录是否存在或者具有权限

#!/bin/sh

myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"

#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi


#这里的-d 参数判断$myPath是否存在 ,! -d 表示不存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi

#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi

#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi

#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi

如何判断某个设备文件是否存在?

注意:d 代表目录,c代表 设备文件。将参数d改为c即可。

安装软件/模块

安装:Sudo apt-get install xx

卸载:sudo apt-get --purge remove 包名 (--purge是可选项,写上这个属性是将软件及其配置文件一并删除,如不需要删除配置文件,可执行sudo apt-get remove 包名

eg:安装 Nginx

sudo apt-get install nginx

http://localhost/ 就可以看到了

1.查看安装的所有软件

dpkg -l      

查看具体某个软件,例如:dpkg -l  grep ftp

【注:dpkg 是“Debian Packager ”的简写。为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自“Debian”的“Linux ”发行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等。】

2.查看软件安装的路径

dpkg -L | grep ftp

也可以用 whereis ftp

3.查看软件版本

aptitude show

例如:aptitude  show ftp

查看linux下是否有安装某个包

1. 区分 rpm -qi -qf  -ql  -qa四个不同选项组合的作用?

rpm -qi 包名 查看一个包的详细信息

rpm -qf 文件名 查看一个文件是由哪个包安装的

rpm -ql 包名 查看一个包安装了哪些文件

rpm -qa 查看系统中安装了哪些包

2. rpm -qi 后面如果跟一个未安装的包名,会显示什么信息?

答:包名 is not installed

Vim的使用

1、跳到指定行

在vim中有3中方法可以跳转到指定行(首先按esc进入命令行模式):

1、ngg/nG (跳转到文件第n行,无需回车)

2、:n (跳转到文件第n行,需要回车)

3、vim +n filename (在打开文件后,跳转到文件的第n行)

4、输入大写的G ,直接跳到 末尾。

2、编辑文件,并保存,退出等

打开文件:Vi nginx.conf

保存,但不退出vi                          :w  

保存并退出vi                                 :wq  

退出vi,但不保存更改                   :q!  

用其他文件名保存                         :w filename  

在现有文件中保存并覆盖该文件    :w! filename

服务

service与systemctl

Linux 服务管理有两种方式:service和systemctl

1.service命令

service命令其实是去/etc/init.d目录下,去执行相关程序

# service命令启动redis脚本
service redis start

2.systemctl命令

systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。

systemd对应的进程管理命令是systemctl

1)systemctl命令兼容了service,即systemctl也会去/etc/init.d目录下,查看,执行相关程序

2)systemctl命令管理systemd的资源Unit

systemd的Unit放在目录/usr/lib/systemd/system(Centos)或/etc/systemd/system(Ubuntu)

主要是.service文件。.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节

[Unit]
Description:描述,
After:在network.target,auditd.service启动后才启动
ConditionPathExists: 执行条件

[Service]
EnvironmentFile:变量所在文件
ExecStart: 执行启动脚本
Restart: fail时重启

[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的

参考:详解Linux 服务管理两种方式service和systemctl

systemctl的使用

1、格式:systemctl   [command]   [服务]

相关的command

  • start:立即启动后面的服务
  • stop:立即关闭后面的服务
  • restart:立即重新启动后面的服务
  • reload:不关闭后面的服务情况下,重新加载服务的配置文件,让设置生效
  • enable:设置开机时,后面的服务自动启动
  • disable:设置开机时,后面的服务不自动启动
  • status:查看后面服务的状态(有没有执行、开机是否默认启动、登录信息等)
  • is-active:目前这个服务有没有正在运行中
  • is-enable:开机时有没有默认要启动这个服务
  • mask:强制注销后面的服务
  • unmask:将强制注销的任服务改回为原来的状态

————————————————
eg:启动一个asp.net core服务  systemctl start myFirstapp.service

参考:Linux(入门基础):103---systemctl命令管理单一服务(启动/关闭/状态)

2、查看指定的服务

格式:systemctl   [command]  [--type-TYPE]  [--all]

查看myFirstapp.service服务,则是

systemctl list-units --type=service --all | grep myFirstapp

参考:Linux(入门基础):104---systemctl命令查看系统服务

查看所有服务:systemctl list-unit-files

过滤查看启动项:systemctl list-unit-files | grep enable 

3、service启动报错的日志查看

eg:nginx服务

命令:cat /var/log/messages | grep nginx

查看linux是否安装ssh服务

1、登录 root 用户下,命令:ssh localhost 

如果提示 "ssh:connect to host localhost port 22:connection refused",就说明没有打开ssh服务或者未安装ssh服务.

(1)如果linux系统是 ubuntu linux 版本,执行命令:sudo apt-get install openssh-server 安装ssh服务,在提示时都选择yes,然后会自动安装ssh服务.

(2)如果linux系统是 centos linux 版本,查看ssh是否安装,执行命令:rpm -qa | grep ssh 

 如果没有安装过ssh服务,则执行命令:yum install openssh-server 安装

2、安装完成后输入命令(root用户下)

 启动ssh服务命令:service sshd start 

 重启SSH服务:service sshd restart

 停止ssh服务命令:service sshd stop 

 查看ssh服务22端口是否启动命令:netstat -antp | grep sshd

 查看ssh服务进程命令:ps -ef|grep ssh

    设置ssh服务为开机启动命令:chkconfig sshd on 

 设置ssh服务禁止开机启动命令:chkconfig sshd off 

UOS怎么访问windows共享的文件夹

1、linux桌面建目录:public

2、先安装基础的软件包:sudo apt-get install smbclient cifs-utils -y

3、再运行此命令进行挂载:sudo mount.cifs -o user=admin,password='password' //192.168.0.2/public /home/xxx/Desktop/public

注意:

user=【这里接共享的用户名】,password=【这里接共享的用户密码】

xxx是linux上用户名

参考:UOS怎么访问windows共享的文件夹

注意:挂载命令中 密码有特殊字符的话,要用引号包起来

界面

在Ubuntu 18.04终端使用w3m浏览器,命令行模式浏览网页

学习书籍

Linux系统简介 C语言中文网

《linux就该这么学》    提取码:d4nu

常见问题

1、E: Unable to locate package xxx

Unable to locate packet就是无法找到包,因为在执行sudo apt-get install之前更换了软件源,但是却忘了update下了,于是执行下面的命令:

sudo apt-get update

等上面命令执行完后,再执行sudo apt-get install就可以了!

如果还是无法解决,使用升级命令: sudo apt-get upgrade

update 与 upgrade的区别 

update:

会从sources.list文件里读取软件源,并生成软件列表,保存到本地,软件列表里包含了软件基本信息以及下载地址。

upgrade:

根据软件列表对通过apt-get安装的软件进行更新,它会检查已安装的软件与软件列表里的软件版本是否一致,若较低则会进行更新。

2、Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another proce...

进程被锁住了。
第一种方法,我们只需要杀死之前的进程,释放系统锁就可以了:

ps -e|grep apt-get
显示

6965 ? 00:00:01 apt-get
然后执行

sudo kill 6965
第二种方法,强制解锁

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
但是试了几次却不管用,可行性未知
===========================================
重启 系统
sudo systemctl --force reboot
这个会重新启动系统,所以使用前先保存一下需要保存的文件,这个方法是可行的。

3、出现Swap file….already exists以下错误如何解决?

E325: ATTENTION

Found a swap file by the name".a.sh.swp"Swap file ".a.sh.swp" already exists!

[O]pen Read-Only, (E)dit anyway,(R)ecover, (D)elete it, (Q)uit, (A)bort:

解决方法:只需命令行将其删除即可,命令:rm -rf .a.sh.swp

4、bash: ./build: /usr/bin/sh^M: 坏的解释器: 没有那个文件或目录

有时候编写脚本时会出现类似标题列出的错误,这个问题大多数是因为脚本文件在windows下编辑过。

在windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r,用cat -A urfile时你可以看到这个\r字符被显示为^M,这时候只需要删除这个字符就可以了。

可以使用命令sed -i 's/\r$//'  filename

也可以安装一个工具:dos2unix

说明:将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n。

yum install -y dos2unix

执行转换:dos2unix filename

 

另:Linux执行.sh文件,提示No such file or directory

在window平台下,写好shell脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,

却提示No such file or directory。ls 了下,确实有该文件,
难道是文件格式兼容性问题?用vim打开该sh文件,输入:
:set ff  
回车,显示fileformat=dos,重新设置下文件格式:
:set ff=unix  
保存退出:
[plain]
:wq  
再执行,竟然可以了。这个事情又给我提了次醒,程序尽量在linux下编写,迁移时,也许会少很多问题。

参考:Linux执行.sh文件,提示No such file or directory的问题的解决方法

5、make: *** /lib/modules/3.10.0-693.el7.x86_64/build: No such file or directory.  Stop.

原因:/lib/modules/3.10.0-1127.el7.x86_64/build没有指向正确的kernel source  或者没有内核开发包,

下载安装即可:yum install kernel-devel-$(uname -r)

继续make,报错:

原因,gcc没有安装,安装即可

5.1 安装驱动报错:could not load module swcsm18.ko: No such file or directory

解决方案:

查看系统内核:uname -a

Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

编译内核模块:

ls -l /lib/modules/3.10.0-1160.el7.x86_64/build

结果:/lib/modules/3.10.0-1160.el7.x86_64/build -> /usr/src/kernels/3.10.0-1160.el7.x86_64

若右边的目录是红色并闪烁,则是有问题:看下是否没有内核开发包

参考:make: *** /lib/modules/3.10.0-693.el7.x86_64/build: 没有那个文件或目录

1、进入/usr/src/kernels/下看有没有相应的内核开发包,没有,就安装,若有跳过第一步

UNAME=$(uname -r)

yum install gcc kernel-devel-${UNAME%.*}

然后再ls –l 查看内核包是否安装上。

若没有,则执行yum install kernel-devel 

【若本机已经有一个内核了,你想安装的安不上的情况下,需要下载 xxx.rpm文件离线安装

官网下载 ,eg:kernel-devel-3.10.0-1127.el7.x86_64.rpm

然后拷贝到目录下,执行安装

/usr/src/kernels
yum install kernel-devel-3.10.0-1127.el7.x86_64.rpm

2、进入/lib/modules/3.10.0-693.el7.x86_64,创建软连接

ln -s /usr/src/kernels/3.10.0-693.el7.x86_64/ /lib/modules/3.10.0-693.el7.x86_64/build

3、我创建的时候,创建失败,提示 :“ln: 创建符号链接 “build”: 文件已存在”

ls -l /lib/modules/3.10.0-693.el7.x86_64

此时只需要删除软连接,重新创建即可:

rm ./build

ln -s /usr/src/kernels/3.10.0-693.el7.x86_64/ build

4、成功后再次执行 ls -l /lib/modules/3.10.0-1160.el7.x86_64/build ,看是否正常

6、打开了一个只读的文件,shell returned 127

在打开的vi中使用 q!  退出

7、apt-get update时报错:Type 'Focal' is not known on line 66 in source list /etc/apt/sources.list

查看文件 /etc/apt/sources.list 的66行,很可能此行是注释,添加 #  将此行注释即可。

8、systemctl服务部署错误:code=exited, status=217/USER

在执行xx.service服务的时候报错

可能是因为 xx.service文件  里的User和Group错了,没有这个用户和组,全部改成root就好了。

9、切换普通用户后,命令提示符不正常,只显示$

可以查看当前的shell:

# echo $SHELL

修改shell为/bin/bash:(切换到root用户执行)

执行以下命令:

usermod -s /bin/bash huy

 

posted @ 2019-07-27 15:45  peterYong  阅读(758)  评论(0编辑  收藏  举报