Linux下可不可以替换运行中的程序

Linux下可不可以替换运行中的程序,第1张

我之前写过一个自动更新程序,一般情况分析的话,二进制文件导入内存在内存中运行,表面上删除这个文件替换一个新的文件没有问题,但是实际情况是你程序运行起来之后,文件会被 *** 作系统锁定,所以解决办法是在更新的时候干掉自己,然后启动一个守护进程,待文件替换之后再重新启动自己。其实这也是 *** 作系统自身的一个保护,万一文件没有全部导入,运行一半又继续读磁盘文件,你又正好换了文件怎么办呢???

GNOME、KDE、XFCE 叫做 DE 全称是 Desktop Environment,也就是桌面环境。也就是一个整体的环境,包括应用程序、窗口管理器登录管理器,桌面程序,设置界面等等等等。

unity 是一个桌面的界面。提供你看见的那些东西,但窗口的装饰和一些功能控制的相关东西,他不提供,需要 compiz 来提供。

你要知道 Linux是一大堆程序组成的,桌面环境也是如此,其实你看到的 GNOME 的工具条,KDE 的 K 菜单面板,其实都是程序,你的桌面也一样,是一个程序运行提供一个全屏幕的处在最底层的显示,窗口和桌面上的各种面板控件都在他的上一层显示。

窗口管理器,是提供管理窗口显示隐藏,前后和大小的后台程序,这个才是和 X-server 真正进行交互控制的服务器端程序(Xorg 是服务器端程序,Linux 的图形界面是 C/S 结构)。所以 compiz 这个东西可以实现窗口的特效。因为是由他告诉 X ,窗口大小,层次关系和形状的,同时他也告诉被他管理的程序,他们的窗口大小,是否焦点,是否显示隐藏等等的信息。metacity 并不会自己重新绘制窗口外观,只是忠实的体现窗口本身的样子。compiz 会根据特效的设置,自己重新绘制窗口所在位置的图像,告诉 Xorg 服务更多的绘制内容,实现诸如变形,半透明,窗口阴影等等的特效。

你要是想研究桌面,最好去看看 LXDE ,这个东西是极简化的桌面环境,组成很简单。

在我的理解上一般说来,可以工作的图形桌面,至少有一个会话程序,一个窗口管理器,一个面板,一个桌面程序。

会话程序就是保证 X 的正常运行(Xinit 运行他,他就会一直保持运行,直到你选择注销、重启、关机等等),提供启动另外三个或者更多个程序的运行,作为他们的主进程。

窗口管理器就是管理所有平面上显示的东西,没有他就没有办法管理程序哪个是当前 *** 作的窗口,哪个窗口在前,哪个在后,窗口大小,是否隐藏,是否关闭退出。面板就是你看到的哪个显示任务,开始菜单的东西,没他你就没办法运行程序,提供用户交互。桌面程序就是背景显示,桌面图标的相关功能。

当然这 4 个东西不一定都要有,但是就像我前面说的,没有的话,那么对应的功能就无法提供了。这些程序也可以整合,不一定非要分成4个,但这 4 部分的功能却是必须要保证的,你可以用各种其他的方式实现。

你可以认为 unity 其实就是这四部分中的面板功能。而不提供窗口管理器的功能,所以需要compiz或者metacity。

Linux命令分为内部命令(shell自带的命令)和外部命令(不是shell自带的命令,由用户安装),怎么鉴别是内部命令和外部命令呢?可以通过type命令来鉴别

什么是shell呢?shell是一个程序,常用的有bash shell,平时我们通过用户名和密码登录到linux,其实就是登录到bash shell程序,通过bash shell来 *** 作linux内核

命令执行流程

那岂不是说使用外部命令效率会很慢吗?

其实一点都不慢,它会去PATH环境变量设置的一堆目录中查找

cd is a shell builtin 表示内部命令

ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令

cd命令切换文件夹

现在我们cd /usr/sbin

通过cat命令查看文件内容

通过cat ifconfig来查看ifconfig,发现是乱码文件

file命令查看文件类型

输入file ifconfig

从输出信息可以看出它是一个二进制可执行文件

whereis命令查看文件位置

find / -name jdk

echo命令用户打印信息,相当于java中的systemoutprintln

可以使用回车查看下一行、空格查看下一页、q退出

一般使用man查看外部命令,help查看内部命令

查看linux下的应用和应用的进程号

当我们在这个窗口中输入kill -9 1593的话,另外一个正在编辑文件的进程就会退出

在前面我们已经讲过,bash shell程序在执行命令的一个过程及原理,对于外部命令,它会去PATH这个环境变量中查找执行命令所在的路径,当然在去PATH中寻找之前会先去hash表中查找这个命令有没有执行过,执行过的话会记录在hash表中,则此次查找只需从hash表中就可以很方便的找到

查看分区信息 -h 表示文件大小后面会显示文件大小

查看文件的使用情况

使用man ls 查看ls命令的相关介绍

-a:可以查看隐藏文件

-l:以长列表的形式展示文件列表信息

第一位 -:表示文件,d表示文件夹,b表示块设备文件,c表示字符设备文件,p表示命令管道文件,s表示套接字文件, 从第二位开始往后数九位表示属主权限(每三位一组 rwx:读、写、执行),第11位表示的点表示分隔符,点后面的数字表示文件有几个硬连接,第一个root代表属主名,第二个root代表这个第一个root所在的组织,接下来的5表示文件大小,5后面的日期表示文件最后一次修改的时间, 1txt代表的文件或文件夹的名称

小结:

切换文件目录

cd 文件路径

cd:切换到家目录

cd ~:回到家目录(也就是家目录)

cd :回到上一级目录

创建目录

mkdir 目录名

mkdir -p 目录名,级联创建目录

cp 被拷贝的文件(可以是路径加文件名) 拷贝到哪个位置

复制目录使用

cp -r 被拷贝的目录 目标位置

移动命令

mv 被移动的文件 目标位置+目标文件名

rm 文件名(此中方式的删除需要再输入 yes)

rm -f 文件名,无提示直接删除

rm -rf 文件夹

ln命令默认创建的是硬连接

ln profile a:将a硬连接到profile文件上,他们底层共用一个文件,删除他们之中任何一个

对另外一个没有影响,同时你也可以使用 ll -i命令查看文件编号

ln -s profile a:将a软连接到profile文件,当你访问a的时候会去访问profile,profile再访问底层文件,当将profile删除了之后a就无法访问了

一致时间、创建新文本

touch 已存在的文件:会将文件的访问时间、更新时间、改变时间(即上面stat中介绍的三个时间)变成一致

touch 不存在的文件:会创建一个新的文本

cat命令查看文件内容

cat 1txt:查看单个文件内容

cat 1txt 2txt:查看多个文件

more 1txt:以分页的形式查看文件内容,按空格:下一页,回车:下一行(注意它不能回看,回看的话只能用鼠标回轮)

less 1txt:使用空格下一页, b看上一页, 回车看下一行

注意less的话会把整个文件内容加载到内存,如果文件比较大的话,建议使用more命令查看

head命令默认查看文件前10行内容, head 1txt

head -5 1txt:查看文件前5行的内容

tail命令默认查看文件后10行的内容 tail 1txt

tail -5 1txt:查看文件后5行内容

tail -f 1txt:实时查看文件增量内容

cat btxt | head -3:管道左边的命令会以输出流的形式交给管道右边的命令,管道右边以输入流的形式接收并且拼到命令的右边

注意:ls -l 不能接受前面的输出流,这个怎么办呢?可以通过xargs命令

vi文本编辑器末行模式的 *** 作

set nu(number的缩写): 设置行号

set nonu(nonumber的缩写):取消行号

set readonly:设置为只读

n:往下查找

N:往上查找

n:往上查找

N:往下查找

一般我们会在/etc/profile文件中设置一些环境变量,但是在设置的时候可能没有记住目录,这时候我们可以使用如下方式

效果

格式 :s/str1/str2/gi

/ : 临近s命令的第一个字符边界字符,也可以是 @或#

g : 一行内全部替换

i : 忽略大小写

范围

n:行号

:当前光标行

+n :偏移n行

-3

%:全文

全部删除 1,$d

删除前三行

删除倒数第2行

光标挪到最后一行 按下小写的p

效果图

正则表达式是对字符串 *** 作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特定字符的组合组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

\ :转义字符

:匹配任意单个字符

[1249a] :匹配中括号中任意字符

[^12] :匹配中括号中任意非1和2的字符

[a-k] :匹配中括号中任意a~k中的一个字符

^ :行首

$ :行尾

<abc> :单词首尾边界(匹配单词abc)

| :连接 *** 作符

(,) : 选择 *** 作符

\n :反向引用

:匹配0到1次

在Linux中通过grep命令使用正则表达式来匹配信息

f :选择显示的列

s :不显示没有分隔符的行

d :自定义分隔符

n :按数值排序

r :倒序

t :自定义分隔符

K :选择排序列

u :合并相同行

f :忽略大小写

sed:行编辑器,以行为单位进行处理,可以将数据进行替换、删除、新增、选取等特定工作

sed [options] 'Command' file

-n :静默模式,不再默认显示模式空间(内存)中的内容

-i :直接修改原文件

-e SCRIPT :可以同时执行多个脚本

-f /PATH/TO/SED_SCRIPT

-r :表示使用扩展正则表达式

d :删除符合条件的行

p :显示符号条件的行

a \string :在指定的行后面追加新行,内容为string

\n :可以用于换行

i \string :在指定的行前面添加新行,内容为string

c :取代,c的后面可以接字符串

s /pattern/string/修饰符:查找并替换。默认只替换每行中第一次被模式匹配到的字符串

g :行内全局替换

i :忽略字符大小写

s///:s###,s@@@

(),\1,\2

sed "2p" ctxt

但是在执行下面的 *** 作的时候文本中的内容都显示出来了,它的原理是,打印匹配的行,以及文本中所有的内容

注意:它删的是内存中的数据,而不是目标文件

sed -i "3d" ctxt

它的原理是先把内存中的第3行数据删除,然后再把内存中的数据写回原文件,这时原文件中的第三行就没有了

使用变量的形式

awk是一个强大的文本分析工具。

相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F '{pattern + action}' {filenames}

支持自定义分隔符,默认是以空格分隔的

支持正则表达式匹配

支持自定义变量,数组 a[1] a[tom] map(key)

支持内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

支持函数

print、split、substr、sub、gsub

支持流程控制语句

if、while、do/while、for、break、continue

练习题

passwd文件内容解读:

passwd文件中每行由7个字段组成,字段与字段之间由:分隔,第一个字段代表用户名,第二个字段表示用户对应的加密后的密码,第三个字段表示userId,第四个字段表示groupId,第五个字段表示对用户的描述,第六个字段表示用户的家目录,第七个字段表示的是这个用户默认使用的shell

其中$0表示整行

统计报表:合计每人1月工资, 0:manager,1:worker

将awk后面的内容封装到一个文件中(封装的脚本要遵循一定的格式)

qqq文件的内容格式

可以用sudo命令,它的作用是“excute

a

command

as

another

user",默认为root用户,可以用

-u

指定用户名(假设要以user身份执行prog程序):

sudo

-u

user

prog

就可以了。

另一个命令su,是用另一个身份运行shell,再用新的shell运行指定程序(su只能运行shell程序,虽然可以把命令写成类似sudo的样子[su

-c

user

prog],但它的实现原理实际上还是先运行一个shell,再通过shell运行其他程序)。

切换用户当前目录可以有两种理解:

一、切换目录,供程序其它部分使用。

比如有文件存储在A目录中,打开时希望可以直接用fopen文件名即可,而不加上文件所在目录名,那么可以调用chdir实现。

1、函数声明:

int chdir(const char path);

2、头文件:

stdlibh

3、使用方法:

chdir(path_name);

传入字符串即要切换的目录名, 如chdir("my_folder");

4、返回值:

成功返回0 ,失败返回-1。

二、要切换调用C可执行程序后的目录。即原本在A目录,调用程序退出后切换到B目录。

这一点无法做到,程序中做的所有更改目录 *** 作,均不会影响到程序退出后所在目录。 这是由系统本身决定的,超出C程序所能实现的范围。

1、点击电脑左下角,点击左下角上的设置。

2、然后我们点击会话启动,点击应用程序自启动。

3、点击这个添加,然后点击箭头上的位置。

4、点击文件系统,点击usr,然后点击这个share目录。

5、点击这个应用程序文件夹,点击要设置为自启动的软件。

6、然后在这个框输入一个名字点击确定即可,那么软件就设置为了自启动了的。

以上就是关于Linux下可不可以替换运行中的程序全部的内容,包括:Linux下可不可以替换运行中的程序、如何在Linux系统轻松切换X窗口管理器、Linux相关使用介绍等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9470200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存