mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-03-21 02:10:11 +08:00
Merge remote-tracking branch 'LCTT/master'
This commit is contained in:
commit
e11c42dd7f
63
sources/news/20190909 Firefox 69 available in Fedora.md
Normal file
63
sources/news/20190909 Firefox 69 available in Fedora.md
Normal file
@ -0,0 +1,63 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Firefox 69 available in Fedora)
|
||||
[#]: via: (https://fedoramagazine.org/firefox-69-available-in-fedora/)
|
||||
[#]: author: (Paul W. Frields https://fedoramagazine.org/author/pfrields/)
|
||||
|
||||
Firefox 69 available in Fedora
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
When you install the Fedora Workstation, you’ll find the world-renowned Firefox browser included. The Mozilla Foundation underwrites work on Firefox, as well as other projects that promote an open, safe, and privacy respecting Internet. Firefox already features a fast browsing engine and numerous privacy features.
|
||||
|
||||
A community of developers continues to improve and enhance Firefox. The latest version, Firefox 69, was released recently and you can get it for your stable Fedora system (30 and later). Read on for more details.
|
||||
|
||||
### New features in Firefox 69
|
||||
|
||||
The newest version of Firefox includes [Enhanced Tracking Protection][2] (or ETP). When you use Firefox 69 with a new (or reset) settings profile, the browser makes it harder for sites to track your information or misuse your computer resources.
|
||||
|
||||
For instance, less scrupulous websites use scripts that cause your system to do lots of intense calculations to produce cryptocurrency results, called _[cryptomining][3]_. Cryptomining happens without your knowledge or permission and is therefore a misuse of your system. The new standard setting in Firefox 69 prevents sites from this kind of abuse.
|
||||
|
||||
Firefox 69 has additional settings to prevent sites from identifying or fingerprinting your browser for later use. These improvements give you additional protection from having your activities tracked online.
|
||||
|
||||
Another common annoyance is videos that start in your browser without warning. Video playback also uses extra CPU power and you may not want this happening on your laptop without permission. Firefox already stops this from happening using the [Block Autoplay][4] feature. But Firefox 69 also lets you stop videos from playing even if they start without sound. This feature prevents unwanted sudden noise. It also solves more of the real problem — having your computer’s power used without permission.
|
||||
|
||||
There are numerous other new features in the new release. Read more about them in the [Firefox release notes][5].
|
||||
|
||||
### How to get the update
|
||||
|
||||
Firefox 69 is available in the stable Fedora 30 and pre-release Fedora 31 repositories, as well as Rawhide. The update is provided by Fedora’s maintainers of the Firefox package. The maintainers also ensured an update to Mozilla’s Network Security Services (the nss package). We appreciate the hard work of the Mozilla project and Firefox community in providing this new release.
|
||||
|
||||
If you’re using Fedora 30 or later, use the _Software_ tool on Fedora Workstation, or run the following command on any Fedora system:
|
||||
|
||||
```
|
||||
$ sudo dnf --refresh upgrade firefox
|
||||
```
|
||||
|
||||
If you’re on Fedora 29, [help test the update][6] for that release so it can become stable and easily available for all users.
|
||||
|
||||
Firefox may prompt you to upgrade your profile to use the new settings. To take advantage of new features, you should do this.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/firefox-69-available-in-fedora/
|
||||
|
||||
作者:[Paul W. Frields][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/pfrields/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2019/09/firefox-v69-816x345.jpg
|
||||
[2]: https://blog.mozilla.org/blog/2019/09/03/todays-firefox-blocks-third-party-tracking-cookies-and-cryptomining-by-default/
|
||||
[3]: https://www.webopedia.com/TERM/C/cryptocurrency-mining.html
|
||||
[4]: https://support.mozilla.org/kb/block-autoplay
|
||||
[5]: https://www.mozilla.org/en-US/firefox/69.0/releasenotes/
|
||||
[6]: https://bodhi.fedoraproject.org/updates/FEDORA-2019-89ae5bb576
|
@ -1,106 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Why I use Java)
|
||||
[#]: via: (https://opensource.com/article/19/9/why-i-use-java)
|
||||
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
|
||||
|
||||
Why I use Java
|
||||
======
|
||||
There are probably better languages than Java, depending on work
|
||||
requirements. But I haven't seen anything yet to pull me away.
|
||||
![Coffee beans][1]
|
||||
|
||||
I believe I started using Java in 1997, not long after [Java 1.1 saw the light of day][2]. Since that time, by and large, I've really enjoyed programming in Java; although I confess these days, I'm as likely to be found writing [Groovy][3] scripts as "serious code" in Java.
|
||||
|
||||
Coming from a background in [FORTRAN][4], [PL/1][5], [Pascal][6], and finally [C][7], I found a lot of things to like about Java. Java was my first significant hands-on experience with [object-oriented programming][8]. By then, I had been programming for about 20 years, and it's probably safe to say I had some ideas about what mattered and what didn't.
|
||||
|
||||
### Debugging as a key language feature
|
||||
|
||||
I really hated wasting time tracking down obscure bugs caused by my code carelessly iterating off the end of an array, especially back in the days of programming in FORTRAN on IBM mainframes. Another subtle problem that cropped up from time to time was calling a subroutine with a four-byte integer argument that was expecting two bytes; on small-endian architecture, this was often a benign bug, but on big-endian machines, the value of the top two bytes was usually, but not always, zero.
|
||||
|
||||
Debugging in that batch environment was pretty awkward, too—poring through core dumps or inserting print statements, which themselves could move bugs around or even make them disappear.
|
||||
|
||||
So my early experiences with Pascal, first on [MTS][9], then using the same MTS compiler on [IBM OS/VS1][10], made my life a lot easier. Pascal's [strong and static typing][11] were a big part of the win here, and every Pascal compiler I have used inserts run-time checks on array bounds and ranges, so bugs are detected at the point of occurrence. When we moved most of our work to a Unix system in the early 1980s, porting the Pascal code was a straightforward task.
|
||||
|
||||
### Finding the right amount of syntax
|
||||
|
||||
But for all the things I liked about Pascal, my code was wordy, and the syntax seemed to have a tendency to slightly obscure the code; for example, using:
|
||||
|
||||
|
||||
```
|
||||
`if … then begin … end else … end`
|
||||
```
|
||||
|
||||
instead of:
|
||||
|
||||
|
||||
```
|
||||
`if (…) { … } else { … }`
|
||||
```
|
||||
|
||||
in C and similar languages. Also, some things were quite hard to do in Pascal and much easier to do in C. But, as I began to use C more and more, I found myself running into the same kind of errors I used to commit in FORTRAN—running off the end of arrays, for example—that were not detected at the point of the original error, but only through their adverse effects later in the program's execution. Fortunately, I was no longer living in the batch environment and had great debugging tools at hand. Still, C gave me a little too much flexibility for my own good.
|
||||
|
||||
When I discovered [awk][12], I found I had a nice counterpoint to C. At that time, a lot of my work involved transforming field data and creating reports. I found I could do a surprising amount of that with awk, coupled with other Unix command-line tools like sort, sed, cut, join, paste, comm, and so on. Essentially, these tools gave me something a lot like a relational database manager for text files that had a column-oriented structure, which was the way a lot of our field data came in. Or, if not exactly in that format, most of the time the data could be unloaded from a relational database or from some kind of binary format into that column-oriented structure.
|
||||
|
||||
String handling, [regular expressions][13], and [associative arrays][14] supported by awk, as well as the basic nature of awk (it's really a data-transformation pipeline), fit my needs very well. When confronted with binary data files, complicated data structuring, and absolute performance needs, I would still revert to C; but as I used awk more and more, I found C's very basic string support more and more frustrating. As time went on, more and more often I would end up using C only when I had to—and probably overusing awk the rest of the time.
|
||||
|
||||
### Java is the right level of abstraction
|
||||
|
||||
And then along came Java. It looked pretty good right out of the gate—a relatively terse syntax reminiscent of C, or at least, more so than Pascal or any of those other earlier experiences. It was strongly typed, so a lot of programming errors would get caught at compile time. It didn't seem to require too much object-oriented learning to get going, which was a good thing, as I was barely familiar with [OOP design patterns][15] at the time. But even in the earliest days, I liked the ideas behind its simplified [inheritance model][16]. (Java allows for single inheritance with interfaces provided to enrich the paradigm somewhat.)
|
||||
|
||||
And it seemed to come with a rich library of functionality (the concept of "batteries included") that worked at the right level to directly meet my needs. Finally, I found myself rapidly coming to like the idea of both data and behavior being grouped together in objects. This seemed like a great way to explicitly control interactions among data—much better than enormous parameter lists or uncontrolled access to global variables.
|
||||
|
||||
Since then, Java has grown to be the Helvetic military knife in my programming toolbox. I will still write stuff occasionally in awk or use Linux command-line utilities like cut, sort, or sed when they're obviously and precisely the straightforward way to solve the problem at hand. I doubt if I've written 50 lines of C in the last 20 years, though; Java has completely replaced C for my needs.
|
||||
|
||||
In addition, Java has been improving over time. First of all, it's become much more performant. And it's added some really useful capabilities, like [try with resources][17], which very nicely cleans up verbose and somewhat messy code dealing with error handling during file I/O, for example; or [lambdas][18], which provide the ability to declare functions and pass them as parameters, instead of the old approach, which required creating classes or interfaces to "host" those functions; or [streams][19], which encapsulate iterative behavior in functions, creating an efficient data-transformation pipeline materialized in the form of chained function calls.
|
||||
|
||||
### Java is getting better and better
|
||||
|
||||
A number of language designers have looked at ways to radically improve the Java experience. For me, most of these aren't yet of great interest; again, that's more a reflection of my typical workflow and (much) less a function of the features those languages bring. But one of these evolutionary steps has become an indispensable part of my programming arsenal: [Groovy][20]. Groovy has become my go-to solution when I run into a small problem that needs a small solution. Moreover, it's highly compatible with Java. For me, Groovy fills the same niche that Python fills for a lot of other people—it's compact, DRY (don't repeat yourself), and expressive (lists and dictionaries have full language support). I also make use of [Grails][21], which uses Groovy to provide a streamlined web framework for very performant and useful Java web applications.
|
||||
|
||||
### But is Java still open source?
|
||||
|
||||
Recently, growing support for [OpenJDK][22] has further improved my comfort level with Java. A number of companies are supporting OpenJDK in various ways, including [AdoptOpenJDK, Amazon, and Red Hat][23]. In one of my bigger and longer-term projects, we use AdoptOpenJDK to [generate customized runtimes on several desktop platforms][24].
|
||||
|
||||
Are there better languages than Java? I'm sure there are, depending on your work needs. But I'm still a very happy Java user, and I haven't seen anything yet that threatens to pull me away.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/9/why-i-use-java
|
||||
|
||||
作者:[Chris Hermansen][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/clhermansen
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/java-coffee-beans.jpg?itok=3hkjX5We (Coffee beans)
|
||||
[2]: https://en.wikipedia.org/wiki/Java_version_history
|
||||
[3]: https://en.wikipedia.org/wiki/Apache_Groovy
|
||||
[4]: https://en.wikipedia.org/wiki/Fortran
|
||||
[5]: https://en.wikipedia.org/wiki/PL/I
|
||||
[6]: https://en.wikipedia.org/wiki/Pascal_(programming_language)
|
||||
[7]: https://en.wikipedia.org/wiki/C_(programming_language)
|
||||
[8]: https://en.wikipedia.org/wiki/Object-oriented_programming
|
||||
[9]: https://en.wikipedia.org/wiki/Michigan_Terminal_System
|
||||
[10]: https://en.wikipedia.org/wiki/OS/VS1
|
||||
[11]: https://stackoverflow.com/questions/11889602/difference-between-strong-vs-static-typing-and-weak-vs-dynamic-typing
|
||||
[12]: https://en.wikipedia.org/wiki/AWK
|
||||
[13]: https://en.wikipedia.org/wiki/Regular_expression
|
||||
[14]: https://en.wikipedia.org/wiki/Associative_array
|
||||
[15]: https://opensource.com/article/19/7/understanding-software-design-patterns
|
||||
[16]: https://www.w3schools.com/java/java_inheritance.asp
|
||||
[17]: https://www.baeldung.com/java-try-with-resources
|
||||
[18]: https://www.baeldung.com/java-8-lambda-expressions-tips
|
||||
[19]: https://www.tutorialspoint.com/java8/java8_streams
|
||||
[20]: https://groovy-lang.org/
|
||||
[21]: https://grails.org/
|
||||
[22]: https://openjdk.java.net/
|
||||
[23]: https://en.wikipedia.org/wiki/OpenJDK
|
||||
[24]: https://opensource.com/article/19/4/java-se-11-removing-jnlp
|
@ -1,94 +0,0 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to Install Shutter Screenshot Tool in Ubuntu 19.04)
|
||||
[#]: via: (https://itsfoss.com/install-shutter-ubuntu/)
|
||||
[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
|
||||
|
||||
How to Install Shutter Screenshot Tool in Ubuntu 19.04
|
||||
======
|
||||
|
||||
Shutter is my favorite tool for [taking screenshots in Linux][1]. You can take screenshots with it and you can also edit screenshots or other images with it. It’s a nifty tool for adding arrows and text on the images. You can also use it to [resize images in Ubuntu][2] or whichever Linux distribution you are using. Most of the screenshot tutorials on It’s FOSS have been edited on Shutter.
|
||||
|
||||
![][3]
|
||||
|
||||
Though [Shutter][4] has been a great tool so far, its development is stalled. There has been no new release of Shutter in several years. Even simple bugs like [editing mode being disabled in Shutter][5] hasn’t been fixed. There is no news from the developer at all.
|
||||
|
||||
Perhaps this is the reason why newer release of Ubuntu have dropped it. Until Ubuntu 18.04 LTS, you could install it from the software or [using apt-get command][6] by [enabling the universe repository][7]. But from Ubuntu 18.10 and later releases, you cannot do it anymore.
|
||||
|
||||
All the shortcomings aside, Shutter is till a great tool and I want to continue using it. Perhaps you too are a Shutter fan like me and want to use it. The good things is that you can still install Shutter in Ubuntu 19.04 thanks to an unofficial PPA.
|
||||
|
||||
### Installing Shutter on Ubuntu 19.04
|
||||
|
||||
![Install Shutter Ubuntu][8]
|
||||
|
||||
I hope you are familiar with concept of PPA. If not, I highly recommend reading my detailed guide to know more about [what is PPA and how to use it][9].
|
||||
|
||||
Now, open a terminal and use the following command to add the new repository:
|
||||
|
||||
```
|
||||
sudo add-apt-repository -y ppa:linuxuprising/shutter
|
||||
```
|
||||
|
||||
No need to use apt update anymore because starting Ubuntu 18.04, the repositories are automatically updated after adding a new entry.
|
||||
|
||||
Now use the apt command to install Shutter:
|
||||
|
||||
```
|
||||
sudo apt install shutter
|
||||
```
|
||||
|
||||
That’s it. You should have Shutter screenshot tool installed. You can search for it in the menu and start from there.
|
||||
|
||||
[][10]
|
||||
|
||||
Suggested read Managing Linux Kernel Upgrades In Debian
|
||||
|
||||
### Removing Shutter installed via the unofficial PPA
|
||||
|
||||
I’ll complete this tutorial by adding the steps to uninstall Shutter and remove the repository you added.
|
||||
|
||||
First, remove Shutter from your system:
|
||||
|
||||
```
|
||||
sudo apt remove shutter
|
||||
```
|
||||
|
||||
Next, remove the PPA from your list of repositories:
|
||||
|
||||
```
|
||||
sudo add-apt-repository --remove ppa:linuxuprising/shutter
|
||||
```
|
||||
|
||||
You may also want to take a look at [Y PPA Manager][11], a tool for managing PPA graphically.
|
||||
|
||||
Shutter
|
||||
|
||||
Shutter is an excellent tool and I would prefer that it is actively developed. I hope that its developer is alright and he/she can find some time to work on it. Or perhaps it’s time for someone else to fork it and continue to make it more awesome.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-shutter-ubuntu/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/take-screenshot-linux/
|
||||
[2]: https://itsfoss.com/resize-images-with-right-click/
|
||||
[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2018/08/shutter-screenshot.jpg?ssl=1
|
||||
[4]: http://shutter-project.org/
|
||||
[5]: https://itsfoss.com/shutter-edit-button-disabled/
|
||||
[6]: https://itsfoss.com/apt-get-linux-guide/
|
||||
[7]: https://itsfoss.com/ubuntu-repositories/
|
||||
[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/09/Install-Shutter-ubuntu.jpg?resize=800%2C450&ssl=1
|
||||
[9]: https://itsfoss.com/ppa-guide/
|
||||
[10]: https://itsfoss.com/kernel-upgrade-debian/
|
||||
[11]: https://itsfoss.com/y-ppa-manager/
|
181
sources/tech/20190911 How to set up a TFTP server on Fedora.md
Normal file
181
sources/tech/20190911 How to set up a TFTP server on Fedora.md
Normal file
@ -0,0 +1,181 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (amwps290 )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to set up a TFTP server on Fedora)
|
||||
[#]: via: (https://fedoramagazine.org/how-to-set-up-a-tftp-server-on-fedora/)
|
||||
[#]: author: (Curt Warfield https://fedoramagazine.org/author/rcurtiswarfield/)
|
||||
|
||||
How to set up a TFTP server on Fedora
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
**TFTP**, or Trivial File Transfer Protocol, allows users to transfer files between systems using the [UDP protocol][2]. By default, it uses UDP port 69. The TFTP protocol is extensively used to support remote booting of diskless devices. So, setting up a TFTP server on your own local network can be an interesting way to do [Fedora installations][3], or other diskless operations.
|
||||
|
||||
TFTP can only read and write files to or from a remote system. It doesn’t have the capability to list files or make any changes on the remote server. There are also no provisions for user authentication. Because of security implications and the lack of advanced features, TFTP is generally only used on a local area network (LAN).
|
||||
|
||||
### TFTP server installation
|
||||
|
||||
The first thing you will need to do is install the TFTP client and server packages:
|
||||
|
||||
```
|
||||
dnf install tftp-server tftp -y
|
||||
```
|
||||
|
||||
This creates a _tftp_ service and socket file for [systemd][4] under _/usr/lib/systemd/system_.
|
||||
|
||||
```
|
||||
/usr/lib/systemd/system/tftp.service
|
||||
/usr/lib/systemd/system/tftp.socket
|
||||
```
|
||||
|
||||
Next, copy and rename these files to _/etc/systemd/system_:
|
||||
|
||||
```
|
||||
cp /usr/lib/systemd/system/tftp.service /etc/systemd/system/tftp-server.service
|
||||
|
||||
cp /usr/lib/systemd/system/tftp.socket /etc/systemd/system/tftp-server.socket
|
||||
```
|
||||
|
||||
### Making local changes
|
||||
|
||||
You need to edit these files from the new location after you’ve copied and renamed them, to add some additional parameters. Here is what the _tftp-server.service_ file initially looks like:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Tftp Server
|
||||
Requires=tftp.socket
|
||||
Documentation=man:in.tftpd
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
|
||||
StandardInput=socket
|
||||
|
||||
[Install]
|
||||
Also=tftp.socket
|
||||
```
|
||||
|
||||
Make the following changes to the _[Unit]_ section:
|
||||
|
||||
```
|
||||
Requires=tftp-server.socket
|
||||
```
|
||||
|
||||
Make the following changes to the _ExecStart_ line:
|
||||
|
||||
```
|
||||
ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpboot
|
||||
```
|
||||
|
||||
Here are what the options mean:
|
||||
|
||||
* The _**-c**_ option allows new files to be created.
|
||||
* The _**-p**_ option is used to have no additional permissions checks performed above the normal system-provided access controls.
|
||||
* The _**-s**_ option is recommended for security as well as compatibility with some boot ROMs which cannot be easily made to include a directory name in its request.
|
||||
|
||||
|
||||
|
||||
The default upload/download location for transferring the files is _/var/lib/tftpboot_.
|
||||
|
||||
Next, make the following changes to the _[Install]_ section:
|
||||
|
||||
```
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Also=tftp-server.socket
|
||||
```
|
||||
|
||||
Don’t forget to save your changes!
|
||||
|
||||
Here is the completed _/etc/systemd/system/tftp-server.service_ file:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Tftp Server
|
||||
Requires=tftp-server.socket
|
||||
Documentation=man:in.tftpd
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpboot
|
||||
StandardInput=socket
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Also=tftp-server.socket
|
||||
```
|
||||
|
||||
### Starting the TFTP server
|
||||
|
||||
Reload the systemd daemon:
|
||||
|
||||
```
|
||||
systemctl daemon-reload
|
||||
```
|
||||
|
||||
Now start and enable the server:
|
||||
|
||||
```
|
||||
systemctl enable --now tftp-server
|
||||
```
|
||||
|
||||
To change the permissions of the TFTP server to allow upload and download functionality, use this command. Note TFTP is an inherently insecure protocol, so this may not be advised on a network you share with other people.
|
||||
|
||||
```
|
||||
chmod 777 /var/lib/tftpboot
|
||||
```
|
||||
|
||||
Configure your firewall to allow TFTP traffic:
|
||||
|
||||
```
|
||||
firewall-cmd --add-service=tftp --perm
|
||||
firewall-cmd --reload
|
||||
```
|
||||
|
||||
### Client Configuration
|
||||
|
||||
Install the TFTP client:
|
||||
|
||||
```
|
||||
yum install tftp -y
|
||||
```
|
||||
|
||||
Run the _tftp_ command to connect to the TFTP server. Here is an example that enables the verbose option:
|
||||
|
||||
```
|
||||
[client@thinclient:~ ]$ tftp 192.168.1.164
|
||||
tftp> verbose
|
||||
Verbose mode on.
|
||||
tftp> get server.logs
|
||||
getting from 192.168.1.164:server.logs to server.logs [netascii]
|
||||
Received 7 bytes in 0.0 seconds [inf bits/sec]
|
||||
tftp> quit
|
||||
[client@thinclient:~ ]$
|
||||
```
|
||||
|
||||
Remember, TFTP does not have the ability to list file names. So you’ll need to know the file name before running the _get_ command to download any files.
|
||||
|
||||
* * *
|
||||
|
||||
_Photo by _[_Laika Notebooks_][5]_ on [Unsplash][6]_.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/how-to-set-up-a-tftp-server-on-fedora/
|
||||
|
||||
作者:[Curt Warfield][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/rcurtiswarfield/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2019/09/tftp-server-816x345.jpg
|
||||
[2]: https://en.wikipedia.org/wiki/User_Datagram_Protocol
|
||||
[3]: https://docs.fedoraproject.org/en-US/fedora/f30/install-guide/advanced/Network_based_Installations/
|
||||
[4]: https://fedoramagazine.org/systemd-getting-a-grip-on-units/
|
||||
[5]: https://unsplash.com/@laikanotebooks?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[6]: https://unsplash.com/search/photos/file-folders?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
@ -0,0 +1,126 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Bash Script to Send a Mail About New User Account Creation)
|
||||
[#]: via: (https://www.2daygeek.com/linux-shell-script-to-monitor-user-creation-send-email/)
|
||||
[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
|
||||
|
||||
Bash Script to Send a Mail About New User Account Creation
|
||||
======
|
||||
|
||||
For some purposes you may need to keep track of new user creation details on Linux.
|
||||
|
||||
Also, you may need to send the details by mail.
|
||||
|
||||
This may be part of the audit objective or the security team may wish to monitor this for the tracking purposes.
|
||||
|
||||
We can do this in other way, as we have already described in the previous article.
|
||||
|
||||
* **[Bash script to send a mail when new user account is created in system][1]**
|
||||
|
||||
|
||||
|
||||
There are many open source monitoring tools are available for Linux.
|
||||
|
||||
But I don’t think they have a way to track the new user creation process and alert the administrator when that happens.
|
||||
|
||||
So how can we achieve this?
|
||||
|
||||
We can write our own Bash script to achieve this.
|
||||
|
||||
We have added many useful shell scripts in the past. If you want to check them out, go to the link below.
|
||||
|
||||
* **[How to automate day to day activities using shell scripts?][2]**
|
||||
|
||||
|
||||
|
||||
### What does this script really do?
|
||||
|
||||
This will take a backup of the “/etc/passwd” file twice a day (beginning of the day and end of the day), which will enable you to get new user creation details for the specified date.
|
||||
|
||||
We need to add the below two cronjobs to copy the “/etc/passwd” file.
|
||||
|
||||
```
|
||||
# crontab -e
|
||||
|
||||
1 0 * * * cp /etc/passwd /opt/scripts/passwd-start-$(date +"%Y-%m-%d")
|
||||
59 23 * * * cp /etc/passwd /opt/scripts/passwd-end-$(date +"%Y-%m-%d")
|
||||
```
|
||||
|
||||
It uses the “difference” command to detect the difference between files, and if any difference is found to yesterday’s date, the script will send an email alert to the email id given with new user details.
|
||||
|
||||
We can’t run this script often because user creation is not happening frequently. However, we plan to run this script once a day.
|
||||
|
||||
Therefore, you can get a consolidated report on new user creation.
|
||||
|
||||
**Note:** We used our email id in the script for demonstration purpose. So we ask you to use your email id instead.
|
||||
|
||||
```
|
||||
# vi /opt/scripts/new-user-detail.sh
|
||||
|
||||
#!/bin/bash
|
||||
mv /opt/scripts/passwd-start-$(date --date='yesterday' '+%Y-%m-%d') /opt/scripts/passwd-start
|
||||
mv /opt/scripts/passwd-end-$(date --date='yesterday' '+%Y-%m-%d') /opt/scripts/passwd-end
|
||||
ucount=$(diff /opt/scripts/passwd-start /opt/scripts/passwd-end | grep ">" | cut -d":" -f6 | cut -d"/" -f3 | wc -l)
|
||||
if [ $ucount -gt 0 ]
|
||||
then
|
||||
SUBJECT="ATTENTION: New User Account is created on server : `date --date='yesterday' '+%b %e'`"
|
||||
MESSAGE="/tmp/new-user-logs.txt"
|
||||
TO="[email protected]"
|
||||
echo "Hostname: `hostname`" >> $MESSAGE
|
||||
echo -e "\n" >> $MESSAGE
|
||||
echo "The New User Details are below." >> $MESSAGE
|
||||
echo "+------------------------------+" >> $MESSAGE
|
||||
diff /opt/scripts/passwd-start /opt/scripts/passwd-end | grep ">" | cut -d":" -f6 | cut -d"/" -f3 >> $MESSAGE
|
||||
echo "+------------------------------+" >> $MESSAGE
|
||||
mail -s "$SUBJECT" "$TO" < $MESSAGE
|
||||
rm $MESSAGE
|
||||
fi
|
||||
```
|
||||
|
||||
Set an executable permission to "new-user-detail.sh" file.
|
||||
|
||||
```
|
||||
$ chmod +x /opt/scripts/new-user-detail.sh
|
||||
```
|
||||
|
||||
Finally add a cronjob to automate this. It runs daily at 7AM.
|
||||
|
||||
```
|
||||
# crontab -e
|
||||
|
||||
0 7 * * * /bin/bash /opt/scripts/new-user.sh
|
||||
```
|
||||
|
||||
**Note:** You will receive an email alert at 7AM every day, which is for yesterday's date details.
|
||||
|
||||
**Output:** The output will be the same as the one below.
|
||||
|
||||
```
|
||||
# cat /tmp/new-user-logs.txt
|
||||
|
||||
Hostname: CentOS.2daygeek.com
|
||||
|
||||
The New User Details are below.
|
||||
+------------------------------+
|
||||
tuser3
|
||||
+------------------------------+
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.2daygeek.com/linux-shell-script-to-monitor-user-creation-send-email/
|
||||
|
||||
作者:[Magesh Maruthamuthu][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.2daygeek.com/author/magesh/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.2daygeek.com/linux-bash-script-to-monitor-user-creation-send-email/
|
||||
[2]: https://www.2daygeek.com/category/shell-script/
|
105
translated/talk/20190902 Why I use Java.md
Normal file
105
translated/talk/20190902 Why I use Java.md
Normal file
@ -0,0 +1,105 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Why I use Java)
|
||||
[#]: via: (https://opensource.com/article/19/9/why-i-use-java)
|
||||
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
|
||||
|
||||
我为什么使用 Java
|
||||
======
|
||||
|
||||
> 根据你的工作需要,可能有比 Java 更好的语言,但是我还没有看到任何能把我拉走的语言。
|
||||
|
||||
![Coffee beans][1]
|
||||
|
||||
我记得我是从 1997 年开始使用 Java 的,就在 [Java 1.1 刚刚发布][2]不久之后。从那时起,总的来说,我非常喜欢用 Java 编程;虽然我得承认,这些日子我经常像在 Java 中编写“严肃的代码”一样编写 [Groovy][3] 脚本。
|
||||
|
||||
来自 [FORTRAN][4]、[PL/1][5]、[Pascal][6] 以及最后的 [C 语言][7] 背景,我发现了许多让我喜欢 Java 的东西。Java 是我[面向对象编程][8]的第一次重要实践经验。到那时,我已经编程了大约 20 年,而且可以说我对什么重要、什么不重要有了一些看法。
|
||||
|
||||
### 调试是一个关键的语言特性
|
||||
|
||||
我真的很讨厌浪费时间追踪由我的代码不小心迭代到数组末尾导致的模糊错误,特别是在 IBM 大型机上的 FORTRAN 编程时代。另一个不时出现的微妙问题是调用一个子程序,该子程序带有一个四字节整数参数,而预期有两个字节;在小端架构上,这通常是一个良性的错误,但在大端机器上,前两个字节的值通常并不总是为零。
|
||||
|
||||
在那种批处理环境中进行调试也非常不便,通过核心转储或插入打印语句进行调试,这些语句本身会移动错误的位置甚至使它们消失。
|
||||
|
||||
所以我使用 Pascal 的早期体验,先是在 [MTS][9] 上,然后是在 [IBM OS/VS1][10] 上使用相同的 MTS 编译器,让我的生活变得更加轻松。Pascal 的[强类型和静态类型][11]是胜利的重要组成部分,我使用的每个 Pascal 编译器都在数组的边界和范围上插入运行时检查,因此错误可以在发生时检测到。当我们在 20 世纪 80 年代早期将大部分工作转移到 Unix 系统时,移植 Pascal 代码是一项简单的任务。
|
||||
|
||||
### 找到适量的语法
|
||||
|
||||
但是对于我所喜欢的 Pascal 来说,我的代码很冗长,而且语法似乎要比代码还要多;例如,使用:
|
||||
|
||||
```
|
||||
if ... then begin ... end else ... end
|
||||
```
|
||||
|
||||
而不是 C 或类似语言中的:
|
||||
|
||||
```
|
||||
if (...) { ... } else { ... }
|
||||
```
|
||||
|
||||
另外,有些事情在 Pascal 中很难完成,在 C 中更容易。但是,当我开始越来越多地使用 C 时,我发现自己遇到了我曾经在 FORTRAN 中遇到的同样类型的错误,例如,超出数组边界。在原始的错误点未检测到数组结束,而仅在程序执行后期才会检测到它们的不利影响。幸运的是,我不再生活在那种批处理环境中,并且手头有很好的调试工具。不过,C 给我的灵活性还是对我有好处的。
|
||||
|
||||
当我发现 [awk][12] 时,我对它与 C 做了一个很好的对比。那时,我的很多工作都涉及转换字段数据并创建报告。我发现用 `awk` 加上其他 Unix 命令行工具,如 `sort`、`sed`、`cut`、`join`、`paste`、`comm` 等等,可以做到事情令人吃惊。从本质上讲,这些工具给了我一个像是文本文件的关系数据库管理器,这种文本文件具有列式结构,是我们很多字段数据保存的方式。或者,即便不是那种格式,大部分时候也可以从关系数据库或某种二进制格式导出到列式结构中。
|
||||
|
||||
`awk` 支持的字符串处理、[正则表达式][13]和[关联数组][14],以及 `awk` 的基本特性(它实际上是一个数据转换管道),非常符合我的需求。当面对二进制数据文件、复杂的数据结构和对性能的绝对需求时,我仍然会转回到 C;但随着我越来越多地使用 `awk`,我发现 C 的非常基础的字符串支持越来越令人沮丧。随着时间的推移,更多的时候我只会在必须时才使用 C,并且在其余的时候里大量使用 `awk`。
|
||||
|
||||
### Java 的抽象层级合适
|
||||
|
||||
然后是 Java。它看起来相当不错 —— 一个相对简洁的语法,让人联想到 C,或者这种相似性至少比 Pascal 或其他任何早期的语言更为明显。它是强类型的,因此很多编程错误会在编译时被捕获。它似乎并不需要过多的面向对象的知识就能开始,这是一件好事,因为我当时对 [OOP 设计模式][15]毫不熟悉。但即使在刚开始,我也喜欢它的简化[继承模型][16]背后的思想。(Java 允许使用提供的接口进行单继承,以在某种程度上丰富范例。)
|
||||
|
||||
它似乎带有丰富的功能库(即“自备电池”的概念),在适当的水平上直接满足了我的需求。最后,我发现自己很快就会想到将数据和行为在对象中组合在一起的想法。这似乎是明确控制数据之间交互的好方法 —— 比大量的参数列表或对全局变量的不受控制的访问要好得多。
|
||||
|
||||
从那以后,Java 在我的编程工具箱中成为了 Helvetic 军刀。我仍然偶尔会在 `awk` 中编写内容,或者使用 Linux 命令行实用程序(如 `cut`、`sort` 或 `sed`),因为它们显然是解决手头问题的直接方法。我怀疑过去 20 年我有没有写过 50 行的 C 语言代码;Java 完全满足了我的需求。
|
||||
|
||||
此外,Java 一直在不断改进。首先,它变得更加高效。并且它添加了一些非常有用的功能,例如[可以用 try 来测试资源][17],它可以很好地清理在文件 I/O 期间冗长而有点混乱的错误处理代码;或 [lambda][18],它提供了声明函数并将其作为参数传递的能力,而旧方法需要创建类或接口来“托管”这些函数;或[流][19],它封装了函数中的迭代行为,可以创建以链式函数调用形式实现的高效数据转换管道。
|
||||
|
||||
### Java 越来越好
|
||||
|
||||
许多语言设计者研究了从根本上改善 Java 体验的方法。对我来说,其中大部分没有引起我的太多兴趣;再次,这更多地反映了我的典型工作流程,并且(更多地)减少了这些语言带来的功能。但其中一个演化步骤已经成为我的编程工具中不可或缺的一部分:[Groovy][20]。当我遇到一个小问题,需要一个简单的解决方案时,Groovy 已经成为了我的首选解决方案。而且,它与 Java 高度兼容。对我来说,Groovy 填补了 Python 为许多其他人所提供相同用处 —— 它紧凑、DRY(不要重复自己)和具有表达性(列表和词典有完整的语言支持)。我还使用了 [Grails][21],它使用 Groovy 为非常高性能和有用的 Java Web 应用程序提供简化的 Web 框架。
|
||||
|
||||
### Java 仍然开源吗?
|
||||
|
||||
最近,对 [OpenJDK][22] 越来越多的支持进一步提高了我对 Java 的舒适度。许多公司以各种方式支持 OpenJDK,包括 [AdoptOpenJDK、Amazon 和 Red Hat][23]。在我的一个更大、更长期的项目中,我们使用 AdoptOpenJDK [来在几个桌面平台上生成自定义的运行时环境][24]。
|
||||
|
||||
有没有比 Java 更好的语言?我确信有,这取决于你的工作需要。但我一直对 Java 非常满意,我还没有遇到任何可能会让我失望的东西。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/9/why-i-use-java
|
||||
|
||||
作者:[Chris Hermansen][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/clhermansen
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/java-coffee-beans.jpg?itok=3hkjX5We (Coffee beans)
|
||||
[2]: https://en.wikipedia.org/wiki/Java_version_history
|
||||
[3]: https://en.wikipedia.org/wiki/Apache_Groovy
|
||||
[4]: https://en.wikipedia.org/wiki/Fortran
|
||||
[5]: https://en.wikipedia.org/wiki/PL/I
|
||||
[6]: https://en.wikipedia.org/wiki/Pascal_(programming_language)
|
||||
[7]: https://en.wikipedia.org/wiki/C_(programming_language)
|
||||
[8]: https://en.wikipedia.org/wiki/Object-oriented_programming
|
||||
[9]: https://en.wikipedia.org/wiki/Michigan_Terminal_System
|
||||
[10]: https://en.wikipedia.org/wiki/OS/VS1
|
||||
[11]: https://stackoverflow.com/questions/11889602/difference-between-strong-vs-static-typing-and-weak-vs-dynamic-typing
|
||||
[12]: https://en.wikipedia.org/wiki/AWK
|
||||
[13]: https://en.wikipedia.org/wiki/Regular_expression
|
||||
[14]: https://en.wikipedia.org/wiki/Associative_array
|
||||
[15]: https://opensource.com/article/19/7/understanding-software-design-patterns
|
||||
[16]: https://www.w3schools.com/java/java_inheritance.asp
|
||||
[17]: https://www.baeldung.com/java-try-with-resources
|
||||
[18]: https://www.baeldung.com/java-8-lambda-expressions-tips
|
||||
[19]: https://www.tutorialspoint.com/java8/java8_streams
|
||||
[20]: https://groovy-lang.org/
|
||||
[21]: https://grails.org/
|
||||
[22]: https://openjdk.java.net/
|
||||
[23]: https://en.wikipedia.org/wiki/OpenJDK
|
||||
[24]: https://opensource.com/article/19/4/java-se-11-removing-jnlp
|
@ -0,0 +1,90 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to Install Shutter Screenshot Tool in Ubuntu 19.04)
|
||||
[#]: via: (https://itsfoss.com/install-shutter-ubuntu/)
|
||||
[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
|
||||
|
||||
如何在 Ubuntu 19.04 中安装 Shutter 截图工具
|
||||
======
|
||||
|
||||
Shutter 是我在 [Linux 中最喜欢的截图工具][1]。你可以使用它截图,还可以用它编辑截图或其他图像。它是一个在图像上添加箭头和文本的不错的工具。你也可以使用它在 Ubuntu 或其他你使用的发行版中[调整图像大小][2]。FOSS 上大多数截图教程都使用 Shutter 编辑。
|
||||
|
||||
![][3]
|
||||
|
||||
虽然 [Shutter][4] 一直是一款很棒的工具,但它的开发却停滞了。这几年来一直没有新版本的 Shutter。甚至像 [Shutter 中编辑模式被禁用][5]这样的简单 bug 也没有修复。根本没有开发者的消息。
|
||||
|
||||
也许这就是为什么 Ubuntu 的新版本放弃它的原因。在 Ubuntu 18.04 LTS 之前,你可以在软件中心,或者[启用 universe 仓库][7]来[使用 apt-get 命令][6]安装它。但是从 Ubuntu 18.10 及更高版本开始,你就不能再这样做了。
|
||||
|
||||
抛开这些缺点,Shutter 是一个很好的工具,我想继续使用它。也许你也是像我这样的 Shutter 粉丝,并且想要使用它。好的方面是你仍然可以在 Ubuntu 19.04 中安装 Shutter,这要归功于非官方 PPA。
|
||||
|
||||
### 在 Ubuntu 19.04 上安装 Shutter
|
||||
|
||||
![Install Shutter Ubuntu][8]
|
||||
|
||||
我希望你了解 PPA 的概念。如果不了解,我强烈建议阅读我的指南,以了解更多关于[什么是 PPA 以及如何使用它][9]。
|
||||
|
||||
现在,打开终端并使用以下命令添加新仓库:
|
||||
|
||||
```
|
||||
sudo add-apt-repository -y ppa:linuxuprising/shutter
|
||||
```
|
||||
|
||||
不需要再使用 apt update,因为从 Ubuntu 18.04 开始,仓库会在添加新条目后自动更新。
|
||||
|
||||
现在使用 apt 命令安装 Shutter:
|
||||
|
||||
```
|
||||
sudo apt install shutter
|
||||
```
|
||||
|
||||
完成。你应该已经安装 Shutter 截图工具。你可从菜单搜索并启动它。
|
||||
|
||||
|
||||
### 删除通过非官方 PPA 安装的 Shutter
|
||||
|
||||
最后我以卸载 Shutter 以及删除添加的仓库来结束教程。
|
||||
|
||||
首先,从系统中删除 Shutter:
|
||||
|
||||
```
|
||||
sudo apt remove shutter
|
||||
```
|
||||
|
||||
接下来,从你的仓库列表中删除 PPA:
|
||||
|
||||
```
|
||||
sudo add-apt-repository --remove ppa:linuxuprising/shutter
|
||||
```
|
||||
|
||||
你或许还想了解 [Y PPA Manager][11],这是一款 PPA 图形管理工具。
|
||||
|
||||
Shutter
|
||||
|
||||
Shutter 是一个很好的工具,我希望它能被积极开发。我希望它的开发人员没问题,他/她可以找一些时间来处理它。或者是时候让其他人分叉并继续让它变得更棒。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-shutter-ubuntu/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/take-screenshot-linux/
|
||||
[2]: https://itsfoss.com/resize-images-with-right-click/
|
||||
[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2018/08/shutter-screenshot.jpg?ssl=1
|
||||
[4]: http://shutter-project.org/
|
||||
[5]: https://itsfoss.com/shutter-edit-button-disabled/
|
||||
[6]: https://itsfoss.com/apt-get-linux-guide/
|
||||
[7]: https://itsfoss.com/ubuntu-repositories/
|
||||
[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/09/Install-Shutter-ubuntu.jpg?resize=800%2C450&ssl=1
|
||||
[9]: https://itsfoss.com/ppa-guide/
|
||||
[11]: https://itsfoss.com/y-ppa-manager/
|
Loading…
Reference in New Issue
Block a user