Linux常见知识点
安装软件放在了根目录下的software下面
命令相关
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、各文件夹功能
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上用户名
注意:挂载命令中 密码有特殊字符的话,要用引号包起来
界面
在Ubuntu 18.04终端使用w3m浏览器,命令行模式浏览网页
学习书籍
《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